joo nyt olen tuon edellisen keskustelun avulla saanut vieraskirjan adminpaneelin toimimaan melkein mutta nyt kun yritän vastata viestiin se vastaa aina viestiin joka on ensimmäisenä kirjoitettu
Adminpaneeli:
<?php $viestit = file("viestit.txt"); $viestit = array_reverse($viestit); $viestimaara = count($viestit); $luku = $viestimara; echo "Yhteensä: <b>" . $viestimaara . "</b> viestiä.<p>"; $viestimaara2 = $viestimaara - 1; for ($i = 0, $j = $viestimaara2; $i < $viestimaara; $i++, $j--) { $tiedot = explode("|", $viestit[$i], 5); $nimi = $tiedot[0]; $email = $tiedot[1]; $aika = $tiedot[2]; $viesti = $tiedot [3]; $vastaus = $tiedot[4]; echo "<font color=\"#8C7853\">Lähettäjä:</font> <a href=\"mailto:$email\">$nimi</a><br>"; echo "<font color=\"#8C7853\">Aika:</font> $aika<br>"; echo "<font color=\"#8C7853\">Viesti:</font><br>$viesti<br>"; if ($vastaus == "") { echo "<font color=\"#8C7853\">Vastaus:</font><br> Ylläpito ei ole vastannut vielä."; } else{ echo "<font color=\"#8C7853\">Vaataus:</font><br>$vastaus"; } echo "<br><FORM ACTION=\"vastaa.php\" METHOD=\"GET\">"; echo "<input type=hidden name=\"rivi\" value=\"$j\">"; echo "Vastaus: <INPUT TYPE=\"text\" NAME=\"vastaus\" SIZE=\"30\" MAXLENGTH=\"255\">"; echo "<INPUT TYPE=submit value=\"Vastaa\"><br>"; echo $j; echo "<hr>"; $luku--; } ?>
vastaa.php:
<?php $vastaus = $_GET["vastaus"]; $rivi = $_GET["rivi"]; $vastaus = htmlspecialchars($vastaus); $rivit = file("viestit.txt"); $rivit = array_map("trim", $rivit); $rivit[$rivi] = $rivit[$rivi] . "|" . $vastaus; $tt = fopen("viestit.txt", "w"); for ($i=0; $i<count($rivit); $i++) fwrite($tt, $rivit[$i]."\r\n"); fclose($tt); ?>
joku mättää taas kerran toivottavasti jollakin on ideoita.
Voit selvittää ongelmaa itsekin tulostamalla muuttujien arvoja sopivissa kohdissa. Milloin rivinumero muuttuu vääräksi?
tulostin rivinumerot kolmessa kohtaa ja sain tuloksia:
0
0
0
käytin muuttujien tulostuskohtina:
<?php $vastaus = $_GET["vastaus"]; $rivi = $_GET["rivi"]; echo $rivi . "1<br>"; $vastaus = htmlspecialchars($vastaus); $rivit = file("viestit.txt"); $rivit = array_map("trim", $rivit); $rivit[$rivi] = $rivit[$rivi] . "|" . $vastaus; echo $rivi . "2<br>"; $tt = fopen("viestit.txt", "w"); for ($i=0; $i<count($rivit); $i++) fwrite($tt, $rivit[$i]."\r\n"); fclose($tt); echo $rivi . "3<br>"; ?>
Eli näyttäisi että tuo formi ei lähetä tuota numeroa oikein.
Näin ongelma alkaa ratketa. Tee sitten vastaava tutkimus lähetyssivulla.
lähetyssivulla on jo se ja se kyllä näyttää oikein se löytyy for:ista kohtaa:
echo "<br><FORM ACTION=\"vastaa.php\" METHOD=\"GET\">"; echo "<input type=hidden name=\"rivi\" value=\"$j\">"; echo "Vastaus: <INPUT TYPE=\"text\" NAME=\"vastaus\" SIZE=\"30\" MAXLENGTH=\"255\">"; echo "<INPUT TYPE=submit value=\"Vastaa\"><br>"; echo $j; echo "<hr>";
se kyllä näyttää oikein.
Näkyykö rivinumero kussakin kohdassa oikein, jos katsot sivun HTML-koodia selaimen kautta?
näyttäisi näkyvän
Edit:
Siis toisessa näkyy:
2
1
0
ja toisessa
0
0
0
html koodissa
Nytpä taisi juttu selvitä, neuvoin etsimään aivan väärin. Lomakkeista puuttuu sulkeva form-tagi, ja kun sen laittaa silmukan päätteeksi, skripti tuntuisi toimivan. Tällaisessa lomakkeessa lähetystavaksi sopii muuten paremmin "post" kuin "get".
Katsoppas vain siinä se vika olikin Kiitos
Enkä tiedä miksi itse olen niin tottunut käyttämään tuota get:tiä jotenkin vaan pinttynyt tapa :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.