2017-06-19 14 views
0

私はPHPを初めて使いました。私は次のコードを持っています:PHPフォームの検証とPOSTの変数

フォームを提出し、検証に合格するとSQL文にデータを送信します。フォームが有効な場合は、外部の成功ページにリダイレクトされます。

私が行うことはできませんが、成功のページに元の投稿変数を取得します。どうすればいいですか?私のコードは以下の通りです:

PHP:

<body> 
<?php 

$firstnameErr = $emailErr = $lastnameErr = $gradeErr = $roleErr = ""; 
$firstname = $email = $lastname = $grade = $role = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["firstname"])) { 
     $firstnameErr = "First name is required"; 
    } else { 
     $firstname = user_input($_POST["firstname"]); 
    } 

    if (empty($_POST["lastname"])) { 
     $lastnameErr = "Last mame is required"; 
    } else { 
     $lastname = user_input($_POST["lastname"]); 
    } 

    if (empty($_POST["email"])) { 
     $emailErr = "Email is required"; 
    } else { 
     $email = user_input($_POST["email"]); 
    } 

    if (empty($_POST["grade"])) { 
     $gradeErr = "Grade is required"; 
    } else { 
     $grade = user_input($_POST["grade"]); 
    } 


    if (empty($_POST["role"])) { 
     $roleErr = "Role is required"; 
    } else { 
     $role = user_input($_POST["role"]); 
    } 

    if($firstnameErr == '' && $emailErr == '' && $lastnameErr == '' && $gradeErr == '' && $roleErr == ''){ 

     $stmt = $conn->prepare("INSERT INTO `Tom`.`staff_details` (`first_name`, `surname`, `role`, `grade`,`email`) VALUES ('$firstname', '$lastname','$role', '$grade','$email');"); 
     $stmt->execute(); 
     header('Location: staff_added.php'); 
     exit(); 
    }; 

} 

function user_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

?> 

HTML:私は、私はそれらを印刷することができるようにバックstaff_added.phpページに渡って移動するためにこれらの変数を希望

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post"> 
    <fieldset> 
     <p><span class="error">* required field</span></p> 
     <label>First name:</label><input type="text" name="firstname" /> 
     <span class="error">* <?php echo $firstnameErr;?></span><br> 
     <label>Last name:</label><input type="text" name="lastname" /> 
     <span class="error">* <?php echo $lastnameErr;?></span><br> 
     <label>Role:</label><input type="text" name="role" /> 
     <span class="error">* <?php echo $roleErr;?></span><br> 
     <label>Grade:</label><input type="text" name="grade" /> 
     <span class="error">* <?php echo $gradeErr;?></span><br> 
     <label>Email:</label><input type="text" name="email" /> 
     <span class="error">* <?php echo $emailErr;?></span><br><br> 
     <input class="standard_submit" type="submit" value="Save" id="submit_search_button"> 
    </fieldset> 

</form> 

ユーザー。私はこれ以上の読書をしてきましたが、それほど意味がありません。

ご協力いただければ幸いです。

は、あなたがこのようなアプローチを見て、おそらく直接ではなく、SQLの変数を埋め込むべきであるprepared statementsを使用して、あなたに

+0

あなたはセッション中の情報の一部を保存したり、ユーザーのIDを格納するためのいずれかの必要があります成功のページであなたのデータベースからデータを読み込みます。 - それを行うには複数の方法がありますが、これらはほんの数例です。 – Epodax

+1

変数をバインドするプレースホルダを使用するのではなく、sql文に変数を直接埋め込むことで 'prepared statements'のポイントが完全に失われています – RamRaider

+0

これらの' user_input() '関数は多くの場所で使用されていますここでは、やや誤解され誤用されています。 – Qirel

答えて

1

あなたはSESSIONオブジェクト内の変数を格納することができ、その後、どこからでも利用できるようになります:

<?php 
session_start(); 
//other code... 
$_SESSION["role"] = $role; 
//other code... 
?> 
+0

確認ページでセッションの終了を宣言する必要はありますか? – Tom

+0

あなたは** session_destroy()**を使用するべきです、あなたのページでそれを呼び出すべきではないと思います。[ここをクリック](http://www.hackingwithphp.com/10/3/5/ending- a session) – Frank

+1

'$ _SESSION ['formdata'] = $ _ POST'を使って、個々のセッション変数ではなく' $ _SESSION ['formdata'] ['role'] 'などを使って要素にアクセスすることができます – RamRaider

1

ありがとうございます。

<?php 
    function user_input($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 
    $firstname = $email = $lastname = $grade = $role = false; 

    if($_SERVER["REQUEST_METHOD"] == "POST") { 
     $errors=array(); 


     if(empty($_POST["firstname"])) $errors[] = "First name is required"; 
     else $firstname = user_input($_POST["firstname"]); 


     if(empty($_POST["lastname"])) $errors[] = "Last mame is required"; 
     else $lastname = user_input($_POST["lastname"]); 


     if(empty($_POST["email"])) $errors[] = "Email is required"; 
     else $email = user_input($_POST["email"]); 


     if(empty($_POST["grade"])) $errors[] = "Grade is required"; 
     else $grade = user_input($_POST["grade"]); 



     if(empty($_POST["role"])) $errors[] = "Role is required"; 
     else $role = user_input($_POST["role"]); 


     if(empty($errors)){ 

      $stmt = $conn->prepare("INSERT INTO `Tom`.`staff_details` (`first_name`, `surname`, `role`, `grade`,`email`) VALUES (?,?,?,?,?);"); 
      if($stmt){ 
       $stmt->bind_param('sssss',$firstname,$lastname,$role,$grade,$email); 
       $stmt->execute(); 

       exit(header('Location: staff_added.php')); 
      } else { echo 'statement failed'; } 


     } else { 
      foreach($errors as $error)echo $error . '<br />'; 
     } 

    } 
?> 
+0

このコードを適用するとエラーが発生します。私の接続はPDOを使用しており、bind_paramsはPDOの定義されていないメソッドであることを伝えています – Tom

+0

bindParamが動作していました。準備されたステートメントの助けをありがとう – Tom

+0

申し訳ありません - 私の間違い〜私はあなたがPDOではなくmysqliを使用していると思った – RamRaider

関連する問題