09. november 2006 - 12:38Der er
13 kommentarer og 1 løsning
gentager sidste indlæg i databasen
Hvorfor gentager den mine oplysninger jeg lige har sat i databasen når jeg trykker F5? Jeg kan ikke huske hvordan man for den til kun og sætte det ind 1 gang og kommer frem med det samme unden og gentage hvergang siden refresh. dette er min kode lige nu ***************************************************** <? include("db.inc.php"); include("style.php"); ?> <html> <head> </head> <body> <?
if (isset($_POST[skriv])){
$sql= mysql_query("SELECT * FROM weblog") or die(mysql_error());
Jeg har ændret i strukturen og flyttet den del der foretager INSERT øverst før der bliver sendt headers. På den måde kan der afvikles en header der fortæller den at gå til samme side, og herefter vil der på en refresh af siden ikke indsættes en række i tabellen.
Hvis du har copy/pasted mit eksempel og du får en "headers already sent" så vil jeg tro at en af dine to forgående include() indeholder noget der får serveren til at sende headers (fx noget stylesheet)
Så lad os i stedet prøve:
<? include("db.inc.php");
if (isset($_POST[skriv])){ $navn=mysql_real_escape_string($_POST["navn"]); $besked=mysql_real_escape_string($_POST["besked"]);
mysql_query("INSERT INTO weblog(navn,besked)VALUES('$navn','$besked')"); header('Location: '.$_SERVER['PHP_SELF']); exit(); }
include("style.php"); ?> <html> <head> </head> <body> <? $sql= mysql_query("SELECT * FROM weblog") or die(mysql_error());
Kort fortalt handler det om at sikre at en ondsindet person ikke "bryder" ens SQL kald til databasen, og sender egne instrukser afsted mod databasen i et forsøg på at opsnappe data eller destruere data.
Det hedder som sagt sql-injections (sql-indsprøjtninger om man vil) og der findes masse af læsestof om det, som man bør sætte sig ind i hvis man vil undgå ærgelser på et senere tidspunkt (fx en "hacked" gæstebog og eller slettet blog)
fixxxer> Det kunne jeg ikke lige se dit eksempel gjorde. Sådan som jeg så det, så tjekkede den POST[skriv], og den vil jo være sand for hver F5. Men jeg kan se du har fået en exit() kommando ind. Er det den der gør det ? eller er det kombinationen med "header('Location: '.$_SERVER['PHP_SELF']);" ?
Egenlig var det en forglemmelse at jeg ikke fik exit() med på mit første eksempel.
header() funktionen bruges til at skrive headers til browseren.
header('Location: '.$_SERVER['PHP_SELF']); fortæller browseren at den skal fortsætte til den angivne side og ikke blot "gå i stå" efter en post.
Alternativt kan man POST'e til en anden side der behandler data og insert'er i databasen og derefter bruger header('Location: ...') til at sende tilbage til formularen.
Der findes unægteligt tekster og dokumentation der kan forklare det bedre end jeg kan, men nu har jeg forsøgt :)
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.