2017-05-29 3 views
1

so bin ich ziemlich neu in der Programmierung/Scripting HTML.PHP HTML Form Validation

Mein aktuelles Projekt ist PHP/HTML, ich erstelle eine Website, die HTML-Templates sind vorbereitet, aber ich muss PHP und JavaScript einfügen, damit die Dinge funktionieren.

Ausgabe von heute, ich bin ein Anmeldeformular für meine Website erstellen (bevor ich das Login und sichere Seiten erstellen ...)

ich einige nützliche Informationen bei w3schools gefunden mir erlaubt, den Code unten zu kopieren und ändern .

Der Code war in Ordnung, außer Fehler wurden auf der Seite angezeigt, bis ich sie behoben habe.

Ich wollte den PHP in eine Funktion stapeln, so dass undefinierte vars der Datenbankbehandlung auf der Seite nicht angezeigt wurde, bis die Funktion ausgeführt und vars definiert wurde, alle Fehler aus den anderen PHP-Dateien vollständig negiert.

Mein Problem ist jetzt, dass die Funktion entweder on click nicht ausgeführt wird oder die Werte nicht zum Debuggen zum Echo zurückgegeben werden.

vielleicht, da dies meine Faust ist immer PHP-Seite fehlt mir etwas euch mit

helfen könnte ich w3schools & Google nach Antworten, aber nichts überprüft haben scheint detailliert genug zu werden, oder das Problem ist nicht die gleich.

(Dateinamen geändert wurden und Junk wie Klassen & Stile zur besseren Lesbarkeit, externe Dateien nicht enthalten noch erforderlich entfernt wurden)

//PHP>Register page> php placed before form html 
<?php 
    //define variables 
     //error var 
    $usernameErr = $emailErr = $passwordErr = $repeatpassErr = ""; 
     //transferable vars 
    $username = $email = $password = $repeatpass = ""; 

    //create session manager 
     function session_reg(){ 
     //Start session registration 
     session_start(); 
     //require push file 
     require 'secure-sql.php'; 
     //confirm request method 
      if($_SERVER['REQUEST_METHOD'] == "POST"){ 
      //confirm fields are populated 
      if(empty($_POST["username"])) { 
        //if empty error 
      $usernameErr = "Name is required"; 
      }else { 
      //else confirm input and check restrictions 
       $username = test_input($_POST["username"]); 
       // check if name only contains letters and whitespace 
       if (!preg_match("/^[a-zA-Z0-9 ]*$/",$username)) { 
         $usernameErr = "Only letters and white space allowed"; 
       } 
      } 
      //confirm fields are populated 
      if(empty($_POST["email"])) { 
       $emailErr = "Email is required"; 
      }else { 
       $email = test_input($_POST["email"]); 
       // check if e-mail address is well-formed 
       if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
        $emailErr = "Invalid email format"; 
       } 
      } 
      //confirm fields are populated 
      if(empty($_POST["password"])){ 
       $passwordErr = "Must enter a password"; 
      }else{ 
       $password = test_input($_POST["password"]); 
      } 
      //confirm fields are populated 
      if(empty($_POST["repeatpass"])){ 
       $repeatpassErr = "Must repeat your password"; 
      }else{      
       $repeatpass = test_input($_POST["repeatpass"]); 
      } 
     } 
     //compare password and repeat are the same 
     if ($password === $repeatpass){ 
      //db_quote to secure from injection 
      $username = db_quote($_POST['username']); 
      $email = db_quote($_POST['email']); 
      $password = db_quote($_POST['password']); 
//section is a work in progress, shouldn't be required for local debugging 
      //query db for usernames and emails to avoid dupes 
      //db_query() 
      //insert into db 
     }else{ 
      //or return password error 
      $passwordErr = "passwords must be the same"; 
     } 
    } 
    function test_input($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 
?> 

ich versuchte $GLOBALS['varname'] zu verwenden, um die Variablen rufen von außerhalb der Funktion und return $varname, um es zurück für Echo, aber ich habe keine Ergebnisse, keine Fehler.

Hier ist das HTML-Formular, so dass Sie wissen, wie ich versuche, vars um zu bewegen.

//PHP> Register Page>After PHP Functions 
<h2>Register</h2> 
<h6>* Required field<h6> 
     <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
     <table class='reg-table' style='align-content:center;'> 
      <tr> 
       <td>Username:</td> 
       <td><input size='20' type="text" name="username" value='<?php echo $username;?>'><span>* <?php echo $usernameErr;?></span></td> 
      </tr> 
      <tr> 
       <td>E-mail:</td> 
       <td><input type="text" name="email" value='<?php echo $email;?>'><span>* <?php echo $emailErr;?></span></td> 
      </tr> 
      <tr> 
       <td>Password:</td> 
      <td><input pattern=".{5,}" required title="5 characters minimum" type="password" name="password" ><span>* <?php echo $passwordErr;?></span></td> 
      </tr> 
      <tr> 
       <td>Repeat Password:</td> 
       <td><input type="password" name="repeatpass"><span>* <?php echo $passwordErr;?></span></td> 
      </tr> 
      <tr> 
       <td></td> 
      <td class="g-recaptcha" required></tr> 
      </tr> 
      <tr> 
       <td></td> 
       <td><input onclick="session_reg()" type="submit" name="submit" value="Register"></td> 
      </tr> 
     </table> 
    </form> 

Endlich versuche ich die Ausgänge auf die gleiche Seite zu debuggen, mit der ich arbeite. Sobald ich die Pausen fertig gestellt habe, wird dieser Abschnitt auskommentiert oder entfernt.

//debug output 
    echo "<h3>var outputs</h3>"; 
    echo "<br>"; 
    echo $username; 
    echo "<br>"; 
    echo $usernameErr; 
    echo "<br>"; 
    echo $email; 
    echo "<br>"; 
    echo $emailErr; 
    echo "<br>"; 
    echo $password; 
    echo "<br>"; 
    echo $passwordErr; 
    echo "<br>"; 
    echo "<h3>end debug</h3>"; 
    ?> 
+0

Mögliche Duplikat [Anruf PHP-Funktion von Javascript] (https://stackoverflow.com/questions/7165395/call-php-function-from-javascript) – Terminus

+0

Sie für die Eingabe danken, das mir helfen sollte, vorwärts bewegen –

Antwort

0

Es scheint mir, Sie versuchen, eine PHP-Funktion mit onclick zu laden. Sie können JavaScript-Funktionen nur mit onclick aufrufen.

<td><input onclick="session_reg()" type="submit" name="submit" value="Register"></td> 
+0

ok - mein Fehler, also, wie würde ich zulassen, dass die Funktion nur auf Klick in PHP läuft - oder sollte ich die Funktion zu einem JS machen und nur die 'erforderlichen' Fehler in PHP haben? –

+0

Sie können eine Ajax-Anfrage verwenden, wenn Sie die Seite nicht aktualisieren wollen: onclick löst die Ajax-Anfrage aus -> die lädt und führt die PHP-Funktion aus -> die PHP-Antwort wird zurück an JavaScript gesendet. Oder ja, Sie können die Überprüfung mit JavaScript auf der gleichen Seite statt PHP, aber das ist weniger sicher. Auch, bitte markieren Sie meine Antwort als richtig, wenn es Ihnen geholfen hat :) – niandrei

+1

das hilft mir tatsächlich ein paar andere Probleme zu lösen, die ich nicht später angehen wollte, danke –