2016-04-06 6 views
0

データベースの検証が正常に動作しています。既に登録されているユーザーがいる場合、「ユーザー」テーブルは更新されません。しかし、$ error_message変数はエラーメッセージ文字列を表示しません。ここに私のコードは次のとおりです。error_message変数がフォーム送信時に文字列値を表示しない

HTML/PHP:フォームが送信された後

// Collect and validate user inputs 
if($_SERVER["REQUEST_METHOD"] == "POST") { 
    session_start(); 
    $forename = trim(filter_input(INPUT_POST,"user_forename",FILTER_SANITIZE_STRING)); 
    $surname = trim(filter_input(INPUT_POST,"user_surname",FILTER_SANITIZE_STRING)); 
    $gender = trim(filter_input(INPUT_POST,"user_gender",FILTER_SANITIZE_STRING)); 
    $email = trim(filter_input(INPUT_POST,"user_email",FILTER_SANITIZE_EMAIL)); 
    $password = trim(filter_input(INPUT_POST,"user_password")); 
    $city = trim(filter_input(INPUT_POST,"user_city")); 
    $team = trim(filter_input(INPUT_POST,"user_team",FILTER_SANITIZE_STRING)); 
    $bio = trim(filter_input(INPUT_POST,"user_bio",FILTER_SANITIZE_SPECIAL_CHARS)); 
    $human = trim(filter_input(INPUT_POST,"user_human",FILTER_SANITIZE_STRING)); 

    $userExist = mysql_query("SELECT * FROM User WHERE U_Email='$email'"); 

    if($forename == "" || $surname == "" || $email == "" || $password == "" 
|| $city == "" || $team == "" || $bio == "" || $human == "") { 
    $error_message = "Please fill in all form fields"; 
    } 

    if (!isset($error_message) && !filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    $error_message = "$email is a not a valid email address"; 
    } 

    if (!isset($error_message) && (mysql_num_rows($userExist) > 0)) { 
    $error_message = "$email is already taken!"; 
    } 

    if(!isset($error_message)) { 
     $sql = $db->query("INSERT INTO User (U_Forename, U_Surname, U_Gender, U_Email, U_Password, U_City, U_Team, U_Biography) 
     VALUES('{$forename}', '{$surname}', '{$gender}', '{$email}', '{$password}', '{$city}', '{$team}', '{$bio}')"); 

     // header('Location: index.php'); 
    } 
} 

    <div class="wrapper"> 
      <h1>Register, it's free!</h1> 
      <div> 
      <?php 
      if (isset($error_message)) { 
       echo "<h2>".$error_message."</h2>"; 
      } 
      ?> 
      </div> 

エラーメッセージは表示されません。さらに、私はPHPのエラーを受け取っていないので、私は何が問題なのかよく分かりません。

どのような提案も素晴らしいでしょう。

ありがとう、ジェームズ。

+0

mysqlの代わりにmysqliを使用してください。しかし、これは理由ではありません。 –

+0

すべての変数を表示するだけです。 –

+0

[Little Bobby](http://bobby-tables.com/)は、[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-injection-in-php)を実行します。 –

答えて

2

mysqliとSQLインジェクションについて覚えておいてください。

この拡張機能はPHP 5.5.0で廃止され、PHP 7.0.0では が削除されました。代わりに、MySQLiまたはPDO_MySQLの拡張子は でなければなりません。

mysqli::real_escape_string - mysqli_real_escape_string - SQL文で使用する文字列内の特殊文字をエスケープし、 を接続の現在の文字セットとみなします。

注: ::接続が開いていない場合、mysqli_real_escape_string()は空の文字列を返します。

SQLインジェクションは、悪意のあるユーザーがWebページ入力を介してSQL文にSQL コマンドを挿入できる手法です。

注入されたSQLコマンドは、SQL文を変更してWebアプリケーションのセキュリティを脅かす可能性があります。

<?php 
    /* Attempt MySQL server connection. Assuming you are running MySQL 
    server with default setting (user 'root' with no password) */ 
    $conn = mysqli_connect("localhost", "root", "", "demo"); 

    // Check connection 
    if($conn === false){ 
     die("ERROR: Could not connect. " . mysqli_connect_error()); 
    } 


    if(isset($_POST['user_forename']) && strlen(trim($_POST['user_forename']) > 0)) 
{ 

} 
else 
{ 
    $error_message = "Please enter forename"; 
} 

if(isset($_POST['user_surname']) && strlen(trim($_POST['user_surname']) > 0)) 
{ 
    $surname = trim($_POST['user_surname']); 
} 
else 
{ 
    $error_message = "Please enter surname"; 
} 

if(isset($_POST['user_gender']) && strlen(trim($_POST['user_gender']) > 0)) 
{ 
    $gender = trim($_POST['user_gender']); 
} 
else 
{ 
    $error_message = "Please enter gender"; // if it is an input field. 
} 


if(isset($_POST['user_email']) && strlen(trim($_POST['user_email']) > 0)) 
{ 
    if(filter_var(trim($_POST['user_email']), FILTER_VALIDATE_EMAIL)) 
{ 
    $mail = trim($_POST['user_gender']); 
} 
else 
{ 
    $error_message = "Please enter valid email"; 
} 
} 
else 
{ 
    $error_message = "Please enter email"; 
} 

if(isset($_POST['user_password']) && strlen(trim($_POST['user_password']) > 0)) 
{ 
    $password = trim($_POST['user_password']); 
} 
else 
{ 
    $error_message = "Please enter password"; 
} 

if(isset($_POST['user_city']) && strlen(trim($_POST['user_city']) > 0)) 
{ 
    $city = trim($_POST['user_city']); 
} 
else 
{ 
    $error_message = "Please enter city"; 
} 

if(isset($_POST['user_bio']) && strlen(trim($_POST['user_bio']) > 0)) 
{ 
    $bio = trim($_POST['user_bio']); 
} 
else 
{ 
    $error_message = "Please enter Biography"; 
} 


    // Escape user inputs for security 
    $forename = mysqli_real_escape_string($conn, $forename); 
    $surname = mysqli_real_escape_string($conn, $surname); 
    $gender = mysqli_real_escape_string($conn, $gender); 
    $email = mysqli_real_escape_string($conn, $email); 
    $password = mysqli_real_escape_string($conn, $password); 
    $city = mysqli_real_escape_string($conn, $city); 
    $team = mysqli_real_escape_string($conn, $team); 
    $bio = mysqli_real_escape_string($conn, $bio); 


// checking existing email 

    if ($emailcheckquery = mysqli_query($conn, "SELECT * FROM User WHERE U_Email='$email'")) 
{ 
    if(mysqli_num_rows($emailcheckquery) > 0) 
    { 
     $error_message = "email is already taken!"; 
    }  
} 

if(!isset($error_message)) 
{ 
    // attempt insert query execution 
    $insertsql = "INSERT INTO persons (U_Forename,U_Surname,U_Gender, U_Email,U_Password,U_City,U_Team,U_Biography) VALUES ('$forename', '$surname','$gender',$email,$password,$city,$team,$biography)"; 
    if(mysqli_query($conn, $sql)){ 
     echo "Records added successfully."; 
    } else{ 
     echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
    } 
} 


    // close connection 
    mysqli_close($conn); 
    ?> 






    <div class="wrapper"> 
    <h1>Register, it's free!</h1> 
     <div> 
       <?php 
       if (isset($error_message)) { 
        echo "<h2>".$error_message."</h2>"; 
       } 
       ?> 
     </div> 
    </div> 
関連する問題