Conditional statement is not Working in php

Viewed 59

I used the following code, but the required else statement (at the bottom) is not working ,why?I am trying to echo"make is required" when the make input is empty.

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
2 Answers

All of make, year and mileage have to be empty in order to display "make is required", as you've currently written the first if statement.

Try:

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';

Both year and mileage have to either be empty or (defined and numeric). If the syntax on line 2 and 3 is confusing, look up ternary conditions.

It may help you. If not, let me know. I will be here to help you. isset() will be true even the request is empty. So, use !empty() instead

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";
}
Related