2017-01-18 1 views
0

データがすでに入力されているかどうかを確認したいデータベースがあります。ユーザーはフォームを使用してデータを入力することができ、表にOKが追加されます。しかし、私はデータベースを見て、重複を見ることができるようにチェックが行われていないかのように思えます。ここでSQLとPHPを使用して特定のデータがすでにテーブルに入っているかどうかを調べる

は私が作るしようとしていますチェックです:ステートメントはスキップされているとちょうどdupliateさに関係なく、それのテーブルにデータを追加し続けている場合や、

$sqlCheck = "SELECT ActivID, DateRequired, TimeRequired FROM activBooking WHERE ActivID = '$_POST[ActivID]' AND DateRequired = '$_POST[DateRequired]' AND TimeRequired = '$_POST[TimeRequired]'"; 

if($sqlCheck->num_rows > 0) { 
    echo "Sorry, this time slot is unavailable for this activity"; 
} else { 
    $sql = "INSERT INTO activBooking (CustomerID, ActivID, DateRequired, TimeRequired) VALUES ('$_POST[CustomerID]','$_POST[ActivID]','$_POST[DateRequired]','$_POST[TimeRequired]')"; 

    if ($conn->query($sql) === TRUE) { 
     echo "New record created successfully"; 
     echo "Press back to return"; 
    } else { 
     echo "Error" . $sql . "<br>" . $conn->error; 
    } 
} 

はしかし、それは最初にあるかのように見えますない。

ありがとうございました!

+0

$ conn-> query($ sqlCheck)を使用して$ sqlCheck-> num_rowsより前にクエリを実行します。 –

答えて

0

は..あなたが最初のクエリを実行していないコードの下

$sqlCheck = "SELECT ActivID, DateRequired, TimeRequired FROM activBooking WHERE ActivID = '$_POST[ActivID]' AND DateRequired = '$_POST[DateRequired]' AND TimeRequired = '$_POST[TimeRequired]'"; 

$sqlCheck = $conn->query($sqlCheck); //execute before counting num rows 

if($sqlCheck->num_rows > 0) { 
    echo "Sorry, this time slot is unavailable for this activity"; 
} else { 
    $sql = "INSERT INTO activBooking (CustomerID, ActivID, DateRequired, TimeRequired) VALUES ('$_POST[CustomerID]','$_POST[ActivID]','$_POST[DateRequired]','$_POST[TimeRequired]')"; 

    if ($conn->query($sql) === TRUE) { 
     echo "New record created successfully"; 
     echo "Press back to return"; 
    } else { 
     echo "Error" . $sql . "<br>" . $conn->error; 
    } 
} 
0

使用を返す行の数をチェックする前にクエリを実行します。私はあなたをお勧めすることができ

$sqlCheck = "SELECT ActivID, DateRequired, TimeRequired FROM activBooking WHERE ActivID = '$_POST[ActivID]' AND DateRequired = '$_POST[DateRequired]' AND TimeRequired = '$_POST[TimeRequired]'"; 
 
$result=$conn->query($sqlCheck); 
 
if($result->num_rows > 0) { 
 
    echo "Sorry, this time slot is unavailable for this activity"; 
 
} else { 
 
    $sql = "INSERT INTO activBooking (CustomerID, ActivID, DateRequired, TimeRequired) VALUES ('$_POST[CustomerID]','$_POST[ActivID]','$_POST[DateRequired]','$_POST[TimeRequired]')"; 
 

 
    if ($conn->query($sql) === TRUE) { 
 
     echo "New record created successfully"; 
 
     echo "Press back to return"; 
 
    } else { 
 
     echo "Error" . $sql . "<br>" . $conn->error; 
 
    } 
 
}

0

一つ。うまくいけば、CustomerIDが主キーです。今度は、ActivID、DateRequired、TimeRequiredを一意のキーにしてください。

その後、次のクエリを実行します。

INSERT IGNORE INTO activBooking (CustomerID, ActivID, DateRequired, TimeRequired) VALUES ('$_POST[CustomerID]','$_POST[ActivID]','$_POST[DateRequired]','$_POST[TimeRequired]')" 

これは、レコードがテーブルに存在しない場合にのみ挿入されるようになりました。

これでphp変数で結果をキャッチして、挿入されているかどうかを確認できます。それに応じてアラートなどを生成します。

0
$sqlCheck = "SELECT ActivID, DateRequired, TimeRequired FROM activBooking WHERE ActivID = '$_POST[ActivID]' AND DateRequired = '$_POST[DateRequired]' AND TimeRequired = '$_POST[TimeRequired]'"; 

$query=mysqli_query($sqlCheck,$con); //$con=your connection setting 
$num=mysqli_num_rows($query); 
if($num > 0) { 
echo "Sorry, this time slot is unavailable for this activity"; 
} else { 
$sql = "INSERT INTO activBooking (CustomerID, ActivID, DateRequired, TimeRequired) VALUES ('$_POST[CustomerID]','$_POST[ActivID]','$_POST[DateRequired]','$_POST[TimeRequired]')"; 

if($sql){ 
echo "Data Entered"; 
} 
else{ 
    echo "Problem while entering new data"; 
} 
} 
関連する問題