Autor Zpráva
Venca190
Profil *
Dobrý den, mám vytvořený chat a občas se stane, že se pošle 2x ta samá zpráva. Dá se to nějak omezit? Napadlo mě, že by další zpráva šla napsat až za 10 sekund, jenže se stává, že ta samá zpráva se pošle ve stejný čas tj. i ve stejné sekundě. Jak se něco podobného dá řešit?
Sitole
Profil
Venca190:
Máš ošetřený vstup tak, aby se nedala interně odeslat vícekrát? Případně by to muselo být rychlím kliknutím na jedno tlačítko 2x.
Záleží na tvém skriptu. Bylo by dobré sem dát část s odesláním, aby ním bylo jasné o co tu vlastně jde.

// Nejspíše se děje, ale bez kodu ti víc neřeknu.
Kliknutí na tlačítko "Odeslat" 2x
Znovu načtení stránky a vložení stejného obsahu znovu
lionel messi
Profil
Venca190:
To, čo hľadáš, si hovorí Post - Redirect - Get a funguje zhruba nasledovne:

en.wikipedia.org/wiki/Post/Redirect/Get

Praktický príklad v PHP (pozri si prvú odpoveď)

Na rozdiel od Sitole si myslím, že kód zatiaľ potrebný nebude (iba pokiaľ narazíš na problém pri jeho prerábaní).
Kubo2
Profil
Venca190:
Interne stačí v PHP skontrolovať, ako veľmi podobný je text správy tej predošlej od toho istého používateľa v nejakom časovom rozmedzí, tj. napr. v prípade, že je správa poslaná max. desať sekúnd po predchádzajúcej.

if(similar_text($aktuálnaSpráva, $poslednáSpráva, $percento) && $percento >= 90) {
    // správa je veľmi podobná tej predchádzajúcej
    if(time() - $timestampPoslednejSprávy <= 10) {
        // predchádzajúca správa je veľmi mladá, 10 sekúnd alebo ešte menej
    }
} else {
    // vložiť správu
    // ...
}

php.net/manual/en/function.similar-text.php
Sitole
Profil
Kubo2
Venca190 říká:
Napadlo mě, že by další zpráva šla napsat až za 10 sekund, jenže se stává, že ta samá zpráva se pošle ve stejný čas tj. i ve stejné sekundě.
lionel messi
Profil
Sitole:
Kubo2
Venca190 říká:
„Napadlo mě, že by další zpráva šla napsat až za 10 sekund, jenže se stává, že ta samá zpráva se pošle ve stejný čas tj. i ve stejné sekundě.“

Ale kód v [#4] Vencov problém predsa rieši.
Sitole
Profil
lionel messi:
Moje chyba. Hnedle jak jsem si přečetl "Interne stačí v PHP skontrolovať, ako veľmi podobný je text správy tej predošlej od toho istého používateľa v nejakom časovom rozmedzí" hned jsem odeslal zprávu. :)
Venca190
Profil *
Odeslání zprávy mám vyřešeno přes ajax, tj. že se nedá stihnou 2x kliknout na tlačítko odeslat. Ovšem, párkrát se mi už stalo(asi, když se web načetl pomalu), že po prvním kliknutí na tlačítko to nic neudělalo.
Teďkon jsem teda přidal kod od Kubo2, tak jsem teda zvědavej jestli to pomůže. Protože defakto, když se zpráva odešle i ve stejné sekundě, tak poslední zpráva je ještě jiná, než ta co jsem psal.
Nebo ne?
mimochodec
Profil
Venca190:
když se zpráva odešle i ve stejné sekundě, tak poslední zpráva je ještě jiná, než ta co jsem psal.

Proč by měla být?
Mám pocit, že řešíš problém jinde, než vzniká. Nejdřív si to pořádně odzkoušej a zjisti, jak k tomu dochází. Pak to můžeš nějak řešit. Kubova rada je pokus zazáplatovat to jinde, než kde je chyba.
tiso
Profil
Spoľahlivý spôsob ochrany je pridať unikátny token každému zobrazenému formuláru a ukladať ho do databázy do stĺpca s unique indexom - ten index zabezpečí že sa správa neuloží viac-krát.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: