2014-02-11 25 views
0

我正試圖使用​​此代碼來阻止預訂系統中的雙重預訂。在當您輸入相同的時間,然後兩次目前它與此錯誤出現:如果聲明中無法訪問變量

Email is validthis time is already booked 
Notice: Undefined variable: sql in C:\xampp\htdocs\book.php on line 44 

Warning: mysqli_query(): Empty query in C:\xampp\htdocs\book.php on line 44 
Error: 

這是我的代碼

<?php 

//$error = ""; // Initialize error as blank 
$con=mysqli_connect("localhost","","",""); 


if (mysqli_connect_errno($con)) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    $email = $_POST['email']; 
    $time = $_POST["time"]; 
    $name = $_POST["name"]; 
    $surname = $_POST["surname"]; 
    $date = $_POST["date"]; 
    $adl1 = $_POST["adl1"]; 
    $adl2 = $_POST["adl2"]; 
    $postcode = $_POST["postcode"]; 

    if(!filter_var(($email), FILTER_VALIDATE_EMAIL)) 
    { 
     echo "E-mail is not valid"; 
    } 
    else 
    { 
     echo "Email is valid"; 

     $result = mysqli_query($con, "SELECT time FROM tbl_booking WHERE time = '$time'") or trigger_error("Query Failed! SQL: $result - Error: ".mysqli_error($con), E_USER_ERROR); 
     if(mysqli_num_rows($result) == 0) 
     { 
      $sql="INSERT INTO tbl_booking (name, surname, email, date, time, adl1, adl2, postcode) VALUES ('$name','$surname','$email','$date','$time','$adl1','$adl2','$postcode')"; 

     } 
     else 
     { 
      echo("this time is already booked"); 
     } 

     if (!mysqli_query($con, $sql)) 
     { 
      die('Error: ' . mysqli_error($con)); 
     } 

     mysqli_close($con); 
    } 
} 

基本上,我認爲這是試圖訪問$sqlif語句中,但我不知道爲什麼它不能。除非我很愚蠢。

+1

好了,當這種情況發生'mysqli_num_ro ws($ result)!= 0'。你只在'if'中設置變量'$ sql',但是如果你進入'else',你的'$ sql'爲空,你將會得到一個錯誤。在嘗試使用'mysqli_query'之前,您應該檢查該變量是否已設置 – putvande

回答

0

SQL變量你可以重寫你的代碼,因爲在其他條件沒有查詢到mysqli_query(),這就是你得到的錯誤,

if(mysqli_num_rows($result) == 0){ 
    $sql="INSERT INTO tbl_booking (name, surname, email, date, time, adl1, adl2, postcode) VALUES ('$name','$surname','$email','$date','$time','$adl1','$adl2','$postcode')"; 
    mysqli_query($con, $sql) or die('Error: ' . mysqli_error($con)); 
} else { 
    echo("this time is already booked"); 
    } 
0

將$ sql設置爲「global」 - >你只需要在if語句之前創建它即可。

-1

嘗試在你的PHP代碼頂級聲明$ SQL值代碼不能執行

if(mysqli_num_rows($result) == 0) 
     { 
      $sql="INSERT INTO tbl_booking (name, surname, email, date, time, adl1, adl2, postcode) VALUES ('$name','$surname','$email','$date','$time','$adl1','$adl2','$postcode')"; 

     } 

這種情況下它的實際執行你的其他機構,它爲什麼產生異常$沒有定義