Php 无法访问if语句中的变量

Php 无法访问if语句中的变量,php,Php,我正试图使用此代码在我的预订系统中阻止双重预订。当您两次输入同一时间时,会出现以下错误: 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: 这是我的密码

我正试图使用此代码在我的预订系统中阻止双重预订。当您两次输入同一时间时,会出现以下错误:

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);
    }
}

基本上,我认为它试图访问if语句中的$sql,但我不知道为什么它不能。除非我很愚蠢。

将$sql设置为全局->您只需要在if语句之前创建它。

尝试在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')";

        } 

此条件实际上是在执行else主体,这就是为什么它会生成$sql变量未定义的异常

您可以将代码重写为,因为在else条件下,没有对mysqli_查询的查询,这就是为什么您会出现错误

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");
  }
当mysqli_num_rows$result!=0您只在if中设置了变量$sql,但是如果在else中设置了变量$sql,您的$sql将为null,您将得到一个错误。在尝试使用mysqli\u查询之前,应该检查是否设置了该变量