2

我使用了以下代码,但所需的 else 语句(在底部)不起作用,为什么?当 make 输入为空时,我试图回显“make is required”。

if ( isset($_POST['make']) && isset($_POST['year']) && isset($_POST['mileage'])){    
 if(is_numeric($_POST['year'])&&is_numeric($_POST['mileage']){
   $sql = "INSERT INTO autos (make,year, mileage)  VALUES (:make, :year, :mileage)";
   $stmt = $pdo->prepare($sql);
   $stmt->execute(array(
     ':make' => $_POST['make'],
     ':year' => $_POST['year'],
     ':mileage'=> $_POST['mileage']));
     }
     else
        echo"Year and mileage should be numeric";
     }
    else
    echo"make is required";//Not working
4

2 回答 2

0

全部makeyear并且mileage必须为空才能显示"make is required",因为您当前已经编写了第一个if语句。

尝试:

if (!empty($_POST['make'])) {
    $year = (!empty($_POST['year'])) ? $_POST['year'] : NULL;
    $mileage = (!empty($_POST['mileage'])) ? $_POST['mileage'] : NULL;

    if (($year == NULL || is_numeric($year)) && ($mileage == NULL || is_numeric($mileage))) {
        $sql = 'INSERT INTO autos (make, year, mileage) VALUES (:make, :year, :mileage)';
        $stmt = $pdo->prepare($sql);
        $stmt->execute(array(
            ':make' => $_POST['make'],
            ':year' => $year,
            ':mileage'=> $mileage
        ));
    }
    else
        echo 'Year and mileage should be numeric';
}
else
    echo 'make is required';

两者yearmileage必须为空或(已定义和数字)。如果第 2 行和第 3 行的语法令人困惑,请查找三元条件。

于 2020-07-26T06:10:59.600 回答
0

它可能会帮助你。如果没有,请告诉我。我会在这里为您提供帮助。即使请求为空,isset() 也会为真。因此,请改用 !empty()

if ( ! empty($_POST['make']) && ! empty($_POST['year']) && ! empty($_POST['mileage'])) {

    if (is_numeric($_POST['year']) && is_numeric($_POST['mileage'])) {
        $sql = "INSERT INTO autos (make,year, mileage)  VALUES (:make, :year, :mileage)";
        $stmt = $pdo->prepare($sql);
        $stmt->execute(array(':make'    => $_POST['make'],
                             ':year'    => $_POST['year'],
                             ':mileage' => $_POST['mileage']));
    } else {
        echo "Year and mileage should be numeric";
    }
} else {
    echo "make is required";
}
于 2020-07-26T06:15:17.990 回答