mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 06:50 Benutzername: Passwort: Auto-Login

Thema: [php] sich selbstauswertendes formular, refresh unterdrücken vom 08.05.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [php] sich selbstauswertendes formular, refresh unterdrücken
Seite: Zurück  1, 2, 3  Weiter
Autor Nachricht
WinstonSmith

Dabei seit: 06.01.2005
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Di 08.05.2007 17:33
Titel

Antworten mit Zitat Zum Seitenanfang

tacker hat geschrieben:
Du speicherst einfach in der Session, ob das Formular schon abgeschickt wurde.


Das ist keine schlechte Idee.

Du erstellst ja sowieso in der neuen Datei für das "Danke" eine neue Session (oder im Schritt davor). Wenn du in der Session eine Variable mit entsprechendem Wert speicherst und diese immer vor dem Formular prüfst, dürfte das solch einen Fall abfangen.

Das klingt zwar nach ziemlichen Spaghetticode, aber klappen sollte es eigentlich Lächel
  View user's profile Private Nachricht senden
baskoralle
Threadersteller

Dabei seit: 17.02.2006
Ort: hamburch
Alter: 49
Geschlecht: Männlich
Verfasst Di 08.05.2007 17:47
Titel

Antworten mit Zitat Zum Seitenanfang

ok. ich poste jetzt mal den code.

das mit dem in die session speichern versteh ich zwar.
aber ich weiss nicht wie und wo ich das prüfen soll. könnt ja mal drüber gucken.
passiert halt alles in einem script. wo ich halt denk das das problem dort liegt.

code:

Code:
<?php session_start();

##########prüfen ob e mail korrekt##############################

function checkMail($email) {
 if (strpos($email, "@") === False)
   return 0;
 $s = substr($email, strpos($email, "@"), strlen($email));
 if (count(explode(".", $s)) < 2)
   return 0;
 return 1;
}
##########funktion ende##########################################

###########funktion spam testen####################################

function spamCheck ($str) {
if ( eregi("from:",$str) || eregi("to:",$str) || eregi("multipart",$str) || eregi("cc:",$str) || eregi("bcc:",$str) )
    return 1;
  return 0;
}

############funktion ende###################################




##########wenn abgeschickt##################################
if ( isset($_POST['SubmitBtn']) ) {

$err=0;
$spam="";
while (list ($key, $val) = each ($_POST)) {
 $spam .= "$key=$val";
}
if (spamCheck($spam) == 1) $err=1;
if ( empty($_POST['name_emp']) ) $err=1;
if ( isset($_POST['email_emp']) ) {
     $email_emp=$_POST['email_emp'];
     $email_emp=strip_tags($email_emp);
     $email_emp=trim($email_emp);
     if ( ( checkMail($email_emp) == 0 ) || ( preg_match("/^[a-zA-Z0-9_\.-]{2,}@[a-z0-9-]{3,}\.[a-z]{2,4}|museum$/i", $email_emp) == false ) )
     $err=1;
}
if ( empty($_POST['name_abs']) ) $err=1;
if ( isset($_POST['email_abs']) ) {
     $email_abs=$_POST['email_abs'];
     $email_abs=strip_tags($email_abs);
     $email_abs=trim($email_abs);
     if ( ( checkMail($email_abs) == 0 ) || ( preg_match("/^[a-zA-Z0-9_\.-]{2,}@[a-z0-9-]{3,}\.[a-z]{2,4}|museum$/i", $email_abs) == false ))
     $err=1;
}
if ( empty($_POST['email_txt']) )  $err=1;

if (isset($_POST['txtCode'])){
        $CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
        }
        if (isset($_SESSION['CAPTCHA_RndText'])) {
        $CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText'];
        }

        if ($CAPTCHA_EnteredText != $CAPTCHA_RandomText ) $err=1;
###########wenn fehler aufgetaucht########
   if($err==1) {


###########ende###################################

echo ("<form method=\"POST\" action=\"empfehlung.php\">");
echo ("<table width=\"100%\" height=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" align=\"left\">");
echo ("<tr><td valign=\"top\">");
echo ("<table align=\"left\" width=\"415px\" height=\"200px\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">");
echo ("<tr></tr>");
echo ("<tr><td align=\"right\"><b>Ihr Name:</b></td>");


##########prüfen empfängername#######################

if ( ( isset($_POST['name_abs']) ) && ( !empty($_POST['name_abs']) ) ) {
     $name_abs = $_POST['name_abs'];
     $name_abs=strip_tags($name_abs);
     $name_abs=trim($name_abs);

     if ( (spamCheck($_POST['name_abs'])==1) ) {
     echo "<td><input type=\"Text\" name=\"name_abs\" size=\"25\" maxlength=\"50\"><br><font style=\"color:red; font-size:9px;\">Spamversuch, geben Sie einen gültigen Absendernamen ein!</font>";
     }
     else {
     echo ("<td><input type=\"Text\" name=\"name_abs\" size=\"25\" value=\"".$name_abs."\" maxlength=\"50\">");
     }
}
else {
     echo "<td><input type=\"Text\" name=\"name_abs\" size=\"25\" maxlength=\"50\"><br><font style=\"color:red; font-size:9px;\">Bitte geben Sie einen Absendernamen ein!</font>";
}




echo("</td></tr>");
echo ("<tr><td align=\"right\"><b>Ihre E-Mail:</b></td>");

##########prüfen email empfänger###########################

if (  isset ($_POST['email_abs']) ) {
     $email_abs=$_POST['email_abs'];
     $email_abs=strip_tags($email_abs);
     $email_abs=trim($email_abs);
     if ( ( checkMail($email_abs)  == 0 ) || ( preg_match("/^[a-zA-Z0-9_\.-]{2,}@[a-z0-9-]{3,}\.[a-z]{2,4}|museum$/i", $email_abs) == false ) )
     echo ("<td><input type=\"text\" name=\"email_abs\" size=\"25\" maxlength=\"40\"><br><font style=\"color:red; font-size:9px;\">Sie haben keine gültige Absender E-Mail Adresse eingegeben!</font>");

     else {

          if ( (spamCheck($_POST['email_abs'])==1) ) {
             echo ("<td><input type=\"text\" name=\"email_abs\" size=\"25\" maxlength=\"40\"><br><font style=\"color:red; font-size:9px;\">Spamversuch, gültige Absender E-Mail Adresse eingeben!</font>");
          }
          else {
               echo ("<td><input type=\"text\" name=\"email_abs\" size=\"25\" value=\"".$email_abs."\" maxlength=\"40\">");
          }


}
}


echo ("</td></tr>");
echo ("<tr><td width=\"45%\" align=\"right\"><b>Name des Empfängers:</b></td>");

##########prüfen name absender#########################

if ( ( isset ($_POST['name_emp']) ) &&( !empty ($_POST['name_emp']) ) ) {
     $name_emp=$_POST['name_emp'];
     $name_emp=strip_tags($name_emp);
     $name_emp=trim($name_emp);

     if ( (spamCheck($_POST['name_emp'])==1) ) {
        echo ("<td><input type=\"Text\" name=\"name_emp\" size=\"25\" maxlength=\"50\"><br><font style=\"color:red; font-size:9px;\">Spamversuch, geben Sie einen gültigen Empfängernamen ein!</font>");
     }
     else {
          echo ("<td><input type=\"Text\" name=\"name_emp\" size=\"25\" value=\"".$name_emp."\" maxlength=\"50\">");
     }


}
else {
     echo ("<td><input type=\"Text\" name=\"name_emp\" size=\"25\" maxlength=\"50\"><br><font style=\"color:red; font-size:9px;\">Bitte geben Sie einen Empfängernamen ein!</font>");
}

echo("</td></tr>");
echo ("<tr><td align=\"right\"><b>E-Mail des Empfängers:</b></td>");

##########prüfen email absender###################

if ( isset($_POST['email_emp']) ) {
     $email_emp=$_POST['email_emp'];
     $email_emp=strip_tags($email_emp);
     $email_emp=trim($email_emp);
     if ( ( checkMail($email_emp) == 0 ) || ( preg_match("/^[a-zA-Z0-9_\.-]{2,}@[a-z0-9-]{3,}\.[a-z]{2,4}|museum$/i", $email_emp) == false ) )
     echo ("<td><input type=\"Text\" name=\"email_emp\" size=\"25\" maxlength=\"40\"><br><font style=\"color:red; font-size:9px;\">Sie haben keine gültige Empfänger E-Mail Adresse eingegeben!</font>");
     else {

     if ( (spamCheck($_POST['email_emp'])==1) ) {
          echo ("<td><input type=\"Text\" name=\"email_emp\" size=\"25\" maxlength=\"40\"><br><font style=\"color:red; font-size:9px;\">Spamversuch, gültige Empfänger E-Mail Adresse eingeben!</font>");
     }
     else {
          echo ("<td><input type=\"Text\" name=\"email_emp\" size=\"25\" value=\"".$email_emp."\" maxlength=\"40\">");
     }


     }
}


echo("</td></tr>");
echo ("<tr><td align=\"right\" valign=\"top\"><b>Ihr E-Mail Text:</b></td>");

##########prüfen email text###########################

if ( ( isset($_POST['email_txt']) ) && ( !empty($_POST['email_txt']) ) ) {
     $email_txt=$_POST['email_txt'];
     $email_txt=strip_tags($email_txt);
     $email_txt=trim($email_txt);

     if ( (spamCheck($_POST['email_txt'])==1) ) {
           echo ("<td><textarea name=\"email_txt\" cols=\"20\" rows=\"5\" wrap=\"physical\"></textarea><br><font style=\"color:red; font-size:9px;\">Spamversuch, geben Sie einen gültigen E-Mail Text ein!</font>");
     }
     else {
          echo ("<td><textarea name=\"email_txt\" cols=\"20\" rows=\"5\" wrap=\"physical\">".$email_txt."</textarea>");
     }


}
else {
     echo ("<td><textarea name=\"email_txt\" cols=\"20\" rows=\"5\" wrap=\"physical\"></textarea><br><font style=\"color:red; font-size:9px;\">Bitte geben Sie einen E-Mail Text ein!</font>");
}

echo ("</td></tr>");
echo ("<tr><td>");

##########captcha######################################

        if (isset($_POST['txtCode'])){
        $CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
        }
        if (isset($_SESSION['CAPTCHA_RndText'])) {
        $CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText'];
        }

        if ($CAPTCHA_EnteredText != $CAPTCHA_RandomText ){
        echo ("<font style=\"color:red; font-size:9px;\">Sie haben einen falschen Code eingegeben!</font>");
        include_once($_SERVER["DOCUMENT_ROOT"]."/newsletter/captcha/captcha.php");
        echo("</td></tr><tr><td>&nbsp;</td><td align=\"left\"><input type=\"reset\" value=\"Löschen\">&nbsp;&nbsp;<input type=\"submit\" value=\"Absenden\" name=\"SubmitBtn\"></td></tr>");
        echo ("</table></td></tr></table></form>");
        }
echo("</P><br><br><P></P>");
include_once($_SERVER["DOCUMENT_ROOT"]."/includes/footer_news.php");
echo("</body></html>");

   }//end if falls fehler da
else {

 // Alle Fehler und Notices anzeigen
        error_reporting(E_ALL);
        //session_start();

        // Bei Ausgabe des eingegebenen Codes müssen html tags entfernt werden!
        $CAPTCHA_RandomText = "";
        if (isset($_POST['txtCode'])){
        $CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
        }
        if (isset($_SESSION['CAPTCHA_RndText'])) {
        $CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText'];
        }

        if ($CAPTCHA_EnteredText == $CAPTCHA_RandomText and isset($_POST['txtCode']) == true and isset($_SESSION['CAPTCHA_RndText'])){
                // Hier Code, wenn Übereinstimmung
                $an=$name_emp."<".$email_emp.">";

//hier steht sonst das was zur mail gehört
#########mails versenden################

if ( mail($an, $betreff, $nachricht, $xtra) ) {

   mail($an_copy, $betreff_copy, $nachricht_copy, $xtra_copy);
   header("Location: http://www.XXXXXX.de/newsletter/empfehlung_danke.php");
}
else {
     echo "<p>Ihr Nachricht konnte leider nicht versendet werden!</p>";
}
        } else {
                // Hier Code wenn keine Übereinstimmung
                //echo "Achtung Sie haben einen falschen Code eingegeben!";
                //echo "Your Code: $CAPTCHA_EnteredText, Random Code: $CAPTCHA_RandomText";
        }
                //echo "<br><br>";
                //echo "<a href=\"empfehlung.php\">noch einmal probieren!</a>";

        // Session unset
        unset($_SESSION['CAPTCHA_RndText']);



}


}//end if wenn abgeschickt
else {

echo ("<form method=\"POST\" action=\"empfehlung.php\">");
echo ("<table width=\"100%\" height=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" align=\"left\">");
echo ("<tr><td valign=\"top\">");
echo ("<table align=\"left\" width=\"415px\" height=\"200px\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">");
echo ("<tr></tr>");
echo ("<tr><td align=\"right\"><b>Ihr Name:</b></td>
<td><input type=\"Text\" name=\"name_abs\" size=\"25\" maxlength=\"50\"></td>
</tr>");
echo ("<tr><td align=\"right\"><b>Ihre E-Mail:</b></td>
<td><input type=\"text\" name=\"email_abs\" size=\"25\" maxlength=\"40\"></td>
</tr>");
echo ("<tr><td width=\"45%\" align=\"right\"><b>Name des Empfängers:</b></td>
<td><input type=\"Text\" name=\"name_emp\" size=\"25\" maxlength=\"50\"></td>
</tr>");
echo ("<tr><td align=\"right\"><b>E-Mail des Empfängers:</b></td>
<td><input type=\"Text\" name=\"email_emp\" size=\"25\" maxlength=\"40\"></td>
</tr>");
echo ("<tr><td align=\"right\" valign=\"top\"><b>Ihr E-Mail Text:</b></td>
<td><textarea name=\"email_txt\" cols=\"20\" rows=\"5\" wrap=\"physical\"></textarea></td>
</tr>");
echo ("<tr><td valign=\"bottom\">");
include_once($_SERVER["DOCUMENT_ROOT"]."/newsletter/captcha/captcha.php");
echo("</td></tr><tr><td>&nbsp;</td><td align=\"left\"><input type=\"reset\" value=\"Löschen\">&nbsp;&nbsp;<input type=\"submit\" value=\"Absenden\" name=\"SubmitBtn\">

}//end else

?>





hab den ganzen html gedöns rausgenommen, wegen übersicht.


Zuletzt bearbeitet von baskoralle am Di 08.05.2007 17:49, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
Anzeige
Anzeige
WinstonSmith

Dabei seit: 06.01.2005
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Di 08.05.2007 17:58
Titel

Antworten mit Zitat Zum Seitenanfang

Nimm 's mir nicht übel, aber ich werde mir den Code nicht komplett reinziehen Lächel

Aber vom Grundgedanken her ist es sowas:

- Bevor irgendetwas (Natürlich sollte mindestens zuerst session_start(); ausgeführt werden) gemacht wird, checkt dein Skript, ob die Sessionvar "sent" mit dem Wert "true" gespeichert ist. Das soll sie unabhängig der aktuellen Session tun, denn die ändert sich ja ständig.
- Wenn die Variable nicht gesetzt ist, macht er den ganzen Ablauf, bis er im Endeffekt auf der Dankesseite landet.
- Dort wird die Variable in die Session gespeichert.
- Wenn nun der User wieder zurückgeht auf's Formular, bricht dieses von Anfang an ab, weil ja die Variable gesetzt ist.

Nachvollziehbar?

Abgesehen davon solltest du dieses sehr grobe Konzept nicht 1 zu 1 übernehmen, denn das bringt wieder andere Probleme mit sich.

Was, wenn der User auf einer anderen Seite solch ein Form nutzen möchte? Also sollte die Variable vielleicht den Formnamen oder den seitennamen enthalten, was du stattdessen prüfen müsstest.

Bietet es sich an, die Variable in einem Cookie zu speichern, welches automatisch nach 20 Min. abläuft?

Solche Dinge solltest du dir überlegen, bevor du weiter machst *zwinker*

gruß,
winston

PS: Ich halte persönlich nichts von altklugen Tipps, aber da ich selbst oft genug in solch eine konzeptionelle Falle getappt bin kann ich dir nur raten, solche Fragen in Zukunft vor der eigentlichen Programmierung zu stellen Lächel
  View user's profile Private Nachricht senden
baskoralle
Threadersteller

Dabei seit: 17.02.2006
Ort: hamburch
Alter: 49
Geschlecht: Männlich
Verfasst Di 08.05.2007 18:25
Titel

Antworten mit Zitat Zum Seitenanfang

@ WinstonSmith:

ich nehms dir natürlich nicht übel das du dir nicht den ganzen code reinziehst.
danke für deinen tip. wenn ich dich richtig verstanden habe dann soll ich auf der danke seite
in die session reinspeichern ob gesendet wurde.
Code:
$_SESSION['sent']="true";


und am anfang des formulars immer prüfen ob diese variable gesetzt ist.

Code:
if (isset($_SESSION['sent'])); exit;

oder

if($_SESSION['sent']==true); exit;


ich hoffe ich hab das richtig verstanden.

danke auch für deinen tip mit der konzeption. hab ich auch schon gemerkt. is mir schon ein paar mal passiert. ich steh halt noch etwas am anfang von professioneller programmierung. und dann kommt mein chef immer mach mal ganz schnell. das ist dann immer etwas schwierig wenn man sich erstmal in alles einlesen muss. ich bin ja schon froh das ich gemerkt hab das man das formular ohne captcha schön hätte als spamschleuder benutzen können. mir ist halt sicherheit ein sehr wichtiger aspekt. bin ständig am lesen und recherchieren wegen dem ganzen. und lehrgeld muss man doch auch bezahlen. beim nächsten formular bin ich wieder etwas schlauer.

gruß baskoralle
  View user's profile Private Nachricht senden
WinstonSmith

Dabei seit: 06.01.2005
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Di 08.05.2007 18:59
Titel

Antworten mit Zitat Zum Seitenanfang

Nichts zu danken, ist mir halt ebenso gegangen.

Der nächste Schritt ist dann vermutlich, dass du zuviel drüber nachdenkst, an was du alles denken musst. Danach hast du dann den Dreh raus *zwinker* (Ich persönlich stehe genau in dieser Phase)


Den Gedanken meines Ansatzes hast du korrekt erfasst, ist nur die Frage, ob du damit wirklich jeden Fall abgedeckt hast. Wenn du solch ein Formular z.Bsp. auf jeder, oder auf mehreren Seiten hast, dann würde er mit diesem Code keines mehr aufrufen, nachdem eins gelaufen ist.

Daher würde es Sinn machen, mindestens eine Unterscheidung nach der Seite zu treffen.

Also in der Richtung:

Code:
$_SESSION['sent']="Name der vorangegangenen, verarbeitenden Seite";


Und beim Formularaufbau dann etwas in der Richtung von:

Code:
if(isset($_SESSION['sent']) && $_SESSION['sent']=="Name der aktuellen Seite") {
  echo "Form wurde schonmal abgeschickt";
} else {
  // Normale Verarbeitung
}


Die PageID oder den Namen kannst du ja beim letzten Sprung als Parameter mit auf die Dankesseite übergeben.

Mit exit würde ich sowieso nur arbeiten, wenn du wirklich komplett abbrechen willst, sonst lädt die Seite nicht mehr weiter und das kann unschön aussehen. In Debugginfunktionen und beim Errorhandling kannste das besser gebrauchen.

gruß,
winston
  View user's profile Private Nachricht senden
tacker

Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht: Männlich
Verfasst Mi 09.05.2007 11:28
Titel

Antworten mit Zitat Zum Seitenanfang

baskoralle hat geschrieben:
das problem ist das ja jedesmal ne neue session vergeben wird beim fehler durchgucken, wegen dem neuen captcha.

Nein. Eine Session wird normalerweise nur einem pro User und Sitzung vergeben. Sonst würde dein CAPTCHA gar nicht funktionieren.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
baskoralle
Threadersteller

Dabei seit: 17.02.2006
Ort: hamburch
Alter: 49
Geschlecht: Männlich
Verfasst Mi 09.05.2007 13:16
Titel

Antworten mit Zitat Zum Seitenanfang

hi,

erstmal danke an WinstonSmith und tacker für die hilfe.

ich habe das jetz so eingebaut:

am anfang des formulars ahbe ich die prüfung hingesetzt:

Code:
<?php
session_start();

if ( isset($_SESSION['gesendet']) && $_SESSION['gesendet']=="empfehlung.php" ) {

hier soll eine ausgabe erfolgen, ne html seite mit wurde schon gesendet oder so

} else {
hier ist dann der restliche code vom formular inkl. fehlerprüfung


in der danke seite setze ich die variable:

Code:
$_SESSION['gesendet']="empfehlung.php";


wenn ich das formular beim ersten mal gleich richtig ausfülle und es abschicke komme ich zur danke seite. wenn ich dann den zurück button vom browser nehme erscheint dann das formular unausgefüllt. das ist gut so. aber er bring halt nicht das es schon gesendet wurde???

wenn ich jetzt einen fehler provoziere, ein feld leer lasse dann bringt er auch die korrekte fehlermeldung oberhalb vom feld. ist es dann korrekt ausgefüllt wird es abgeschickt. danke seite kommt. bis hier hin ist alles gut. gehe ich wieder auf zurück im browser und aktualisiere die seite kommt garnichts mehr. er scheint zu merken anhand der prüfung das die seite schonmal gesendet war macht aber keine ausgaben egal was ich reinschreib. kommt mir sehr seltsam vor. ich mein er geht ja nicht in den else zweig sonst würde er mir ja das ausgefüllte formular bringen. aber warum zum teufel macht er keine ausgaben????
  View user's profile Private Nachricht senden
tacker

Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht: Männlich
Verfasst Mi 09.05.2007 13:41
Titel

Antworten mit Zitat Zum Seitenanfang


  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Refresh unterdrücken (Taste F5 behindern)
Probleme bei >>Refresh<<
Springen bei refresh verhindern
Refresh funktioniert nicht richtig
[Javascript] Refresh des Parent window
Netbeans 7.1 refresh files freeze
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2, 3  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.