Avatar billede kazuko Nybegynder
18. marts 2006 - 12:26 Der er 17 kommentarer og
1 løsning

Ny i php. Problemer med gæstebog!

Hej alle... jeg er meget ny i php og jeg er i gang med at lave en gæstebog. der er ingen fejlmeddelelser men den vil ikke rigtig gemme informationerne i tabellen. den vil gerne hente dem.
her er koden:
<html>
<head><title> Min gæstebog</title></head>
<body>
<?
$db = mysql_connect("db01","5721","negerjoe");
mysql_select_db("5721", $db);
if ($skriv){
    $besked = str_replace("\n", "<br>", $besked);
    $dato_array = getdate();
    $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
mysql_query("INSERT INTO bog(navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
}
?>
<center>
<form method="post" action=<? echo $php_self; ?>>
<INPUT TYPE=hidden NAME=skriv VALUE=1>
Navn:<INPUT TYPE=text NAME=navn><br>
Email:<INPUT TYPE=text NAME=email><br>
<TEXTAREA NAME=besked cols=30 rows=5></textarea><br>
<INPUT TYPE=submit VALUE="send">
</form>
<br><br>
<table>
<?
$foresp = mysql_query("SELECT navn, email, dato, besked FROM bog ORDER BY nr desc");
while($data = mysql_fetch_row($foresp)){
echo "<tr><TD VALIGN=TOP>";
echo "fra: <A HREF=\"mailto:$data[1]\">$data[0]</a>";
echo "<br>$data[2]";
echo "</TD><TD VALIGN=TOP>$data[3]</TD></TR>";
}
?>
</table>
</center>
</body>
</html>
Avatar billede stiness Nybegynder
18. marts 2006 - 12:55 #1
Det ser ud til, at du mangler noget i stil med...

$skriv = isset($_POST['skriv']);

-Stine:)
Avatar billede kazuko Nybegynder
18. marts 2006 - 12:56 #2
jeg vil meget gerne acceptere dit svar men vil gerne vide hvad det egentlig betyder...
Avatar billede kazuko Nybegynder
18. marts 2006 - 12:58 #3
Desuden har det ikke hjulpet
Avatar billede udvikler Nybegynder
18. marts 2006 - 12:58 #4
isset betyder om variablen er sat :-)

forresten er det altid en god idé at smide en mysql_error(); efter din sql sætninger - ellers er det jo klart at du ikke får nogle fejl meddelelser ;-)

altså fx således:

mysql_query("INSERT INTO bog(navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')") or die(mysql_error());
Avatar billede stiness Nybegynder
18. marts 2006 - 12:59 #5
isset($_POST['skriv']) er true hvis der er overført et inputfelt med det givne navn... og det er jo netop i det tilfælde du ønsker at skrive til databasen, ikke?:)
Avatar billede stiness Nybegynder
18. marts 2006 - 13:01 #6
Du satte det ind før "if ($skriv) {", ik?:)
Avatar billede udvikler Nybegynder
18. marts 2006 - 13:01 #7
desuden gør du brug af register_globals - det er et meget stort sikkerhedshul

dvs at du henter dine variabler fra <form> via $navn;
det burde skrives $_POST[navn];
Avatar billede kazuko Nybegynder
18. marts 2006 - 13:02 #8
jo men problemet er at den ikke sender informationerne til databasen... der kommer stadig ikke nogle fejlmeddelelser... du kan se siden på : http://ihavenisse.hotserv.dk/test/gbog.php
Avatar billede stiness Nybegynder
18. marts 2006 - 13:03 #9
Tror aco har mere forstand på det her;) Kan forstå at du faktisk godt bare kan skrive $skriv uden videre... håber I finder ud af det:) :#
Avatar billede kazuko Nybegynder
18. marts 2006 - 13:04 #10
hvor skal det skrives henne???
Avatar billede stiness Nybegynder
18. marts 2006 - 13:05 #11
Formens action ser ud til at være tom?!
Avatar billede kazuko Nybegynder
18. marts 2006 - 13:06 #12
Nej den linker til $php_SElf som er en variabel den php selv laver som svarer til siden selv
Avatar billede stiness Nybegynder
18. marts 2006 - 13:07 #13
Kiggede på kilden til din side.. og der var den tom..
Avatar billede udvikler Nybegynder
18. marts 2006 - 13:07 #14
Jeg har lige modificeret lidt i dit dokument, først skal du se om det virker, hvis det gør får du lige en forklaring :)

-------------------------

<html>
<head>
    <title> Min gæstebog</title>
</head>

<body>

    <?php
    $db = mysql_connect("db01","5721","negerjoe");
    mysql_select_db("5721", $db);

    if (isset($_POST[skriv])) {
        $besked = str_replace("\n", "<br>", $_POST[besked]);
        $dato_array = getdate();
        $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
        $navn = $_POST[navn];
        $email = $_POST[email];
        $besked = $_POST[besked];
        mysql_query("INSERT INTO bog(navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')") or die(mysql_error());
    }
    ?>

<center>
    <form method="post" action=<? echo $php_self; ?>>
        <INPUT TYPE=hidden NAME=skriv VALUE=1>
        Navn:<INPUT TYPE=text NAME=navn><br>
        Email:<INPUT TYPE=text NAME=email><br>
        <TEXTAREA NAME=besked cols=30 rows=5></textarea><br>
        <INPUT TYPE=submit VALUE="send">
    </form>

    <br><br>

        <table border="0">
    <?php
    $foresp = mysql_query("SELECT navn, email, dato, besked FROM bog ORDER BY nr desc");
    while($data = mysql_fetch_row($foresp)){
        echo "<tr><TD VALIGN=TOP>";
        echo "fra: <A HREF=\"mailto:$data[1]\">$data[0]</a>";
        echo "<br>$data[2]";
        echo "</TD><TD VALIGN=TOP>$data[3]</TD></TR>";
    }
    ?>
        </table>

</center>

</body>

</html>
Avatar billede kazuko Nybegynder
18. marts 2006 - 13:09 #15
Det virker... TUSIND TAK... glad hvis du også giver en forklaring
Avatar billede udvikler Nybegynder
18. marts 2006 - 13:14 #16
Det var så lidt.

Forklaringen kommer her:

1. du kan godt hente en variablen som er sat fra <form> via $variabel, men det er meget usikkert. Der er blevet lavet en artikel om det her på eksperten: http://www.eksperten.dk/artikler/57
du bør altid hente dem via $_POST[variabel]
du skal selvfølgelig ændre det til GET hvis du henter via adresselinien :)

2. du skal altid tjekke om en variabel er sat inden du indsætter i databasen, det gør du via if (isset($_POST[navn])) {
isset betyder bare at den tjekker om variablen er sat.
Du kan læse mere her: http://dk2.php.net/manual/da/function.isset.php

3. i din INSERT sætning har du bare indsat alle variablen direkte. altså:
mysql_query("INSERT INTO bog(navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");

men du har ikke angivet hvad de skal indeholde.

derfor har jeg skrevet:

        $navn = $_POST[navn];
        $email = $_POST[email];
        $besked = $_POST[besked];
        mysql_query("INSERT INTO bog(navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')") or die(mysql_error());

så indeholder de værdien som de fik fra <form>

4. håber du forstod det. Ellers skriver du bare!
Avatar billede kazuko Nybegynder
18. marts 2006 - 13:17 #17
Jeg forstår det godt... TUSIND TAK... Glad for der er så mange venlige mennesker herinde... Hav en rigtig god weekend
Avatar billede udvikler Nybegynder
18. marts 2006 - 13:17 #18
Tak og i lige måde - og held og lykke med php!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester