Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP tekee ylimääräisen välilyönnin

Sivun loppuun

gleant [18.07.2009 20:45:50]

#

Eli tämän näköinen on koodi

<?php
$tiedosto = file("tekstitiedostot/pelit.txt");
	$paiva = $_POST['paiva'];
	$kuukausi = $_POST['kuukausi'];
	$vuosi = $_POST['vuosi'];
	$vastustaja =$_POST['vastustaja'];
	$kotijoukkue_m = $_POST['kotijoukkue_m'];
	$vierasjoukkue_m = $_POST['vierasjoukkue_m'];
	$maara = count($tiedosto);
	for ($i=0;$i<$maara;$i++)
	{
		$tiedot = explode("|", $tiedosto[$i], 6);
		$pvm = $tiedot[0];
		$kotijoukkue = $tiedot[1];
		$vierasjoukkue = $tiedot[2];
		$paikka = $tiedot[3];
		$t_vastustaja = $tiedot[5];
		$aika = getdate($pvm);
		if ($paiva == $aika['mday'] && $kuukausi == $aika['mon'] && $vuosi == $aika['year'] && $vastustaja == $t_vastustaja)
		{
			$rivi = "$pvm|$kotijoukkue|$vierasjoukkue|$paikka|$kotijoukkue_m-$vierasjoukkue_m|$vastustaja\n";
			$tiedosto[$i] = $rivi;
			$tiedosto = implode($tiedosto);
			file_put_contents("tekstitiedostot/pelit.txt", $tiedosto);
		}
	}

}
?>

Ja ongelmana on se, että if-lauseessa:

if ($paiva == $aika['mday'] && $kuukausi == $aika['mon'] && $vuosi == $aika['year'] && $vastustaja == $t_vastustaja)

muuttujaan $vastustaja tulee yksi välilynti eteen eikä vertailu palauta silloin true. Eli mistä tää välilyönti tänne tulee?
Edit: Lisäksi tuo välilyönti ei tule näkyviin tiedostoon johon kirjoitetaan.

tsuriga [18.07.2009 21:02:08]

#

Olisko kuitenni kyse siitä, että tiedosto sisältää rivinvaihdot (ja täten myös $t_vastustaja)? Yksi ratkaisu on lisätä file-funkkarille toiseksi parametriksi FILE_IGNORE_NEW_LINES.

gleant [18.07.2009 21:10:00]

#

No ku laitoin tohon if-lauseen jälkeen testiksi

echo "$vastustaja";

tulee jokaiseen väliin väli vaikka missää ei ole väliä.
tiedoston kuuluu sisältää rivinvaihdot. Tää juttu toimi toises ohjelmas kyllä.

Chiman [18.07.2009 21:42:28]

#

Laita

echo "'$vastustaja'";

niin näet onko siinä oikeasti välilyöntiä. Jos on, se tulee formista. Veikkaan kuitenkin että vika on jossain muualla.

gleant [18.07.2009 21:59:13]

#

No eipä sit välilyöntiä sitten näyttää olekaan. Mutta mis vika sitten on?

Chiman [18.07.2009 22:03:56]

#

Vika löytyy debuggaamalla, kannattaa opetella. Tarkista jokainen kohta erikseen.

if ($paiva == $aika['mday']) echo "paiva on ok! ";

jne.

gleant [18.07.2009 22:19:08]

#

Koitin jo tuossa ennemmin nii et tarkistan vain

$vastustaja == $t_vastustaja

ja koitin vielä uudestaan, mutta ei toimi silti.

Chiman [18.07.2009 22:46:27]

#

Niin, eli ne eivät ole samoja. Katso mikä on $t_vastustajan sisältö:

echo "'$t_vastustaja'";

Idea on siis tulostaa kaikki mahdollinen asiaan vaikuttava, niin että löydät virhekohdan ja osaat korjata sen.

Teuro [18.07.2009 22:49:50]

#

Ja päivämääriä vertailtaessa kannattaa ehkä vertailla aikaleimoja, koska silloin selviää helpolla kahden int luvun vertailulla. Muutoinkin muunnos selväkieliseen vasta tulostusvaiheessa php:n omalla date(format, [date]) funktiolla.

gleant [18.07.2009 22:53:37]

#

No nyt tulostin noi kaks muuttujaa peräkanaa ja laitoin heittomerkit ympärille nii huomasin että se välilyönti onkin $t_vastustaja perässä.Mutta mistä se siihen tulee ku tekstitiedostossa ei ole eikä koodiskaa missää sitä lisätä??

Teuro [18.07.2009 22:56:37]

#

$t_vastustaja taitaa olla rivin viimeinen kenttä, jolloin siihen kuuluu tuo rivinvaihtomerkki. Saat sen pois ajamalla kentät trim() funktion läpi, joka poistaa muun muassa tuon \n tai \r\n merkin.

Metabolix [18.07.2009 23:24:44]

#

Sivun lähdekoodista näkisit, että kyseessä ei ole välilyönti vaan rivinvaihto (HTML:ssä rivinvaihtokin näytetään vain välilyöntinä, koska varsinaiset tekstin rivitykset tehdään HTML-elementeillä). Juuri tähän ongelmaan tsuriga antoi ratkaisun jo ensimmäisessä vastauksessaan. Voisit vaivautua edes testaamaan, kun joku ystävällisesti vaivautuu auttamaan.

Kannattaisi varmaankin laittaa if-lauseen loppuun vielä break, jotta silmukan suoritus lopetetaan osuman löydyttyä.

gleant [18.07.2009 23:33:39]

#

Testasin kyllä, mutta sattu unohtua kirjoittaa ettei ollut minun käyttö tarkoituksiin sopiva jos sitä sitten oikein käytin ku toi FILE_IGNORE_NEW_LINES pisti koko tiedoston sisällön yhdelle riville ja ku se tiedosto ei sitte enää toimi mun käytös enää oikein. Mutta tolla trim()-funktiolla sain toimimaan. Kiitoksia kaikille auttaneille.
Just pistin tos sen tonne perää ku se tippu jossain vaihees sieltä välistä pois ku sitä yritin ite säätää toimimaan.


Sivun alkuun

Vastaus

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

Tietoa sivustosta