Ankündigung

Einklappen
Keine Ankündigung bisher.

Bei richtiger Eingabe Daten an nächste Seite versenden

Einklappen

Neue Werbung 2019

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

  • Bei richtiger Eingabe Daten an nächste Seite versenden

    hey,

    nach langer erfolgloser sucherei, lande ich nun hier..
    ich habe eine php seite erstellt - auf dieser seite befindet sich ein formular. in diesem formular ist ein eingabefeld vorhanden.

    hierbei soll bei falscher eingabe (buchstaben oder sonderzeichen) auf der selben seite "Bitte geben Sie nur Zahlen ein" ausgegeben werden" - der User muss dann also nochmals die richtigen Daten eingeben. Ebenfalls sollte dem User auch eine Fehlermeldung angezeigt werden, wenn er das Formular absenden möchte, ohne eine Zahl eingetragen zu haben.

    Bei richtiger Eingabe wird er gleich zur nächsten Seite weitergeleitet (ohne das eine Meldung erscheint)

    Mein problem ist nun folgendes: wie gebe ich so eine Fehlermeldung aus - ohne gleich auf die nächste seite zu verwiesen werden.


    ich habs nun mal so probiert - hier wird die meldung nur auf der gleichen seite angezeigt.. gebe ich step4.php dazu ein.. gibt er mir wohl zuerst die fehlermeldung ein, doch schlussendlich wird man trotzdem auf die nächste seite verwiesen. bei falscher eingabe muss er also nochmals aufgefordert die daten richtig einzugeben - dann sollten die daten erneut überprüft werden, ist dann alles korrekt - soll er auf die nächste seite verwiesen werden.

    hoffe mir kann jemand weiterhelfn.... weiß leider nicht weiter.. und kenn mich nich so gut aus
    wär euch wirklich sehr dankbar!!!!!!!!
    gruss heidi

    Code:
    <form name="form1" method="POST"> <!--action="step4.php">-->
    
    <p>Startnummer:
    <input type="text" name="startnr" size="5">
    </p>
    
    <p>
    <input type="submit" name="Weiter" value="Submit">
    <input type="reset" name="reset" value="Reset">
    
    
    <input type="hidden" name="absenden" value="1">
    </p>
    </form>
    
          <div align="left"><span class="Stil18">Teilnehmerliste </span></div>
          
    <?php
    
        $nr=$_POST['startnr'];
        
        if(empty($nr))  {
                    echo "<span class=\"Stil7 Stil19\"><br>Bitte geben Sie eine Start Nummer ein</span>";
    
            } 
            elseif(!empty($nr)) {
                //echo "Die Telefonnummer darf nur aus Zahlen bestehen.";
                
                }
        
        if ((ctype_digit($nr)) ) {
    
        
        //if (!(ctype_digit($nr)) ) {
        
        echo "<h4>OK</h4>";
        //echo "<form action=\"step4.php\">";
        }
        
        else
        {
        echo "<h4>nicht ok</h4>";
        }
    ?>


  • #2
    um das ganze simpel zu gesatelt. fehler gibste aus mit
    PHP-Code:
    echo 
    und weiterleiten mit
    PHP-Code:
    header("Location: http://www.example.com/");
    exit(); 
    Under Construktion

    Kommentar


    • #3
      Du musst dir bewusst sein, dass PHP-Code auf dem Server ausgeführt wird. Die Eingaben erfolgen aber auf dem Client. Deshalb nützt dir weder echo, noch header() etwas. Wenn du die Überprüfung vor dem Abschicken des Scripts überprüfen willst, muss das auf dem Client erfolgen, und das geht nur mit Javascript. Dazu definierst du irgendwo. am besten in der Headersektion eine JS-Funktion, die auf Ziffern und leer überprüft, z.B. chk_startnr(). Diese rufst du dann entsprechend auf:
      Code:
      <input type="text" name="startnr" onchange='chk_startnr()' size="5">
      //bzw.
      <input type="submit" name="Weiter" onclick='chk_startnr()' value="Submit">
      Den Code für die Funktion zu posten würde wahrscheinlich zu weit führen, ausserdem gibts dafür ja ein anderes Forum
      Gruss
      L

      Kommentar


      • #4
        Zitat von lazydog Beitrag anzeigen
        ... muss das auf dem Client erfolgen...
        Hallo,

        Da kannst du auch gleich die Prüfung sein lassen! Vertraue niemals Daten vom Anwender.

        Prüfe die Daten nach dem abschicken in PHP und zeige das Formular erneut an, wenn die Daten falsch sind (am Besten noch mit einem Hinweis). Sind die Daten korrekt kannst du wie gehabt weiterleiten.

        Gruß Thomas

        Kommentar


        • #5
          Zitat von Thomas Beitrag anzeigen
          Hallo,

          Da kannst du auch gleich die Prüfung sein lassen! Vertraue niemals Daten vom Anwender.

          Prüfe die Daten nach dem abschicken in PHP und zeige das Formular erneut an, wenn die Daten falsch sind (am Besten noch mit einem Hinweis). Sind die Daten korrekt kannst du wie gehabt weiterleiten.

          Gruß Thomas
          Da hast du wohl recht, also wenn man eine JS-Überprüfung machen will, sollte man trotzdem noch eine Überprüfung in PHP machen und da das dann doppelt wäre ist die JS-Überprüfung wohl in den meisten Fällen sinnlos.

          Kommentar


          • #6
            Zitat von cycap Beitrag anzeigen
            Da hast du wohl recht, also wenn man eine JS-Überprüfung machen will, sollte man trotzdem noch eine Überprüfung in PHP machen und da das dann doppelt wäre ist die JS-Überprüfung wohl in den meisten Fällen sinnlos.
            Da hast du grundsätzlich schon recht, bei grösseren Formularen kann das, v.a. bei langsamen Leitungen, aber durchaus von Vorteil sein. Dafür brauchst du dann die für die erneute Darstellung nicht alle Werte ins Formular zu schreiben. Und der Aufwand ist ja gering.
            Gruss
            L

            Kommentar


            • #7
              wie kann ich das machen??

              doch wie kann ich die Daten (vom Formular) im PHP prüfen?? Ich weiß nicht wirklich wie das gmacht werden soll - das der User bei falscher Eingabe nicht auf die nächste Seite verwiesen wird.
              Bitte um Hilfe.... danke..

              Kommentar


              • #8
                Einfach kurz skizziert:
                PHP-Code:
                <?php
                error_reporting
                (E_ALL);

                $Eingabefeld1 = isset($_POST['Eingabefeld1']) ? $_POST['Eingabefeld1'] : '';
                $Eingabefeld2 = isset($_POST['Eingabefeld2']) ? $_POST['Eingabefeld2'] : '';
                ....


                if (!empty(
                $_POST['go']) || !empty($_POST['set']){
                    
                $ok true;
                    if (
                $Eingabefeld1 ist nicht ok){
                        
                Fehlermeldung;
                        
                $ok false;
                    }
                    if (
                $Eingabefeld2 ist nicht ok){
                        
                Fehlermeldung;
                        
                $ok false;
                    }
                    ...
                    if (
                $ok){
                        
                weiterleiten;
                    }
                }
                echo 
                "<form action='" $_SERVER['PHP_SELF'] . "' method='post'>
                    <input name'Eingabefeld1' value='
                $Eingabefeld1' .... /><br />
                    <input name'Eingabefeld2' value='
                $Eingabefeld2' .... /><br />
                    ....
                    <input type='hidden' name='set' value='1' /><br />
                    <input type='submit' name='go' value='Weiter' /><br />
                    </form>\n"
                ;    
                ?>
                D.h. du schickst dein Formular ab (ans gleiche Script), überprüfst die entsprechenden Daten. Sind diese ok, leitest du auf das entsprechende Script weiter, andernfalls zeigst du das Formular erneut an, mit den entsprechenden Fehlermeldungen.
                Gruss
                L

                Kommentar


                • #9
                  weiß leider nicht weiter (

                  danke für deine hilfe lazydog..
                  hab aber in der zwischenzeit meinen code mal umgeschrieben und es so probiert:



                  Code:
                  <?php session_start();
                   
                  $fo=$_REQUEST["fo"];
                  if($fo==""){print_form();}
                  if($fo=="kontrolle"){check_input_data();}
                   
                  //---------------------------
                  function print_form()
                  {
                   
                  echo "<table width=\"472\" height=\"287\" border=\"0\" align=\"center\" cellpadding=\"1\" cellspacing=\"0\" bgcolor=\"#2d58a0\">";
                    echo "<tr>";
                      echo "<th width=\"455\" height=\"19\" scope=\"2\">&nbsp;</th>";
                      echo "<th width=\"4\" scope=\"2\">&nbsp;</th>";
                      echo "<th width=\"8\" scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" bgcolor=\"#CBD7DC\" scope=\"2\"><p class=\"Stil14\"><strong>SMS Newsletter </strong></p></th>";
                      echo "<th scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" bgcolor=\"#CBD7DC\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th rowspan=\"8\" bgcolor=\"#CBD7DC\" scope=\"2\">";
                   echo "<p align=\"left\" class=\"Stil14\">Geben Sie hier die Startnummer des gew&uuml;nschten Ironman-Teilnehmers ein. Sollten Sie die   Startnummer nicht kennen, suchen Sie diese in der Starterliste.</p>";     
                    echo "<p align=\"left\" class=\"Stil14\">&nbsp;</p>"; 
                   
                   
                      $s="<form method='POST' action='testform.php'>";
                      $s.="<input type='hidden' name='fo' value='kontrolle'>";
                      $s.="<p>Startnummer:&nbsp;<input type='text' name='fenummer' size='5'></p><br><br>";
                      $s.="<input type='submit' value='Abschicken'>&nbsp;<input type='reset' name='reset' value='Reset'>";
                      $s.="</form>";
                      echo $s;
                   
                   echo "<p class=\"Stil7 Stil19\">&nbsp;</p>";
                        echo "<p align=\"left\" class=\"Stil14\"></p>";
                     echo "<div align=\"right\">";
                          echo "<p class=\"Stil14\">&nbsp;</p>";
                          echo "<p class=\"Stil14\">";
                             echo "</div></th>";
                      echo "<th height=\"15\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                   
                    echo "<tr>";
                      echo "<th height=\"15\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"37\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                    echo "<tr>";
                      echo "<th height=\"15\" bgcolor=\"#2d58a0\" scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"2\">&nbsp;</th>";
                      echo "<th scope=\"col\">&nbsp;</th>";
                    echo "</tr>";
                  echo "</table>";
                   
                  }
                   
                  //---------------------------
                  function check_input_data()
                  {
                      $email=$_REQUEST['femail'];
                      $name=$_REQUEST['fename'];
                      $startnr=$_REQUEST['fenummer'];
                   
                      $e=false;
                   
                      if(ereg("[^0-9+\-]",$startnr))
                      { 
                   print_form();
                          exit("<h1><div align=\"right\">Die eingegebene Start Nummer ist ungültig!</div></h1>");
                      }
                      else
                      {
                    //Header("Location: testform2.php" . $_POST[$startnr]);
                    $_SESSION['startnr'] = $startnr;
                    //echo $startnr_post;
                    Header("Location: step4.php");
                    //echo $buf;
                     //sendToHost('www.google.com','get','/search','q=php_imlib');
                   //Header("Location: testform2.php?$startnr");
                   //http://www.seite.de/pfad/seite.php?var1=wert1
                      }
                  }
                  ?>
                  <html>
                  <head>
                  <title>Unbenanntes Dokument</title><style type="text/css">
                   
                  </head>
                  <body>
                  <?php
                   include('db_conn.php'); 
                   
                   //echo $startnr;
                      $sqlab = "select * from athlete where athlete.fenummer = $auswahl";
                     //$sqlab = "SELECT startnr,  firstname, lastname FROM athlete where startnr = $startnr";
                     $res = mysql_db_query("test", $sqlab);
                     //$num = mysql_num_rows($res);
                  ?>
                  </body>
                  </html>
                  hab jetzt aber trotzdem noch ein kleines problemchen.. hoffe du kannst mir hierbei behilflich sein.
                  wenn ich nun einen buchstaben eingebe, gibt er mir die fehlermeldung aus (startnummer ist ungültig). klickt man dann jedoch nochmal auf absenden - wird man trotzdem auf die nächste seite weiterverbunden. obwohl noch immer der falsche buchstabe drin ist..
                  wenn nichts eingetragen wird, wird der user auch wieder auf die nächste seite verbunden (

                  ich hoffe mir kann noch jemand weiter helfn - möchte nicht wieder den ganzen code umschreiben..
                  bitte um hilfe.. vielen dank in voraus!!!!!!!

                  Kommentar


                  • #10
                    Das ist mal sowas von unübersichtlich..
                    Du solltest Deinen Code mal etwas strukturieren und vom Ablauf so vorgehen, wie lazydog es beschreibt.
                    Erst auf Fehler checken, wenn Kein Fehler weiterleiten und exit.
                    Wenn Fehler Fehlermeldung anzeigen und Formular mit den Werten.

                    Btw. Deine Funktion check_input_data() ist nicht wirklich gut geschrieben.
                    - Funktionen immer mit parametern aufrufen und keine globals innerhalb der Funktion benutzen.
                    - Jede Funktion sollte einen Rückgabewert besitzen.
                    - Eine Funktion sollte kein echo benutzen, sondern über den oben beschriebenen Rückgabewert arbeiten.
                    - eine Funktion für eine Funktion --> eine Funktion prüft die Telefonnummer, eine die email, etc.
                    ...

                    Kommentar


                    • #11
                      Auch wenn ich nicht mit ganz allem einverstanden bin, was HPR1974 geschrieben hat, würde ich dir empfehlen, auf diese Art der Funktionen zu verzichten.
                      Aber auch sonst verstehe ich einiges nicht, was du hier machst, v.a. HTML-mässig. Das hat aber auch damit zu tun, dass ich einerseits maskierte Anführungszeichen nicht ausstehen kann, und andererseits finde, dass Formatierungsangaben in HTML-Code nichts zu suchen haben.
                      Das hat aber alles vermutlich nichts mit deinem Problem zu tun. Ich kann dir auch nicht genau sagen, warum das so ist. Ein Formular aus einer Funktion aufzurufen halte ich aber für eine sehr schlechte Idee, da das möglicherweise zu undefinierten Zuständen führen könnte. Wenn du eine Funktion aufrufst, wird diese normalerweise ausgeführt, und dann der Code nach dem Aufruf weitergeführt. Wenn aber dazwischen ein Formular abgeschickt wird, weiss ich nicht genau, was passiert.
                      Ausserdem wird ja, wenn du die Meldung «Die eingegebene Start Nummer ist ungültig!» erhälst, das Script abgebrochen. Also musst du es mindestens nochmals aufgerufen haben, um ein ähnliches Verhalten, wie das von dir geschilderte, zu erhalten.
                      Was hindert dich denn daran, dein Script so aufzubauen, wie ich es dir vorgeschlagen habe?
                      Gruss
                      L

                      Kommentar


                      • #12
                        Zitat von lazydog Beitrag anzeigen
                        Auch wenn ich nicht mit ganz allem einverstanden bin, was HPR1974 geschrieben hat...
                        Hi,

                        Ich würde nur bei dem hier widersprechen:

                        Zitat von HPR1974
                        Jede Funktion sollte einen Rückgabewert besitzen.
                        Eine Funktion sollte nur dann einen Rückgabewert haben, wenn er benötigt wird. Schließlich gibt es nicht umsonst in anderen Programmiersprachen die Möglichkeit, einer Funktion den Rückgabewert "void" zu geben.

                        Gruß Thomas

                        Kommentar


                        • #13
                          Das habe ich in erster Linie gemeint. Aber auch das mit dem echo. PHP hat selber sehr viele Funktionen, die echo verwenden (var_dump, printf, etc) und es spricht eigentlich nichts dagegen, zur Ausgabe einer bestimmten Struktur eine entsprechende Funktion zu schreiben.
                          Gruss
                          L

                          Kommentar


                          • #14
                            Void Funktion mal ausgenommen, doch die meisten eigenen Funktionen machen immer irgend etwas. Das Ergebnis dieses Tuns würde ich mir immer Rückgeben lassen auch wenn nur als boolean.


                            Was das echo angeht kann man geteilter Meinung sein, ich würde allerdings niemandem empfehlen in eigenen Funktionen Ausgaben zu erzeugen, sondern immer einen Rückgabewert zu erzeugen, der dann ausserhalb der Funktion ausgegeben wird (genau das habe ich hier getan). Mit der Vorgehensweise ist immer klar getrennt, wo die Ausgabe erfolgt und wo sie erzeugt wird.
                            Gerade bei grossen Projekten verwurstet man sich dann und das Ergebnis dieses Stils findet man in den Threads zum Beispiel hier im Forum.

                            Den Verweis auf PHP-eigene Funktionen die Ausgaben erzeugen finde ich nicht angebracht, denn dies sind eben die Funktionen die ich meine.

                            Kommentar


                            • #15
                              Hi,

                              Wenn wir von einfachen Funktionen reden, dann ist so ein Rückgabewert eigentlich immer von nöten, da sonst das Ergebnis fehlt (außer man hat eben die problemtischen "echo" Aufrufe als "Ergebnis"), oder man hat Parameter als Referenz übergeben.
                              In der OOP wirst du aber öfters auf "Void" Methoden treffen, besonders bei privaten Methoden ist ein Rückgabewert nicht zwingend nötig.

                              Gruß Thomas

                              Kommentar

                              Lädt...
                              X