Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Reloadsperre

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Reloadsperre

    Hi, hab mal wieder ein kleines Problem. Datenaus dem Formular werden alle Ordnugnsgemäß weitergereicht nur funktioniert die reaload sperre irgendwie nicht.

    PHP-Code:
    $rnd = (uniqid(sperre));
    echo 
    "
    <form name=form1 method=post action=?site=contact&act=mail>
    <input type=hidden name=sperre value=
    $rnd
    PHP-Code:
    elseif($act==mail){

    session_start();
    if(isset(
    $_SESSION['sperre'])) {
    if(
    $_SESSION['sperre'] == $_POST['sperre']) {
    echo 
    "Das Formular wurde bereits abgeschickt.";
        }
    }

    $_SESSION['sperre'] = $_POST['sperre'];
    $name $_POST['name'];
    $vorname $_POST['vorname']; 
    Es ist als wäre sich gar nich da.

  • #2
    Zitat von Gilby Beitrag anzeigen
    PHP-Code:
    $rnd = (uniqid(sperre)); 
    ??

    Was genau hast du denn vor?

    Kommentar


    • #3
      Hallo Gilby,
      Dein Html-Code erscheint mir fehlerhaft/unsauber.
      Bitte achte auf Anführungszeichen z.b so:

      PHP-Code:
      echo '
      <form name="form1" method="post" action="?site=contact&act=mail">
      <input type="hidden" name="sperre" value=". $rnd . ">'

      Desweiteren musst du darauf achten Variablen bei einem echo Befehl durch einen Punkt zu trennen.
      Also anstatt
      PHP-Code:
       echo "ich mag $variable"
      solltest du
      PHP-Code:
       echo "ich mag " $variable
      verwenden.

      Zum eigentlichen Problem:
      Kann ich leider nicht ganz beurteilen, da mir nicht ganz ersichtlich ist was du hier vorhast - ich schaus mir nochmal an und editiere dann...

      EDIT:
      Kannst du bitte mal den kompletten Quellcode posten? Hier scheint noch einiges zu fehlen...Liest du denn die $act Variable auch wirklich aus?

      Kommentar


      • #4
        danke für die hinweise sahel.

        das sollte eigntlich ne zufallszahl werden (was im endeffekt auch raus kommt). die
        zufallszahl wird dann mit dem formular als $sperre (<input type=hidden name=sperre value=$rnd> ) übergeben.

        die wird als session gesetzt und mit der $sperre überprüft. wenn beide gleich sind (was nur beim reload seinkann) wird abgebrochen.

        das war zumindest die idee dahinter

        EDIT: ok die rnd zahl hätte ich auch mit rand(1,1000); bilden können aber das is ja nich das problem.

        Es es funktioniert alles wunderbar. die $act wird übertragen das formular wird auch per email an mich gesendet. also es werden alle variablen übergeben. auch die $sperre kommt an

        nur wenn ich F5 drücke wird das formular halt nochma abgeschickt. sprich meine reaload sperre greift nicht

        Kommentar


        • #5
          PHP-Code:
          }elseif($act==mail){

          session_start();
          if(isset(
          $_SESSION['sperre'])) {
              if(
          $_SESSION['sperre'] == $_POST['sperre']) {
                  echo 
          "Das Formular wurde bereits abgeschickt.";
              }
          }

          $_SESSION["sperre"] = $_POST["sperre"];  
          $name $_POST["name"];
          $vorname $_POST["vorname"];
          $firma $_POST["firma"];
          $anschrift $_POST["anschrift"];
          $plz $_POST["plz"];
          $ort $_POST["ort"];
          $was $_POST["was"];
          $gespraech $_POST["gespraech"];
          $beratung $_POST["beratung"];
          $angebot $_POST["angebot"];
          $vorort $_POST["vorort"];
          $vorangebot $_POST["vorangebot"];
          $telefon $_POST["telefon"];
          $mobil $_POST["mobil"];
          $email $_POST["email"];
          $wranzahl $_POST["wranzahl"];
          $wrhersteller $_POST["wrhersteller"];
          $anlagekw $_POST["anlagekw"];
          $inet $_POST["inet"];
          $kabel $_POST["kabel"];
          $neuinstall $_POST["neuinstall"];
           
          if(
          $was==installateur){$was1=Installateuer;}
          if(
          $was==privat){$was1=Privatperson;}
          if(
          $angebot==TRUE){$angebot1=x;}
          if(
          $gespraech==TRUE){$gespraech1=x;}
          if(
          $beratung==TRUE){$beratung1=x;}
          if(
          $vorort==TRUE){$vorort1=x;}
          if(
          $vorangebot==TRUE){$vorangebot1=x;}
          if(
          $inet==ja){$inet1=ja;}
          if(
          $inet==nein){$inet1=nein;}
          if(
          $inet==ka){$inet1='nicht bekannt';}
          if(
          $kabel==ja){$kabel1=ja;}
          if(
          $kabel==nein){$kabel1=nein;}
          if(
          $kabel==ka){$kabel1='nicht bekannt';}
          if(
          $neuinstall==ja){$neu=ja;}
          if(
          $neuinstall==nein){$neu=nein;}
              
          mail("xxx@xxx.de""Anfrage""
          $was1 \n\n
          $name
          $vorname
          $firma \n
          $anschrift 
          $plz $ort \n
          Telefon: 
          $telefon
          Mobil: 
          $mobil 
          Email: 
          $email 
          Angebot: 
          $angebot1
          Gespräch: 
          $gespraech1
          Beratung: 
          $beratung1
          Vor-Ort-Termin: 
          $vorort1
          Vorabangebot: 
          $vorangebot1 \n
          \n
          Angaben fürs Vorabangebot: \n
          Wechselrichter Hersteller: 
          $wrhersteller
          Wechselrichter Anzahl: 
          $wranzahl
          Anlagen Größe: 
          $anlagekw kW
          \n
          Kabel bereits verlegt? 
          $kabel1
          Internet verfügbar? 
          $inet1
          Neuinstallation? 
          $neu
          "
          "From:xxx"); 

          ALLE variablen werden aus dem Formular korrekt hier her übergeben. auch die $sperre kommt an. nur funktioniert die reloadsperre nicht

          Kommentar


          • #6
            Mmh.
            Wenn ich mich nicht irre kann das nicht funktionieren.
            Du fragst zwar hier:
            PHP-Code:
            if(isset($_SESSION['sperre'])) {
                if(
            $_SESSION['sperre'] == $_POST['sperre']) {
                    echo 
            "Das Formular wurde bereits abgeschickt.";
                }

            ob die session['sperre'] die selbe ist wie die, die du übermittelt hast. Allerdings passiert auch nich mehr als die Ausgabe einer Fehlermeldung? Das Script sollte auch abbrechen. Du kannst nun zwei Varianten probieren, entweder mit die(); oder du schreibst die If etwas um. Etwa soungetestet)

            PHP-Code:
            }elseif($act==mail){

            session_start();
            if(isset(
            $_SESSION['sperre']) && $_SESSION['sperre'] == $_POST['sperre']) {
            echo 
            "Das Formular wurde bereits abgeschickt";
            }else{

            $_SESSION["sperre"] = $_POST["sperre"];  
            $name $_POST["name"];
            $vorname $_POST["vorname"];
            $firma $_POST["firma"];
            $anschrift $_POST["anschrift"];
            $plz $_POST["plz"];
            $ort $_POST["ort"];
            $was $_POST["was"];
            $gespraech $_POST["gespraech"];
            $beratung $_POST["beratung"];
            $angebot $_POST["angebot"];
            $vorort $_POST["vorort"];
            $vorangebot $_POST["vorangebot"];
            $telefon $_POST["telefon"];
            $mobil $_POST["mobil"];
            $email $_POST["email"];
            $wranzahl $_POST["wranzahl"];
            $wrhersteller $_POST["wrhersteller"];
            $anlagekw $_POST["anlagekw"];
            $inet $_POST["inet"];
            $kabel $_POST["kabel"];
            $neuinstall $_POST["neuinstall"];
             
            if(
            $was==installateur){$was1=Installateuer;}
            if(
            $was==privat){$was1=Privatperson;}
            if(
            $angebot==TRUE){$angebot1=x;}
            if(
            $gespraech==TRUE){$gespraech1=x;}
            if(
            $beratung==TRUE){$beratung1=x;}
            if(
            $vorort==TRUE){$vorort1=x;}
            if(
            $vorangebot==TRUE){$vorangebot1=x;}
            if(
            $inet==ja){$inet1=ja;}
            if(
            $inet==nein){$inet1=nein;}
            if(
            $inet==ka){$inet1='nicht bekannt';}
            if(
            $kabel==ja){$kabel1=ja;}
            if(
            $kabel==nein){$kabel1=nein;}
            if(
            $kabel==ka){$kabel1='nicht bekannt';}
            if(
            $neuinstall==ja){$neu=ja;}
            if(
            $neuinstall==nein){$neu=nein;}
                
            mail("xxx@xxx.de""Anfrage""
            $was1 \n\n
            $name
            $vorname
            $firma \n
            $anschrift 
            $plz $ort \n
            Telefon: 
            $telefon
            Mobil: 
            $mobil 
            Email: 
            $email 
            Angebot: 
            $angebot1
            Gespräch: 
            $gespraech1
            Beratung: 
            $beratung1
            Vor-Ort-Termin: 
            $vorort1
            Vorabangebot: 
            $vorangebot1 \n
            \n
            Angaben fürs Vorabangebot: \n
            Wechselrichter Hersteller: 
            $wrhersteller
            Wechselrichter Anzahl: 
            $wranzahl
            Anlagen Größe: 
            $anlagekw kW
            \n
            Kabel bereits verlegt? 
            $kabel1
            Internet verfügbar? 
            $inet1
            Neuinstallation? 
            $neu
            "
            "From:xxx"); 
            }
            //If Abfrage ob die Sperre existiert - ende
            //Sollte eine Mail abgeschickt werden - ende 
            So ich hab mal die beiden If Abfragen zu einer zusammengefügt und mit && verbunden. Heißt so viel wie "und".
            Nur wenn $_Session['sperre'] nicht existiert oder ungleich der $_POST['sperre'] ist wird der Code danach (also der Versand der Email) ausgeführt. Ich hoffe das hat geholfen.

            mfg

            Kommentar


            • #7
              habs eigentlich viel zu kompliziert gemacht. da hast recht. habs jetzt anderst versucht aber irgendwie liegt das problem wohl bei der session..

              Habs jetzt nach dem prinzip aber funktioniert wie gesagt genauso wenig. er übergeht das komplette und gibt NIE echo "Das Formular wurde bereits abgeschickt."; aus -.-

              PHP-Code:
              session_start();
              if(isset(
              $_SESSION['sperre']))
              {    echo 
              "Das Formular wurde bereits abgeschickt.";    }

              else {

              $_SESSION['sperre'] = TRUE;


              nach else { kommt eben meine weiterverbeitung bzw die mail funktion und $_SESSION['sperre'] = TRUE; wird eben gesetzt.

              aber genau das passiert vermutlich NICHT. deswegen is die session nie vorhanden und der es trit jedes mal sofort das else in kraft

              Kommentar


              • #8
                Hast du es mal mit einem
                PHP-Code:
                error_reporting(E_ALL); 
                versucht? Füg das mal ganz oben in die PHP-Datei ein und guck mal ob es Fehlermeldungen etc. gibt.

                Kommentar


                • #9
                  Bringt nichts. wäre es möglich das meine session gar nicht gesetzt wird?

                  Kommentar


                  • #10
                    Also ich hab es nun auf meinem Webserver getestet. folgendes Script läuft problemlos:
                    PHP-Code:
                    <?php
                    session_start
                    ();
                    $timestamp time();

                    if(isset(
                    $_GET["act"])){ //WEnn Formular abgeschickt wurde
                        
                        
                        
                    if(isset($_SESSION['sperre_s']) && $_SESSION['sperre_s'] == $_POST['sperre']){
                            
                            echo 
                    "du warst schonmal hier";
                            
                    //Wenn User das Formular per f5 reloaded hat
                            
                        
                    }else{
                            
                    $_SESSION['sperre_s'] = $_POST['sperre']; //Sperrzeit in SESSION schreiben
                            
                            
                    echo "neu hier?";
                            
                    //Hier kommt deine Mailfunktion hin
                            
                        
                    }
                    }

                    ?>

                    <form name="form1" method="post" action="?act=mail">
                    <input type="text" name="username">
                    <input type="hidden" name="sperre" value="<?php echo $timestamp?>">
                    <input type="submit" value="Abschicken">
                    Wie das mit den Sessions bei dir aussieht kann ich dir nicht genau sagen. Das hängt stark von den Webserver Einstellungen ab.

                    Kommentar


                    • #11
                      Zitat von SaHeL Beitrag anzeigen
                      Desweiteren musst du darauf achten Variablen bei einem echo Befehl durch einen Punkt zu trennen.
                      Also anstatt
                      PHP-Code:
                       echo "ich mag $variable"
                      solltest du
                      PHP-Code:
                       echo "ich mag " $variable
                      verwenden.
                      Totaler Quatsch.
                      PHP-Code:
                      echo "ich mag $variable"
                      Ist absolut konform.

                      Der PHP-Parser sucht in Strings die in doppelten Anführungszeichen stehen immer nach Variablen, in Strings die in einfachen Anführungszeichen dagegen nicht. Da macht das trennen mit Punkt eher Sinn:
                      PHP-Code:
                      echo 'ich mag '.$variable
                      Zitat von Gilby Beitrag anzeigen
                      Bringt nichts. wäre es möglich das meine session gar nicht gesetzt wird?
                      Du kannst Dir doch ausgeben lassen welche Variablen in $_SESSION gesetzt sind:
                      PHP-Code:
                      print_r$_SESSION ); 
                      Oder Du prüfst so:
                      PHP-Code:
                      if ( !isset( $_SESSION ) ) { /* Session nicht gesetzt */ 
                      Gruß

                      Kommentar


                      • #12
                        Habs jetzt mal anderst rum versuch aber der selbe effekt. tut nich.

                        PHP-Code:
                        session_start();
                        if(!isset(
                        $_SESSION['sperre'])) {

                        $_SESSION['sperre'] = TRUE;  
                        $name $_POST["name"];
                        $vorname $_POST["vorname"];
                        $firma $_POST["firma"];
                        $anschrift $_POST["anschrift"];
                        $plz $_POST["plz"];
                        $ort $_POST["ort"];
                        $was $_POST["was"];
                        $gespraech $_POST["gespraech"];
                        $beratung $_POST["beratung"];
                        $angebot $_POST["angebot"];
                        $vorort $_POST["vorort"];
                        $vorangebot $_POST["vorangebot"];
                        $telefon $_POST["telefon"];
                        $mobil $_POST["mobil"];
                        $email $_POST["email"];
                        $wranzahl $_POST["wranzahl"];
                        $wrhersteller $_POST["wrhersteller"];
                        $anlagekw $_POST["anlagekw"];
                        $inet $_POST["inet"];
                        $kabel $_POST["kabel"];
                        $neuinstall $_POST["neuinstall"];
                         
                        if(
                        $was==installateur){$was1=Installateuer;}
                        if(
                        $was==privat){$was1=Privatperson;}
                        if(
                        $angebot==TRUE){$angebot1=x;}
                        if(
                        $gespraech==TRUE){$gespraech1=x;}
                        if(
                        $beratung==TRUE){$beratung1=x;}
                        if(
                        $vorort==TRUE){$vorort1=x;}
                        if(
                        $vorangebot==TRUE){$vorangebot1=x;}
                        if(
                        $inet==ja){$inet1=ja;}
                        if(
                        $inet==nein){$inet1=nein;}
                        if(
                        $inet==ka){$inet1='nicht bekannt';}
                        if(
                        $kabel==ja){$kabel1=ja;}
                        if(
                        $kabel==nein){$kabel1=nein;}
                        if(
                        $kabel==ka){$kabel1='nicht bekannt';}
                        if(
                        $neuinstall==ja){$neu=ja;}
                        if(
                        $neuinstall==nein){$neu=nein;}
                            
                        mail("xxx@xxx.de""Anfrage""
                        $was1 \n\n
                        $name
                        $vorname
                        $firma \n
                        $anschrift 
                        $plz $ort \n
                        Telefon: 
                        $telefon
                        Mobil: 
                        $mobil 
                        Email: 
                        $email 
                        Angebot: 
                        $angebot1
                        Gespräch: 
                        $gespraech1
                        Beratung: 
                        $beratung1
                        Vor-Ort-Termin: 
                        $vorort1
                        Vorabangebot: 
                        $vorangebot1 \n
                        \n
                        Angaben fürs Vorabangebot: \n
                        Wechselrichter Hersteller: 
                        $wrhersteller
                        Wechselrichter Anzahl: 
                        $wranzahl
                        Anlagen Größe: 
                        $anlagekw kW
                        \n
                        Kabel bereits verlegt? 
                        $kabel1
                        Internet verfügbar? 
                        $inet1
                        Neuinstallation? 
                        $neu
                        "
                        "From:xxx");    

                        echo 
                        "<br><br><table align=center width=300 border=0 cellspacing=0 cellpadding=0><tr><td>
                        <font size=2 face=verdana color=#000000><b>Vielen Danke für Ihre Anfrage.<br>Wir werden uns schnellstmöglich mit Ihnen in Verbindung setzen</b></font>
                        </td></tr></table>"
                        ;
                        }
                        else{echo 
                        "muh";}

                        Kommentar


                        • #13
                          ich komm einfach nicht weiter. habs jetzt mal versucht wies vorgeschlagen wurde

                          PHP-Code:
                          elseif($act==mail){
                           
                          session_start();
                           if(isset(
                          $_SESSION['sperre_s']) && $_SESSION['sperre_s'] == $_POST['sperre']){
                                  
                                  echo 
                          "du warst schonmal hier";

                                  
                              }else{
                                  
                          $_SESSION['sperre_s'] = $_POST['sperre'];
                                  
                                  echo 
                          "neu hier?";
                                  
                          print_r($_SESSION);
                                  echo 
                          $_POST['sperre'];
                                  
                              } 



                          $sperre is ne rnd zahl (in dem fall wars gerade 59). ich bekomm als ausgabe immer nur :

                          neu hier?Array ( [sperre_s] => 59 ) 59

                          auch wenn ich f5 drück

                          oder muss ich die session auch irgendwie übergeben? es sieht stark danach aus als ob die session beim ersten öffnen zwar gespeichert wird (siehe richtige ausgabe) beim reload(F5) aber "vergessen" wird. somit wäre sie ja nie gesetzt

                          die if funktion funktioniert. bei !isset und != gibt er schon "du warst schonmal hier" aus

                          EDIT: wenn ich print_r($_SESSION); direkt nach session_start(); setz is das array leer. egal wie oft ich F5 drück. Also ziemlich eindeutig das er die session bei reload nicht behält.

                          Kommentar


                          • #14
                            So hab mal gegoogelt und irgendwo gefunden das die REGISTER_GLOBALS auf ON sein muss damit das funktioniert. Stimmt das oder nur heise Luft?

                            Die wäre in meinem Fall auf off

                            Kommentar


                            • #15
                              Morgen,
                              es gab schonmal ein ähnliches Problem...
                              >>Hier<<
                              Ich bin mir aber nicht sicher, ob das dein Problem behebt...
                              Ansonsten versuch dich mal an dem einfachen Beispiel hier und lass deinen restlichen Code erstmal weg.
                              >>Hier<<

                              Kommentar

                              Lädt...
                              X