Avatar billede udvikler Nybegynder
16. april 2005 - 19:22 Der er 14 kommentarer og
2 løsninger

Når man refresher siden i min gæstebog poster den beskeden igen

Hejsa..

Hvis man lige har skrevet en besked i min gæstebog, og refresher siden, så bliver den samme besked postet.. Eller hvis du bare går ind for at kigge på andre folks beskeder og refresher, så bliver den sidste besked postet endnu engang.. Hvad kan det skyldes?

Her er min fil:

<center>

<br><br><br><br>
<form action="<? print $_SERVER["PHP_SELF"]; ?>" method="post">
<textarea rows="10" cols="50" name="besked"></textarea>
<p>
<input type="submit" name="add" value="send">
</form>
<center>


<center>
<?php

$host = "localhost";
$user = "lilo";
$pass = "min kode";
$db = "lilo";   


$connect = mysql_connect($host, $user, $pass);
mysql_select_db($db);


if ($_POST['add'])
{
mysql_query("INSERT INTO gaestebog
                (besked)
                VALUES
                ('$_POST[besked]')
                ");
}



$query = mysql_query("SELECT * FROM gaestebog ORDER BY id desc LIMIT 20");
while ($gaestebog = mysql_fetch_array($query)) {



print $gaestebog['besked'];
    print "<hr>";   
    print "<br>";


  }

?>
Avatar billede rasmusbg Nybegynder
16. april 2005 - 19:32 #1
Når man refresher en side, så bliver det samme http request udført igen. Dvs. at det samme POST request indeholdende beskeden bliver sendt igen.

Du kunne evt. lave et tjek på, om den sidst skrevne besked er magen til $_POST['besked']. Hvis de er forskellige, gemmes $_POST['besked'] helt normalt, og ellers bliver den ikke gemt.
Avatar billede barklund Nybegynder
16. april 2005 - 19:42 #2
Eller lave en header til sig selv som:

if ($_POST['add'])
{
mysql_query("INSERT INTO gaestebog
                (besked)
                VALUES
                ('$_POST[besked]')
                ");
header("Location: ".$_SERVER["PHP_SELF"];);
exit;
}
Avatar billede Slettet bruger
16. april 2005 - 19:51 #3
Tror det er bedre med

$_SERVER['REQUEST_URI']

Hvis du vil have variabler med.. det kommer selvfølgelig an på din struktur.
Avatar billede udvikler Nybegynder
16. april 2005 - 22:33 #4
Hmm forstår det desværre ikk helt.. Jeg har prøvet jeres script lidt, men forstår det ikk helt.. Tror også det er grunden til at jeg ikke kan få det til at virke :)

Kan i forklare det lidt dybere?
Avatar billede Slettet bruger
16. april 2005 - 23:01 #5
if ($_POST['add'])
{
mysql_query("INSERT INTO gaestebog
                (besked)
                VALUES
                ('$_POST[besked]')
                ");
header("location: ". $_SERVER['HTTP_REFERER']);
}
Avatar billede udvikler Nybegynder
16. april 2005 - 23:10 #6
Tak, men skriv lig et svar så du kan få point og jeg kan lukke tråden ;)

Så acceptere jeg imorgen.. er rimlig træt lige nu.. :)
Avatar billede rasmusbg Nybegynder
16. april 2005 - 23:12 #7
aco - Det som barklunds og wicez' kodestumper gør er, at de, efter at beskeden er blevet gemt i databasen, laver et redirect vha. en http header linie.

Det betyder, at hvis man refresher siden efterfølgende, så bliver der ikke lavet et nyt POST request.
Avatar billede udvikler Nybegynder
16. april 2005 - 23:13 #8
Okay, men jeg har lige kigget lidt i min kode, og set at jeg rent faktisk kun mangler at indsætte dette:

header("location: ". $_SERVER['HTTP_REFERER']);
}

Eller hvad.. hvis man kigger på min kode har jeg rent faktisk skrevet resten i forvejen.. ;)

PS. post lig et svar
Avatar billede rasmusbg Nybegynder
16. april 2005 - 23:19 #9
Yup...du mangler kun den enkelte linie.

Ingen point til mig i denne omgang. Jeg har trods alt blot forklaret, og samtidig kan jeg faktisk selv bruge den foreslåede løsning...så jeg skulle næsten give nogle point i stedet ;D
Avatar billede barklund Nybegynder
17. april 2005 - 00:10 #10
Du vil nok meget gerne have en exit; lige bagefter - Og endnu mere vil du flytte hele din <? ?> blok med mysql-tingene helt op øverst i din fil. Du kan nemlig ikke sende header efter du har sendt output.
Avatar billede Slettet bruger
17. april 2005 - 10:23 #11
Svar
Avatar billede Slettet bruger
17. april 2005 - 10:23 #12
men jeg vil ikke have point alene. Barklund har mindst fortjent halvdelen
Avatar billede Slettet bruger
17. april 2005 - 10:28 #13
<?php
$host = "localhost";
$user = "lilo";
$pass = "min kode";
$db = "lilo";   
$connect = mysql_connect($host, $user, $pass);
mysql_select_db($db);

if(empty($_POST['add']))
    {
    echo "<center>

        <br><br><br><br>
        <form action=\"". $_SERVER["PHP_SELF"] ."\" method=\"post\">
        <textarea rows=\"10\" cols=\"50\" name=\"besked\"></textarea>
        <p>
        <input type=\"submit\" name=\"add\" value=\"send\">
        </form>
        <center>       
        <center>";
    }
else
    {   
    //Indsætter i´databasen
    mysql_query("INSERT INTO gaestebog
                (besked)
                VALUES
                ('$_POST[besked]')
                ");
    header("location: ". $_SERVER['HTTP_REFERER']);
    exit();
    }

$query = mysql_query("SELECT * FROM gaestebog ORDER BY id desc LIMIT 20");
while ($gaestebog = mysql_fetch_array($query)) {

print $gaestebog['besked'];
    print "<hr>";   
    print "<br>";
  }

?>
Avatar billede barklund Nybegynder
17. april 2005 - 14:55 #14
Et svar :)
Avatar billede barklund Nybegynder
17. april 2005 - 20:19 #15
Tark for points :)
Avatar billede Slettet bruger
17. april 2005 - 20:37 #16
Tak for point -aco- :o)
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