Autor Thema: Reloadsperre nachbauen  (Gelesen 4932 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Reloadsperre nachbauen
« am: April 28, 2009, 19:29:53 »
Hallo,

im WC gibt es doch die Reloadsperre für den Warenkorb.
Wie kann ich das bei form-Abfragen nachbauen?

Konkret:
ich habe ein Script, dass einen bestimmten Formularwert abfragt
   my $mode = ssp::get_var_form("mode");
   if ($mode eq "new") {
         utils::mail();
   }

also wenn der im Formular übergebene Wert "new" ist, wird eine Mail versandt.
Wie kann ich verhindern, daß die Mail bei jedem Seitenreload (oder F5) nochmals gesendet wird?

Nachtrag:
Lösung gefunden - funktioniert zwar, aber ich bin nicht sicher, ob das so korrekt ist?

Habe als "Benutzerdaten OK" Seite eine Dummyseite eingetragen, auf der nur das steht
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
<head>
<!--spmacro:include(online_editor_modul_0_2/inc/oe_new.ipl)-->  ### = Daten in DB schreiben
<!--spmacro:module(test)
sub test {   ### mail versenden
use online_editor_modul_0_2::inc::utils;
my $mode = ssp::get_var_form("mode");
if ($mode eq "new") {
utils::mail();
}
}
-->
__test::test__
<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://__xxpath__?show1290000051,__xxsession__">   ### auf Zielseite weiterleiten
</head>
</html>

die Mail wird also auf dieser Seite abgesendet (und die DB-Einträge gemacht) und dann sofort - hoffentlich ohne dass der Kunde es überhaupt merkt - auf die eigentliche Zielseite weitergeleitet.
Hier kann man jetzt so oft man will reloaden OHNE die mail erneut abzusenden.

aber funktioniert das META HTTP-EQUIV="REFRESH" wirklich zuverlässig?
gibt es dafür nicht doch eine bessere Lösung?

Linkback: https://www.shoppilot.net/pf/index.php?topic=1234.0
« Letzte Änderung: April 28, 2009, 20:11:11 von dobra »
mfG
dobra

Offline ahe

  • Global Moderator
  • Sr. Member
  • *****
  • Beiträge: 435
  • Lob: 20
Re: Reloadsperre nachbauen
« Antwort #1 am: April 29, 2009, 01:37:49 »
Hallo dobra,

ich würde den Mailversand nicht nur von einer Form-Variablen abhängig machen.
Besser wäre es zu prüfen, ob der neu einzutragende Datensatz schon in der DB eingetragen ist.
Falls nicht: Datensatz eintragen und Mail versenden.
Falls doch: Meldung ausgeben und abbrechen.
MfG ahe

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Re: Reloadsperre nachbauen
« Antwort #2 am: April 29, 2009, 06:48:03 »
Hallo ahe,

ja - das ist eindeutig die bessere Lösung  :D

war auch meine erste Idee, hat aber nicht funktioniert...
scheinbar hab ich da gestern irgendwas falsch gemacht  :-[

hab's jetzt nochmal versucht und SO funktioniert es
                 ...
##main::plog("db_insert_item: itemid:$itemid itemid:$pgid params:@params\n");

my $ok = ssp::db_insert_item(0, $itemid, $pgid, @params);
if ($ok == -1) { ## Artikel existiert
$errmsg = "Operation nicht erfolgreich: Artikelnr. existiert bereits. Wählen Sie eine andere Artikel-Nr.";
} else {
$errmsg = "Erfolgreich: Artikel eingefügt.";
use online_editor_modul_0_2::inc::utils;
utils::mail();

## Gültige Subcats für den Nutzer auslesen
my @scids = split(',',ssp::get_var_user("PUBSUBCAT"));
               ....

Keine Dummyseite notwendig und kein doppelter mail Versand bei reload - jetzt funktioniert alles, wie es soll

Danke (auch für den Tipp gestern, wie ich das mit den mails überhaupt machen kann)