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.
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
.
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ä.
Laita
echo "'$vastustaja'";
niin näet onko siinä oikeasti välilyöntiä. Jos on, se tulee formista. Veikkaan kuitenkin että vika on jossain muualla.
No eipä sit välilyöntiä sitten näyttää olekaan. Mutta mis vika sitten on?
Vika löytyy debuggaamalla, kannattaa opetella. Tarkista jokainen kohta erikseen.
jne.
Koitin jo tuossa ennemmin nii et tarkistan vain
$vastustaja == $t_vastustaja
ja koitin vielä uudestaan, mutta ei toimi silti.
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.
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.
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ä??
$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.
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ä.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.