20. januar 2002 - 08:02Der er
15 kommentarer og 1 løsning
Undgå indsætning af samme data flere gange i MySQL ved opdatering af side i Browser.
Hej med jer. Når jeg i php indsætter data via en form med <form METHOD= POST ACTION=\"indsaetnybesked.php?titel=<? echo \"$titel\";?>&id=<? echo \"$id\";?>\"> Så includerer jeg i indsaetnybesked.php den fil der skal vise resultatet med de sidst opdaterede data fra MySQL, og det virker fint. Problemet er bare, at hvis man så opdaterer siden med F5 eller opdaterknappen så indsættes de samme data igen i databasen. Er der nogen der ved hvordan dette forhindres??
det er vel i database designet at du har problemet. Hvis du ikke ønsker redundans (samme tupler/rækker) flere gange, ja så skal du konstruere et db-design som tager højde for dette. Du kan jo evt. tjekke på det id du indsætter!!
chanoa >> Den går ikke, der skal et reload til før cookien bliver aktiv og så vil det alligevel blive submittet til db...
Det her er efter min mening den bedste måde at gøre det på.
### action.php ###
<? ob_start(); // Output-buffering startes.
... Din HTML-form her ...
if(submit_knappen_er_trykket){ if(input_er_ok){ ... Alt som skal gøres hvis input er ok ... header(\"Location: $PHP_SELF?action=9&return=1\"); exit; } else { header(\"Location: $PHP_SELF?action=9&return=0\"); exit; } }
if($action==9){ switch($return){ case 0: echo \"Input er ugyldigt...<br>Prøv igen.\"; case 1: echo \"Input er sendt.<br>Tadaa!\"; case DEFAULT: echo \"Gå væk...<br>Eller brug formen til submit.\"; } }
Hmm.. Hvad med at slå op i databasen, og se om en post der ligner findes, INDEN nye data tilføjes? Der må da være et unikt felt i brugerdataene man kan slå op på eller?
Hvad er forresten forskellen på at loade samme side, med nye parametre, og så at loade en anden side?
chanoa >> Det tager alt for lang tid at slå op i db hver gang der skal tilføjes nyt...
> Hvad er forresten forskellen på at loade samme side, med nye parametre, og så at loade en anden side?
Ikke stor, men man har det hele samlet på eet sted... De ekstra parametre fortæller hvilken handling der er blevet udført, og om den blev udført korrekt... Man kunne lige så godt loade en anden side med de nye parametre.
I det her tilfælde tjekkes input, hvis det er ok tilføjes det i db og man sendes videre til siden selv med beskeden om hvilken handling der blev udført og at den blev udført korrekt. Hvis input ikke er ok, sendes man videre til siden selv, med besked om hvilken handling der blev udført, men at den ikke blev udført korrekt...
Så kan man lave en lille notits til sine brugere om udfaldet af handlingen...
Ja, det vil jeg mene skulle virke... Hvis du så indsætter følgende i samme script: <? if($action==9 && return=1){ echo \"Operation fuldført...\"; } ?> Så vil den skrive \"Operation fuldført...\" når den har reloadet, bare for at bekræfte at handlingen blev udført.
Hvis bekræftelsen er ligegyldig så kan du godt fjerne \'action=9&return=1\' fra \'header(\"Location: ... );\'.
Der er ikke meget andet at gøre end at prøve sig frem... Ellers spørg igen.
Den sender en HTTP-header (302 - redirect) til klienten, så bliver browseren sendt til siden result.php med et GET-request, d.v.s. at variablen \'$titel\' overføres via URL\'en... Urlen \'result.php?titel=laks\' sender variablen $titel med værdien \"laks\" til siden result.php... Så du i result.php kan skrive f.eks. <? if(isset($titel)){ echo $titel.\"<br>\"; } ?>
Ja tak, nu forstår jeg det bedre, og du har jo fået pointene. Mange tak for hjælpen :o)
Synes godt om
Ny brugerNybegynder
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.