2017-05-29 96 views
1

所以我对编程/脚本HTML相当陌生。PHP HTML表单验证

我目前的项目是PHP/HTML,建立一个网站,HTML模板已经准备好了,但我需要插入PHP和JavaScript来使事情有效。

今天的问题,我创建一个登记表,我的网站(之前我创建登录和安全的网页...)

我发现在W3School一些有用的信息让我复制和修改下面的代码。

该代码工作正常,除了错误在页面上显示,直到我修复它们。

我想将php堆叠到一个函数中,以便数据库处理的未定义vars直到函数运行并且vars已被定义时才显示在页面上,完全否定了其他php文件中的任何错误。

我现在的问题是,该功能或者没有运行on click或者这些值没有返回到调试回声。

也许因为这是我的拳头不断PHP页面,我失去了一些东西,你们可以用

我检查W3Schools的&谷歌的答案,但没有帮助似乎不够详细,或者问题不是相同。

(文件名已更改和垃圾,如类&风格已为便于阅读,删除,外部文件不包括也不需要)

//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; 
    } 
?> 

我试图使用$GLOBALS['varname']从功能外调用变量和return $varname推回来回声,但我没有结果,没有错误。

这里是HTML表格,以便您知道我如何尝试移动vars

//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> 

最后我试图调试输出到我正在使用的同一页面上。一旦我完成了休息,这部分将被注释掉或删除。

//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

[从JavaScript调用PHP函数]的可能的复制(https://stackoverflow.com/questions/7165395/call-php-function-from-javascript) – Terminus

+0

谢谢你的输入,这应该帮助我向前移动 –

回答

0

在我看来,你正试图加载一个PHP函数与onclick。您只能通过onclick调用JavaScript函数。

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

好的 - 我的错误,所以,我如何让该函数只能在PHP中单击运行 - 或者我应该使该函数为JS而不是PHP中只有'required'错误? –

+0

如果您不想刷新页面,可以使用Ajax请求:onclick触发Ajax请求 - >加载并执行PHP函数 - >将PHP响应发送回JavaScript。或者,您可以在同一页面上使用JavaScript进行检查,而不是使用PHP,但这不太安全。此外,请标记我的答案是正确的,如果它帮助你:) – niandrei

+1

这实际上帮助我解决了一些其他问题,我不想解决,直到以后,谢谢 –