Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP:lla rivitysongelmia

punppis [06.10.2006 16:28:20]

#

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

T.M. [06.10.2006 17:10:21]

#

Laita ylimääräinen | merkki ennen rivinvaihtoa.

punppis [06.10.2006 17:16:30]

#

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

T.M. [06.10.2006 17:20:56]

#

Jep. Siitähän se ongelma johtuu, file() jättää rivien loppuun rivinvaihdot, ja explode ottaa sen rivinvaihdon mukaan.

punppis [06.10.2006 17:33:08]

#

taidan olla tyhmä. en tajunnut :( mutta ei se kyllä toiminut tuon |\n kanssakaan.

T.M. [06.10.2006 17:58:16]

#

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

punppis [06.10.2006 18:17:39]

#

e: nevermaind :D

Vastaus

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

Tietoa sivustosta