2016-09-22 14 views
0

私は自分のアプリにユーザーを登録しようとしていますが、年齢が存在するかどうかを確認して登録プロセスをやめ、ユーザー登録のためのコードを書きました。誰もが私のコードを逃しているものを私に伝えることができ、それがうまく機能し、まだ年齢が存在していた場合でも、登録を許可していませんcheck_age機能を使用して、登録を検証してみました:ここに は私のコードです:PHP既存の値を確認してからMYSqlに挿入

<?php 
if($_SERVER["REQUEST_METHOD"]=="POST") 
{ 
     require "init.php"; 

     creat_Student(); 
} 
function creat_Student() 
{ 
    global $con; 
    $firstname=$_POST["firstname"]; 
    $lastname=$_POST["lastname"]; 
    $age=$_POST["age"]; 

    if(strcmp(check_age(), '0') == 0) 
    { 
    $query="Insert Into student(firstname,lastname,age) values ('$firstname','$lastname','$age');"; 
    mysqli_query($con,$query); 
    mysqli_close($con); 
    } 
    else 
    echo "not true"; 

} 
function check_age() 
{ 
    global $con; 
    $age=$_POST["age"]; 
    echo " $age"; 
    $temp_arr=array(); 

    $query="SELECT * FROM student where age ='{$age}'; "; 
    $result=mysqli_query($con,$query); 
    $num_of_rows=mysqli_num_rows($result); 

    if($num_of_rows==0) 
    return '0'; 
    else 
    return '1'; 

} 
+0

少し離れているものがいくつかあります。なぜユーザー登録は年齢によって異なりますか?これのアプリケーションは何ですか?いくつかのサニタイズや準備済みのステートメントを使用する必要があります。 –

+0

'$ num_of_rows'が0より大きいかどうか確認するなど、いくつかのタスクを実行する前に、まず変数を初期化してください(ただし、この変数をどこで初期化しましたか?)。 –

+0

ああ、そしてstrcmp()???なぜ???整数をtrueとfalseに評価するのが賢明ならば、false/trueまたは0と1を返します。 –

答えて

1

だけでなく、言及は上のコメントです、必要ないくつかの消毒があります。

しかし、ここで私が提案する何..です

  1. 変更check_age()機能し、以下のようにその時代のパラメータを渡すと$num_of_rowsを返します。

    function check_age($age) 
    { 
        global $con; 
    
        $query="SELECT * FROM student where age =".$age; 
        $result=mysqli_query($con,$query); 
        return mysqli_num_rows($result); 
    } 
    
  2. 次にcreat_Student()機能にif条件が...のように

    function creat_Student() 
    { 
        global $con; 
        $firstname=$_POST["firstname"]; 
        $lastname=$_POST["lastname"]; 
        $age=$_POST["age"]; 
    
        if(!check_age($age)) 
        { 
        $query="Insert Into student(firstname,lastname,age) values ('$firstname','$lastname','$age');"; 
        mysqli_query($con,$query); 
        mysqli_close($con); 
    } 
    else 
        echo "not true"; 
    } 
    

おかげで、ジェイを変更します。

0

別のフィールドを追加しました。これをデータベースに追加し、データベース内の一意のVAR_CHARである "userName"を作成する必要があります。
本当のPHPを習得したい場合は、もっと多くのOOP版を用意してください。
DBの抽象Entityクラスを作成すると、StundentクラスがEntityを拡張し、get、insert、delete、updateなどのメソッドを持つようにデータベーステーブルを拡張することができます(いくつかのPHPフレームワークを見てください)。
ここで私はあなたのコードのための迅速かつ簡単な修正をしようとしました:

if($_SERVER["REQUEST_METHOD"]=="POST") 
{ 
    require "init.php"; 

    addStudent(); 
} 

function addStudent() 
{ 
    /** 
    * @var mysqli $conn 
    */ 
    global $conn; 
    $userName = $_POST['userName']; 
    $firstName = $_POST["firstName"]; 
    $lastName = $_POST["lastName"]; 
    $age = $_POST["age"]; 

    $query = "SELECT * FROM student WHERE username ='$userName'; "; 
    if($stmt = $conn->prepare($query)) { 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     if($result->num_rows == 0) { 
      $query = "INSERT INTO student(`firstname`, `lastname`, `age`) VALUES (?, ?, ?)"; 
      if($stmt = $conn->prepare($query)) { 
       $stmt->bind_param("ssi", $firstName, $lastName, $age); 
       $stmt->execute(); 
      } 
     } 
    } else { 
     echo "Student already registered in the database!"; 
    } 
} 
関連する問題