Moro. Tekeillä olis tällänen Poll/Gallup/Kysely -skripti koulua varten (pitää siis tehdä tällänen kouluun). Sain toimimaan tiedostoon kirjoituksen muuten hyvin, mutta rivitys menee vähän päin vittua.
<?php $tiedosto = file('kys.txt'); $maara = count($tiedosto); for($x=0; $x < $maara; $x++) { $tiedot[$x] = explode("|", $tiedosto[$x], 2); } $valinta = $_GET['valinta']; $avattu = fopen('kys.txt', 'w'); $luku = $maara-1; for($x=0; $x < $maara; $x++) { $vaihtoehto = $tiedot[$x][0]; $vastaus = $tiedot[$x][1]; if($x == $valinta || $x == 0) { $vastaus += 1; } if($x == $luku) { fwrite($avattu, "$vaihtoehto|$vastaus"); } else { fwrite($avattu, "$vaihtoehto|$vastaus\n"); } } fclose($avattu); header("location: vastaukset.php"); ?>
Jos se on noin, niin tulee rivejä mitä oudoimpiin paikkoihin, esimerkiksi ykkös- ja kakkosrivin väliin (siis tyhjiä rivejä). Jos taas jätän tuon \n pois, niin luonnollisesti ei tule rivinvaihtoa ollenkaan. Tarkoitus on siis lukea tiedostosta kysymys, vaihtoehdot, vaustausten määr yhteensä ja vastaukset tiettyyn vaihtoehtoon. Tiedosto on siis muotoa:
Miksi tämä on väärin?|100
Koska et vain osaa|33
Koska olet Punppis|33
En tiedä, en osaa PHP:ta|33
En tajunnut kysymystä|1
Eli tuossa tiedostossa olisi aiheena tuo ensimmäinen rivi, ja vastaukset yhteensä | merkin toisella puolen eli 100. Sitten neljä vaihtoehtoa vastauksia ja jokaisen perässä kyseisen vaihtoehdon vastausmäärät. Eli jos vastaisin "En tajunnut kysymystä" niin tiedoston KUULUISI olla käsittelyn jälkeen:
Miksi tämä on väärin?|101
Koska et vain osaa|33
Koska olet Punppis|33
En tiedä, en osaa PHP:ta|33
En tajunnut kysymystä|2
Mutta ongelmana on kuitenkin nuo rivinvaihdot. Miten saisin niin, että ei tulisi turhia rivinvaihtoja tekstin loppuun, eikä vaihtoehtojen väliin. ;)
E: parin vastauksen jälkeen tiedosto näyttää tältä:
kumpi|26 mors|13 | | | | moikka|13
vaikka pitäis olla:
kumpi|26 mors|13 moikka|13
Laita ylimääräinen | merkki ennen rivinvaihtoa.
T.M. kirjoitti:
Laita ylimääräinen | merkki ennen rivinvaihtoa.
Siis tuo | merkki on tuossa sen takia, koska käytän explode-funktiota vaihtoehtojen ja vastausten määrien erittelyyn. Eli jos laitan "$vaihtoehto|$vastaus|\n" niin tiedostoon tulee esim. "vaihtoehto|19|".
Jep. Siitähän se ongelma johtuu, file() jättää rivien loppuun rivinvaihdot, ja explode ottaa sen rivinvaihdon mukaan.
taidan olla tyhmä. en tajunnut :( mutta ei se kyllä toiminut tuon |\n kanssakaan.
Olet toteuttanut tuon hieman huonosti.
Tässä toimiva:
<?php $tiedosto = file('test22.txt'); $maara = count($tiedosto); $valinta = $_GET['valinta']; $fp = fopen('test22.txt', 'w'); for($x = 0; $x < $maara; $x++) { $osa = explode("|", $tiedosto[$x]); $vaihtoehto = $osa[0]; $vastaus = $osa[1]; if($x == $valinta) { $vastaus++; } fwrite($fp, "$vaihtoehto|$vastaus|\n"); } fclose($fp); ?>
Ja sen vian oli pakko olla siinä | merkissä >_>
e: nevermaind :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.