Mulla on kyseisen tyyppinen koodi ollut käytössä... Nyt kun operaattori vaihtoi softan palvelimelle ja päivitti PHP:n, register_globals on myöskin off.. Ei toimi tämä vaikka muut sivut sai toimimaan.. tai osaksi toimii kun $_GET ja $_POST lykkää mukamas oikeisiin paikkoihin. Alkaa kohta tulla hätä käteen kun omat konstit on loppumassa ja pää on puhki..
<html> <head> <title>Tiedoston rivien hallinta</title> </head> <body link="gray" alink="gray" vlink="gray"> <font face="Verdana" size="2"> <?php if ($action == "add") { if ($rivi == "") { print "Opettele kirjottamaan. prkl."; } else { $rivit = file("teksti.txt"); $rivi = strip_tags($rivi); array_unshift($rivit, $rivi, "\n"); $tiedosto = fopen("teksti.txt", "w") or die("Tiedostoon kirjoittamisessa tapahtui virhe!"); while (list($key, $val) = each($rivit)) { fwrite($tiedosto, $val); } fclose($tiedosto); print("<p>Lisättiin onnistuneesti rivi " . $rivi . "<br>[ <a href=index.php>Takaisin</a> ]</p>"); } } elseif ($action == "del") { $filu = file("teksti.txt"); $tuloste = $filu[$id]; $i=0; $avaus = fopen("teksti.txt","w"); foreach($filu as $tiedote) { if($i!=$id) fwrite($avaus,$tiedote); $i++; } fclose($avaus); print("<p>Poistettiin valittu rivi \"" . $tuloste . "\"<br>[ <a href=index.php>Takaisin</a> ]</p>"); } elseif ($action == "edit") { if ($muokkaa == "ok") { $rivi = $muuttuja."\n"; $t1 = "teksti.txt"; $t2 = "teksti.temp"; $wtiedosto = fopen($t2,"w+"); $rtiedosto = file($t1); $i = 0; foreach ($rtiedosto as $rividata) { if($i!=$id) fwrite($wtiedosto,$rividata); else fwrite($wtiedosto,$rivi); $i++; } fclose($wtiedosto); unlink("$t1"); rename("$t2","$t1"); print("Tiedot onnistuneesti muutettu.<br><br>[ <a href=index.php>Takaisin</a> ]"); } else { print("<h3>Muokkaa riviä</h3>"); $filu = file("teksti.txt"); print("<form method=post><input type=text name=muuttuja value=\"" . $filu[$id] . "\"><input type=hidden name=action value=edit><input type=hidden name=muokkaa value=ok><input type=hidden name=id value=" . $id . "><input type=submit value=\"[ Muuta ]\"></form>"); } } else { ?> <h3>Lisää rivi</h3> <form method=post action=?> <input type="hidden" name="action" value="add"> <input type="text" name="rivi"><input type="submit" value="[ Lisää ]"> </form> <h3>Hallitse rivejä</h3> <table border="0"><?php $filu = file("teksti.txt"); foreach ($filu as $riveja) { $rivimaara++; } $p = 1; $i = 0; while ($i < $rivimaara) { $poisto = $i; print("<tr><td><font face=Verdana size=1><b>". $p .".</b></font></td><td><font face=Verdana size=2>".$filu[$i] . "</font></td><td><font face=Verdana size=1>[ <a href=?id=" . $poisto . "&action=del>del</a> ]</font></td><td><font face=Verdana size=1>[ <a href=?id=" . $poisto . "&action=edit>edit</a> ]</font></td></tr>"); $i++; $p++; } if ($rivimaara <= "0") print("Ei ainuttakaan riviä tiedostossa."); ?></table><?php } ?> </body> </html>
Mitäpä jos lähettäisit tuosta version, jossa ne $_GETit ja $_POSTit todella ovat oikeilla paikoillaan? Tuossa niitä ei ainakaan näkynyt.
Esittele alussa muuttujat niin ei tarvitse lisätä niitä $_GET ja $_POST jokaiseen väliin.
Eli ennen koodia kirjoita jotain tyyliin
$action = $_POST['action']; $rivi = $_POST['rivi'];
Samalla voit esim muuttaa htmlspecialcharsilla merkit html-merkeiksi ja trimillä poistaa tyhjät välilyönnit.
Tarvitset tuonne alkuun jotain tämän tapaista:
if (isset($_GET["action"])) $action = $_GET["action"]; elseif (isset($_POST["action"])) $action = $_POST["action"]; if (isset($_GET["rivi"])) $rivi = $_GET["rivi"]; elseif (isset($_POST["rivi"])) $rivi = $_POST["rivi"]; if (isset($_POST["muokkaa"])) $muokkaa = $_POST["muokkaa"]; if (isset($_POST["muuttuja"])) $muuttuja = $_POST["muuttuja"]; if (isset($_POST["id"])) $id = $_POST["id"];
Ei kannata tehdä koodia, joka vaatii globaalit päälle. Vähänkään isommasta ohjelmasta olisi painajainen alkaa korjaamaan niitä jälkikäteen..
Kiitokset.. toimimaan sain pienen sorvauksen jälkee ja nyt taas tietää paljon paljon enemmän..
Aihe on jo aika vanha, joten et voi enää vastata siihen.