Tein tuossa eräs päivä sellaisen kyselyjärjestelmän. Se ei vain tunnu millään toimivan. Kun klikkaa oman vaihtoehdon ja painaa lähetä, mitään ei tapahdu. Chmodit on kuitenkin kohdalleen.
*** aanestyspoyta.php *** <div style="margin-left: 5px;"> <?php $tiedosto = fopen("tilastot/aanestys.txt", "r"); $buffer = fread($tiedosto, 8194); $tulos = explode('|', $buffer); echo "<br />Ei mihinkään: " . $tulos[0]; echo "<br />Turkuun: " . $tulos[1]; echo "<br />Raumaan: " . $tulos[2]; fclose($tiedosto); ?> <br /><br /><br /> <b>Äänestä itse</b> <br /><br /> Haluan Laitilan liittyvän <form method="post" action="laheta_mielipide.php"> <input type="radio" name="valinta" value="1" /> En mihinkään <br /><input type="radio" name="valinta" value="2" /> Turkuun <br /><input type="radio" name="valinta" value="3" /> Raumaan <p /><input type="submit" value="Lähetä mielipide"> </form> </div>
*** laheta_mielipide.php *** <?php $tiedosto = fopen("tilastot/aanestys.txt", "r"); /* Tuon r:än tilalle olen kokeillut muitakin. Esim. w:llä tuon tiedoston sisältö tyhjenee. Voisiko ongelma olla tässä? */ $buffer = fread($tiedosto, 8194); $tulos = explode("|", $buffer); if ( $valinta==1 ) { $yht = $tulos[0] + 1; fwrite($tiedosto, $yht."|".$tulos[1]."|".$tulos[2]); } if ( $valinta==2 ) { $yht = $tulos[1] + 1; fwrite($tiedosto, $tulos[0]."|".$yht."|".$tulos[2]); } if ( $valinta==3 ) { $yht = $tulos[2] + 1; fwrite($tiedosto, $tulos[0]."|".$tulos[1]."|".$yht); } fclose($tiedosto); header('Location: aanestyspoyta.php'); ?>
Pyydän todella pikaista ratkaisua. Teen erästä äänestys-sivustoa laitilalle, ja projektilla olisi vähän kiire.
Codeprofile kirjoitti:
Tein tuossa eräs päivä sellaisen kyselyjärjestelmän. Se ei vain tunnu millään toimivan. Kun klikkaa oman vaihtoehdon ja painaa lähetä, mitään ei tapahdu. Chmodit on kuitenkin kohdalleen.
Ongelmana on ainakin se, että yrität kirjoittaa vain lukutilaan avattua tiedostoa ("r"). Voit asettaa tiedoston esim "r+"-tilaan (luku ja kirjoitus, uutta tiedostoa ei luoda). Kun olet lukenut tiedostosta tarvittavan tiedon, siirrät osoittimen tiedoston loppuun (tai haluamaasi kohtaan) fseek-komennolla ja kirjoitat. Kirjoituksen siirtäminen tiedoston loppuun tapahtuu komennolla fseek($tiedosto, 0, SEEK_END).
Ei ainakaan tällä toiminut:
*** laheta_mielipide.php *** <?php $tiedosto = fopen("tilastot/aanestys.txt", "r+"); $buffer = fread($tiedosto, 8194); fseek($tiedosto, 0, SEEK_END); $tulos = explode("|", $buffer); if ( $valinta==1 ) { $yht = $tulos[0] + 1; fwrite($tiedosto, $yht."|".$tulos[1]."|".$tulos[2]); } if ( $valinta==2 ) { $yht = $tulos[1] + 1; fwrite($tiedosto, $tulos[0]."|".$yht."|".$tulos[2]); } if ( $valinta==3 ) { $yht = $tulos[2] + 1; fwrite($tiedosto, $tulos[0]."|".$tulos[1]."|".$yht); } fclose($tiedosto); header('Location: aanestyspoyta.php'); ?>
Eikä myöskään ilman tuota fseek-riviä. Mitään ei tapahdu.
EDIT: Olen kokeillut pistää tuon fseekin myös niin että se tulee buuffer-muuttujaan ja fseekillä osoitetaan buffer2-muuttujaan, eli freadiin. Ei toimi millään tavalla.
Toimisikohan tuohon laheta_mielipide.php tiedostoon tällainen rivi:
$tiedosto = fopen("tilastot/aanestys.txt", "a");
Ei toimi.
Mutta nyt älysn erään kummallisen asian: tuossa kun on tuo name="mielipide", niin se ei ikäänkuin 'ylety' tuonne laheta_mielipide.php tiedostoon jostain syystä. Yritin tulostaa muuttujan $mielipide sisällön, ja siinä ei ollut mitään muutkuin välilyönti.
<?php $osa = explode("|", file_get_contents("tilastot/aanestys.txt")); $osa[--$_POST['valinta']]++; $fp = fopen("tilastot/aanestys.txt", "w"); fwrite($fp, implode("|", $osa)); fclose($fp); header('Location: aanestyspoyta.php'); ?>
Edit: poistin r+ moodin, ja lisäsin w moodin, ja datan lukeminen file_get_contents funkkarilla. Pitäisi jo toimia o_O
Codeprofile kirjoitti:
Mutta nyt älysn erään kummallisen asian: tuossa kun on tuo name="mielipide", niin se ei ikäänkuin 'ylety' tuonne laheta_mielipide.php tiedostoon jostain syystä. Yritin tulostaa muuttujan $mielipide sisällön, ja siinä ei ollut mitään muutkuin välilyönti.
Ei siellä ole name="mielipide", vaan name="valinta". Se välittyy formeja käyttämällä muuttujaan $_POST['valinta'].
Edit: Jahas, olin 25 s liian hidas :)
Toimii, mutta vielä eräs kysymys:
Tämä koodi...
<?php $tiedosto = fopen("tilastot/aanestys.txt", "r"); $buffer = fread($tiedosto, 8194); $tulos = explode('|', $buffer); echo "<br />Ei mihinkään: " . $tulos[0]; echo "<br />Turkuun: " . $tulos[1]; echo "<br />Raumaan: " . $tulos[2]; fclose($tiedosto); ?>
... tulostaa tämmöisen rivin:
Ei mihinkään: Mihin Laitilan pitäisi liittyä? Ei mihinkään Raumaan Turkuuo Turkuun: Raumaan:
Niin mikä on kysymys?
<pre> <?php print_r($tulos); ?> </pre>
Yllä on skripti, joka kertonee mitä $tulos muuttuja sisältää. Kysymys koskee varmaankin vääristä taulukon soluista tulostettua tietoa(?) tai alkuperäinen tekstirimpsu ei sisälläkään | -merkkejä.
Siis tuolla on tämmöinen bugi: http://cpp.dy.fi/laitilagallup/bugi.jpg.
Tuota voi tarkemmin katsoa täältä: http://cpp.dy.fi/laitilagallup/aanestyspoyta.php.
EDIT: No nyt sain sen toimimaan, kiitos kaikille avusta.
OT: Sulta puuttuu tuosta vaihtoehto: Uusikaupunki. =D
Aihe on jo aika vanha, joten et voi enää vastata siihen.