[php] refresh probleem bij insert data

Pagina: 1
Acties:

  • Slurpie Blauw
  • Registratie: Juni 2002
  • Laatst online: 04-06 10:34
Ik ben bezig met het maken van een nederig messageboard.

Als ik een reply heb geplaatst op een topic en op refresh druk blijft de insert doorgaan, dit is NIET de bedoeling natuurlijk.

mijn code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?
include "connect.php";

if($actie=="add_msg") {
$query_reply= "INSERT INTO reply (Topic_id, Naam, Txt) 
                    VALUES ('$id', '$naam', '$msg' )";
        
mysql_query($query_reply) or die("Insert Failed ".mysql_error());
}

$actie="";
$query = "SELECT * FROM topic where Top_id='$id'";
$voer_q_uit = mysql_query($query) or die("Insert Failed ".mysql_error());


$query_reply = "SELECT * FROM reply WHERE Topic_id='$id' order by Id";
$voer_q_uit_reply = mysql_query($query_reply) or die("Failed to Connect ".mysql_error());
?>
<html>
<head>
<title></title>
</head>
<body>
<? $result = mysql_fetch_object($voer_q_uit)  ?>
<table border="1" width="80%">
<tr>        
        <td width="30%">Auteur</td>
        <td>Topic Titel: <? echo $result->Topic_Titel; ?></td>
        
    </tr>   
</table>

<table border="1" width="80%">
    <tr>        
        <td width="30%"><? echo $result->Starter; ?></td>
        
        <td><? echo $result->Txt; ?></td>
    </tr>   
 

<? while($result_reply = mysql_fetch_object($voer_q_uit_reply)) { ?>
    <tr>        
        <td width="30%"><? echo $result_reply->Naam; ?></td>
        
        <td><? echo $result_reply->Txt; ?></td>
    </tr>   
<? 
} #einde while
?>  
</table>
<form action="index.php">
    <input type="hidden" name="actie" value="insert">
    <input type="hidden" name="id" value="<? echo $result->Top_id; ?>">
    <input type="submit" name="sub" value="post reply">
</form>
</body>
</html>


de var $actie wordt gevoed uit een ahref, gaat naar de index , index kijkt naar waarde $actie en de reply pagina wordt geladen.

Herkent iemand dit "refresh"-probleem en heeft iemand een antwoord/tip? :*)

Ps. Verder werkt de board goed tot nu toe

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
twee mogelijkheden: stukje javascript wat de insert button disabled nadat ie de eerste keer is aangeklikt. is alleen niet 100% veilig

een andere manier van flood protection is het ip van de poster opslaan en voor het inserten een select query doen op je database waarbij je het laatste bericht met 'zo'n ip selecteert en kijkt wat de timestamp is. en als dat verschil met de huidige tijd < 1 minuut ofzo, niet inserten

[ Voor 0% gewijzigd door marty op 21-08-2002 13:30 . Reden: td ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:42

gorgi_19

Kruimeltjes zijn weer op :9

Wat ik meestal doe:
Na het invullen van een pagina door middel van een post doe ik een redirect (in ASP: Response.Redirect, geen idee hoe deze in PHP heet) naar mijn eigen pagina. Op deze manier ververs je dus de 'nieuwe' pagina (en niet de 'posted pagina')

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
gorgi_19: dat voorkomt nog steed geen dubbelposts als mensen snel achter elkaar op de submit button drukken
en geloof me, er zijn heel veel van dat soort zenuwelijers die dat doen

*****
lamaar
ik had het eerste bericht niet goed gelezen, qua die refresh. dat is inderdaad waar ie naar zoekt.
flood protection is trouwens geen overbodige luxe als je die nog niet had...

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Kun je bijna niet tegengaan. Op een forum-achtig iets wat ik eens heb geschreven heb ik het afgevangen door een unique-contraint op alle velden (muv id) te zetten, dan kunnen dubbele berichten niet voorkomen. Het nadeel is dat iemand dan een berichte maar eenmaal per thread kan plaatsen. Doorgaans is dat geen bezwaar, maar hele korte berichtjes willen nog wel eens identiek zijn.

Localhost, sweet localhost


  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

Als je in index de $actie zet waarna deze pagina geladen word, kan je dan ook niet in index NA de aanroep de $actie leegmaken? Ik krijg het gevoel dat index niet doorheeft dat de actie veranderd is...

PS: Het is slimmer om SELECT veldnaam1, veldnaam2 FROM te doen dan SELECT *, veldnamen zijn namelijk sneller (en zekerder)
Als ik een reply heb geplaatst op een topic en op refresh druk blijft de insert doorgaan, dit is NIET de bedoeling natuurlijk.
Per refresh 1x of continue doorgaan? Bij 1x zal je idd een controle op de laatste reactie van die gebruiker moeten doen...

[ Voor 0% gewijzigd door Rashann op 21-08-2002 13:34 . Reden: quote is met uo ]

If nothing is written below, I was the last to reply...


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Een alternatief is om het veld uid toe te voegen aan je DB (met unique constraint). In je submitformuliertje bouw je een hidden field UID, de rest mag je zelf bedenken.

Localhost, sweet localhost


  • Slurpie Blauw
  • Registratie: Juni 2002
  • Laatst online: 04-06 10:34
Per refresh 1x of continue doorgaan? Bij 1x zal je idd een controle op de laatste reactie van die gebruiker moeten doen...
Elke keer als ik op refresh(f5) druk plaatst ie de topic weer, maar zal idd controle
moeten afvangen heb ik het idee

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Zelf gooi maak ik van elk gepost bericht een hash en sla dit bij de user op.
Voor elke post controleer ik of de hash anders is, als ie hetzelfde is is het een dubbelpost :)

Who is John Galt?


  • Slurpie Blauw
  • Registratie: Juni 2002
  • Laatst online: 04-06 10:34
flood protection is trouwens geen overbodige luxe als je die nog niet had...
Ehm, wat is flood protection? Nog nooit van gehoord :?

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Goudstof schreef op 21 augustus 2002 @ 13:49:
[...]


Ehm, wat is flood protection? Nog nooit van gehoord :?
'flooden' is wat je krijgt als iemand tig keer op de submitknop klikt en je heb geen beveiling daartegen ingebouwd: namelijk tig posts op je messageboard
floodprotectie is dus de beveiliging hiertegen
(onder flooden valt touwens ook het gedrag van gebruikers die niet tig keer op de submit knop klikken, maar gewoon zo snel mogelijk een heleboel verschillende (vervelende) berichten plaatsen). Voor een messageboard kun je daarom wel iets inbouwen dat je iedere 2 minuten maar 1 post mag doen...het is immers geen forum waar bezoekers snel achter elkaar willen posten

  • Slurpie Blauw
  • Registratie: Juni 2002
  • Laatst online: 04-06 10:34
Ik denk dat ik het antwoord heb gevonden door simpelweg na de insert query
een header bij te voegen

PHP:
1
2
3
4
5
6
7
8
9
if($actie=="add_msg") {
$query_reply_ins= "INSERT INTO reply (Topic_id, Naam, Txt) 
                    VALUES ('$id', '$naam', '$msg' )";
        
mysql_query($query_reply_ins) or die("Insert Failed ".mysql_error());

header("Location: replies.php?id=$id"); 

}


Ik hoop niet dat ik te vroeg juig
Pagina: 1