Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: muutoksen aikaa.. register_globals off.. ?

willeS [16.08.2005 11:14:56]

#

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>

KeKimmo [16.08.2005 12:06:52]

#

Mitäpä jos lähettäisit tuosta version, jossa ne $_GETit ja $_POSTit todella ovat oikeilla paikoillaan? Tuossa niitä ei ainakaan näkynyt.

kayttaja-2791 [16.08.2005 12:11:20]

#

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.

hmmp [16.08.2005 12:19:28]

#

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

willeS [17.08.2005 11:03:00]

#

Kiitokset.. toimimaan sain pienen sorvauksen jälkee ja nyt taas tietää paljon paljon enemmän..

Vastaus

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

Tietoa sivustosta