2017-05-29 20 views
1

ですから、私はプログラミング/スクリプトHTMLにはかなり新しいです。PHP HTMLフォーム検証

私の現在のプロジェクトはPHP/HTMLです。ウェブサイトを構築するにはHTMLテンプレートが用意されていますが、PHPとJavaScriptを挿入して動作させる必要があります。 (私がログインとセキュアなページを作成する前に...)私は私がコピーして、以下のコードを修正することができW3Schoolsのではいくつかの有用な情報を見つけました

今日の問題は、私は私のウェブサイトの登録フォームを作成しています。

コードを修正するまで、ページにエラーが表示されていたことを除いて、コードは正常に機能していました。

私は、関数が実行していたとvarsが完全に他のPHPファイルからすべてのエラーを否定し、定義されていたまで、データベース処理の未定義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

あなたのonclickを持つPHP関数をロードしようとしている私には思えます。 JavaScript関数はonclickでのみ呼び出すことができます。

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

ok - 私の間違いだから、どうすれば関数をPHPのクリックでのみ実行できるようにするのですか?あるいは、関数をJSにする代わりに、PHPで 'required'エラーしかないでしょうか? –

+0

ページを更新したくない場合は、Ajaxリクエストを使用できます:onclickはAjaxリクエストをトリガします - > PHP関数をロードして実行する - > PHPレスポンスがJavaScriptに返されます。あるいは、PHPの代わりに同じページでJavaScriptを使ってチェックすることもできますが、これはあまり安全ではありません。また、あなたが助けてくれた場合は、私の答えに正しいものを記入してください:) – niandrei

+1

これは実際に私が後で解決したくない他のいくつかの問題を解決するのに役立ちます、ありがとう –