Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kyselyjärjestelmän ongelma

Sivun loppuun

Codeprofile [04.06.2007 11:07:45]

#

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.

A-P [04.06.2007 11:18:14]

#

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.

$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);
 .
 .
 .
 fwrite($tiedosto, $yht."|".$tulos[1]."|".$tulos[2]);
 .
 .
 .
 fclose($tiedosto);

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).

Codeprofile [04.06.2007 11:32:00]

#

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.

Short Php [04.06.2007 12:34:27]

#

Toimisikohan tuohon laheta_mielipide.php tiedostoon tällainen rivi:

 $tiedosto = fopen("tilastot/aanestys.txt", "a");

Codeprofile [04.06.2007 13:22:18]

#

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.

T.M. [04.06.2007 13:31:41]

#

<?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

Chiman [04.06.2007 13:32:06]

#

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 :)

Codeprofile [04.06.2007 15:24:08]

#

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:

Lebe80 [04.06.2007 15:32:12]

#

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ä.

Codeprofile [04.06.2007 15:52:15]

#

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.

Wiwwe [05.06.2007 15:39:17]

#

OT: Sulta puuttuu tuosta vaihtoehto: Uusikaupunki. =D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta