Toon posts:

[php]Truukje om dubbelposts te voorkomen

Pagina: 1
Acties:
  • 210 views sinds 30-01-2008

Verwijderd

Topicstarter
Hellow,

ik zat hier net ff het Forum een b-tje te testen ;-). En welk truukje hebben jullie gebruikt voor het "refreshen van je pagina, nadat je een bericht hebt geplaatst"? Want ik weet wel een maniertje of 2, maar die zijn niet echt succesvol...

Dus weet iemand hoe ze dat hier hebben gedaan, die beveiliging?

Alvast bedankt.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Javascript.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
Ok...

En wat is het Javascriptje dan? Enig idee?

Alvast bedankt.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Dus weet iemand hoe ze dat hier hebben gedaan, die beveiliging?
hoezo beveiliging? 't is gewoon een berichtje. kan idd met javascript, maar een refresh header sturen lijkt me makkelijker: Header("Refresh: 3; URL=bla.php
");

Verwijderd

Topicstarter
Dus als ik dit boven m'n PHP scrippie plak kunnen ze niet de data opnieuw in de DB duwen?

of is dit wat ik denk, een gewoon doorstuur stukkie...

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 02-03 20:59
Op zondag 11 november 2001 14:28 schreef Mark-Z het volgende:
Dus als ik dit boven m'n PHP scrippie plak kunnen ze niet de data opnieuw in de DB duwen?

of is dit wat ik denk, een gewoon doorstuur stukkie...
t's wat je zoekt :)

Verwijderd

Topicstarter
Maar wat ik dus nodig heb, is dat truukje zoals hier...

Weet iemand die, de maker, moderator, bezoeker???

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

wie niet?

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Hoe bedoel je?

En als je het weet, plaats je idee dan hier. Want ik kan het allemaal wel maken in PHP, maar de manier van/het idee das veel lastiger...

Alvast bedankt voor je hulp.

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 02-03 20:59
Op zondag 11 november 2001 16:34 schreef Mark-Z het volgende:
Hoe bedoel je?

En als je het weet, plaats je idee dan hier. Want ik kan het allemaal wel maken in PHP, maar de manier van/het idee das veel lastiger...

Alvast bedankt voor je hulp.
het is gewoon met een refresh header gedaan of meta tag oid

en wat bedoel je met 'die beveiliging' ?

  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 22:18
PHP:
1
2
3
4
5
<?
echo "<script language=\"Javascript\">";
echo "setTimeout(\"top.location.href = 'http://www.tweakers.net\",1000)";
echo "</script>";
?>

Uhm zowiets?

Verwijderd

Topicstarter
Nee kijk,

Ik bedoel WEL dit:

Als je een bericht plaatst, en je drukt op refresh. Dan wordt er een melding geplaatst en wordt er nix dubbel aan de DB toegevoegd. En hoe kan je ervoor zorgen dat je "weet" dat er wordt gerefreshed en dat je dan zo'n medling kan geven?

En ik bedoel NIET dit:

Het doorverwijzen naar de pagina van je bericht, want dat kan iedere ... wel...

Alvast bedankt als je wel ff goed leest en de vraag goed beantwoord en als je het antwoordt hebt :-).

Verwijderd

Dan moet je misschien iets met de referer doen ofzo? Controleren welke pagina je hier naar toe heeft gestuurd, $HTTP_REFERER ofzo.....

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 10-05 16:37
checken of de laatste reply EXACT gelijk is aande vorige.

Als 'ie net iets anders is, komt 'ie er wel door. Of nadat je geredirect bent, ook.

Gewoon kwestie van checken of $laatstereply gelijk is aan $nieuwereply oid.

Verbouwing


Verwijderd

Ik geef bij submit gewoon een ID gebaseerd op tijd mee.. de pagina die de user nu laadt is nieuw omdat het ID anders is. (Hij moet hem dus reloaden)

  • Tader
  • Registratie: September 2001
  • Laatst online: 13-08-2024

Tader

mx01.hotmail.com:~#

'mmm wat denk je hiervan?

In het formulier geef je een uniek id mee in een hidden veld.
Bij het opsturen kijk je of er al eens met dit id is opgestuurd.
Ja -> Geef foutmelding of ga naar pagina met berichten...
Nee -> Stop zaakje in de database...

Verwijderd

Op maandag 12 november 2001 17:57 schreef Tader het volgende:
'mmm wat denk je hiervan?

In het formulier geef je een uniek id mee in een hidden veld.
Bij het opsturen kijk je of er al eens met dit id is opgestuurd.
Ja -> Geef foutmelding of ga naar pagina met berichten...
Nee -> Stop zaakje in de database...
Het lijkt me erg lastig om bij het formulier al een uniek ID te bepalen, of je moet die bij die pagina al ophalen uit een DB wat me niet erg mooi lijkt.

Wat volgens mij de meeste fora doen is een tijd meegeven bij het plaatsen in de tabellen, zodat je weet wanneer het bericht geplaatst is.

Plaats voor het toevoegen aan de tabel een functie die kijkt naar de laatste post van die gebruiker en de tijd van die post oproept. is dit binnen 30 sec. (voorbeeld) dan is het een dubbelpost (2 keer op submit geklikt of refresh) en plaatst hij hem niet meer (hij kwam voor de INSERT).

Verwijderd

na een submit een header refresh en je variablen killen..

easy..


(ongetwijfeld klinkt dit iets simpeler dan dat het hier zal zijn denk ik.. ;))


ik denk dat er gefilterd word op dubbele posts. (tenminste zou ik doen) of dat er al een bepaalde post code gebeurd is. elke post heeft eigen id enzo..

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 10-05 13:57

Crazy D

I think we should take a look.

Dubbelpost check is wel lastig. Wat je kan doen is de tijd + forumid in een cookie opslaan, en bij het posten dat cookie checken. Voorkom je niet mee dat als iemand 10 minuten wacht en dan refreshed (naja 10 is wat overdreven, zolang de pagina geldig is zeg maar...) er gepost wordt, maar wel 2 keer achter elkaar klikken (hoewel je daarvoor de verstuur button zou kunnen disablen voordat de form gesubmit wordt).

Exact expert nodig?


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

ik heb je topictitel even iets duidelijker gemaakt

Verwijderd

Je kunt ook bij het schrijven van het formulier een hidden input nemen, en daar een nummer in zetten (combinatie van tijd en user).

Als je de post in de database opslaat, sla je dat nummer ook op. Van te voren check je of dat nummer al in de database voorkomt.

  • Martijn02
  • Registratie: September 2000
  • Laatst online: 09-05 23:09

Martijn02

/* No Comment */

Hmm, dus als je de gebruiker een formulier presenteerd geef je dat formulier een ID mee, en de resultaten van dat formulier (met dat ID) kunnen dan maar een keer in de database worden opgeslagen.

Handig... :)

  • Stewie!
  • Registratie: September 2001
  • Laatst online: 22:57

Stewie!

Keen must die!

Op maandag 12 november 2001 18:24 schreef smokeysoft het volgende:

[..]
Dom geblaat en stomme onzin >:)
Wat Tader schreef was goed, van jouw is onzin! Een forum geeft altijd een uniek nummer aan een post (dus pas als je reply duwt!!!, niet bij het lezen, tssss |:(). Maak dit nummer aan, en stuur het mee als variabele. Als het bericht gepost wordt, zet je de tekst enzo ook in de databeest erbij en als ie dan F5 duwt, dan wordt alleen deze post weer overnieuw geschreven (of niet, als je dit effe uitzet dat een post overschreven kan worden)! Werkt altijd, je hebt alleen nu 2 keer invuldingen voor de databeest, wat ervoor zal zorgen dat de database overbelast kan raken, zoals op dit forum >:)


Strava: https://www.strava.com/athletes/149347154


  • paulh
  • Registratie: Juli 1999
  • Laatst online: 12-03 16:31
Op dinsdag 13 november 2001 12:00 schreef Martijn02 het volgende:
Hmm, dus als je de gebruiker een formulier presenteerd geef je dat formulier een ID mee, en de resultaten van dat formulier (met dat ID) kunnen dan maar een keer in de database worden opgeslagen.

Handig... :)
Dat kan je doen zolang dat ID niet het primary ID van de reactie is. En dan alleen om te checken. Anders kan je veel te gemakkelijk dubbele ID's krijgen en dan krijg je zelfs errors.

ID's maak je niet zelf ... dat je laat je de database doen.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • me1299
  • Registratie: Maart 2000
  • Laatst online: 19:49

me1299

$ondertitel

Ik zou gewoon een sessie starten met een variable die 0 is, en bij het submitten optelt. Is hij 1 dan zit de lamer een beetje dubbel te klikken!

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
Om het probleem van het refreshen te ondervangen zijn volgens mij al die variabelen niet nodig. Stel; je hebt 3 bestandjes:
- het formulier
- het scriptje dat je data opslaat
- een bedankt-pagina.

In het formulier staat als action het scriptje dat de data opslaat. Dat scriptje slaat bij het drukken op de submit-knop alle data op en stuurt een header terug met de location van de bedankt-pagina. Die kun je zo vaak refreshen als je wilt, de data wordt niet nog een keer opgeslagen.
Zelfs niet als je op back en forward drukt. Pas als je nog een keer op de submit-knop drukt zou het bericht opnieuw gepost worden. En als je je daar ook tegen wilt wapenen zijn er al die andere mogelijkheden.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 10-05 13:57

Crazy D

I think we should take a look.

Op dinsdag 13 november 2001 23:57 schreef bigtree het volgende:
Zelfs niet als je op back en forward drukt. Pas als je nog een keer op de submit-knop drukt zou het bericht opnieuw gepost worden. En als je je daar ook tegen wilt wapenen zijn er al die andere mogelijkheden.
Volgens mij kun je dan nog steeds gewoon 1 keer back gaan, en vraagt je browser (mozilla volgens mij iig meestal wel) of je nog een keer wil posten of niet.
(meteen ff proberen zo ;))

Hier vraagt ie dat iig niet. Naja, t zou dus prima kunnen werken :)

Exact expert nodig?


Verwijderd

Je maakt een waarde "Count" en die geef je 0 dan doe je bij onSubmit() een check op Count als die 0 = doe je Count + 1 en gaat het script verder met toevoegen, is die 1 dan geef je de melding dat het script reeds in werking is. (JavaScript).
Op deze manier kun je dus checken of iets 1 of meerdere keren wordt gepost.
Zoiets :?

  • ZEN
  • Registratie: April 2000
  • Laatst online: 24-03 13:27

ZEN

huh? wat doe ik hier?

als je nou toevallig mysql gebruikt, dan moet je eens kijken naar REPLACE


of anders zou je met java script de submit button kunnen uitzetten :)

Linux server installatie en beheer (clusters failover loadbalancing): http://www.virtualconcepts.nl/


Verwijderd

Op dinsdag 13 november 2001 23:36 schreef DeathKnight het volgende:
Ik zou gewoon een sessie starten met een variable die 0 is, en bij het submitten optelt. Is hij 1 dan zit de lamer een beetje dubbel te klikken!
lekker ook als je maar 1 x op submit hengst ben je al een lamer :P

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 19:49

me1299

$ondertitel

Op woensdag 14 november 2001 11:39 schreef dynom het volgende:

[..]

lekker ook als je maar 1 x op submit hengst ben je al een lamer :P
Niet per definitie de lamer is bij voorbaat al iemand die 2x drukt!

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Verwijderd

Header("Refresh: 3; URL=bla.php");
hierdoor krijg ik blank post als ik op refresh druk.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

De manier die ik gebruik is om ipv een Refresh een Location header te sturen aan het einde van m'n process script.
Dus zoiets:
PHP:
1
2
3
4
5
6
if($_SERVER['REQUEST_METHOD'] == "POST") {
   voeg_toe_aan_db();
   header("Location: ."$_SERVER['PHP_SELF']);
} else {
   laat_posts_uit_db_zien();
}

Wanneer er nu dus een reply gepost wordt zal de client direct na voeg_toe_aan_db() geredirect worden naar de pagina waar die vandaan kwam. (Als je tenminste naar dezelfde pagina post!!)

Nu met Land Rover Series 3 en Defender 90


  • UTM
  • Registratie: Februari 2003
  • Laatst online: 18:09

UTM

Erm. dudes. Het gekickte topic komt uit 2001, dus ik weet niet of de TS er nog wat aan heeft :P

Verwijderd

Waarom in belang van de TS? Zijn misschien meerdere mensen die hier problemen mee hebben of willen voort-borduren op dit onderwerp... Kan ook zonder aanwezigheid van TS :)

  • Stewie!
  • Registratie: September 2001
  • Laatst online: 22:57

Stewie!

Keen must die!

jezusmina, oude post van mij lees ik zo nog eens terug :)


Strava: https://www.strava.com/athletes/149347154


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 04-12-2025
Ik heb een md5 van de tekst in een sessie gezet. Als de md5 van het nieuwe bericht overeenkomt met de sessie is het bericht dubbelpost

PHP:
1
2
3
4
if ($_SESSION['lmes'] == md5 ($_POST['mes']))
    echo 'Dubbelpost';
else
    $_SESSION['lmes'] = md5 ($_POST['mes']);
...je snapt het idee

Netjes? Weet ik niet. Wel effectief...

  • simon
  • Registratie: Maart 2002
  • Laatst online: 08-05 22:18
Check gewoon in de database of de user binnen 40 seconde al gepost heeft en of hij/zij al eerder binnen een dag ofzo dezelfde post heeft gemaakt

|>


  • Hans1990
  • Registratie: Maart 2004
  • Niet online
Volgens mij komt dubbel klikken hier niet aan de orde maar refreshen op de doorlink pagina.

Ik zou zelf kiezen voor een sessie check. Je zet op het formulier pagina een sessie vast en verwijdert die op de 'uitvoer' pagina. Indien die sessie niet bestaat word er niets ingevoegd. Zo vermijd je dubbel klikkers en refreshers :P

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:52

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 gaat het topic weer terugsturen naar het verleden :) Dit leidt alleen maar tot reacties op oude postings, waarvan de originele posters of niet meer komen, betere methodieken hebben gevonden of niet eens meer weten dat ze die geplaatst hebben :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1

Dit topic is gesloten.