PHP错误处理,表单正在提交


PHP error handling, form is submitting anyway?

我有下面的代码。我希望它停止脚本并在三个选定的输入字段旁边显示错误。但是,当您将其中一个必填字段留空并点击提交时,表单仍会进行处理。如果我用die()替换开头的$error[],它会正常停止,但当我试图在表单页面上显示它们时,它就不起作用,并提交/运行查询。非常感谢您的帮助!

<?php 

if(!empty($_POST)) 
{
    // If there was an $error, keep submitted values
    $submitted_firstname = htmlentities($_POST['firstname'], ENT_QUOTES, 'UTF-8'); 
    $submitted_lastname = htmlentities($_POST['lastname'], ENT_QUOTES, 'UTF-8');
    $submitted_phone1 = htmlentities($_POST['phone1'], ENT_QUOTES, 'UTF-8'); 
    $submitted_phone2 = htmlentities($_POST['phone2'], ENT_QUOTES, 'UTF-8'); 
    $submitted_ext1 = htmlentities($_POST['ext1'], ENT_QUOTES, 'UTF-8'); 
    $submitted_ext2 = htmlentities($_POST['ext2'], ENT_QUOTES, 'UTF-8'); 
    $submitted_email = htmlentities($_POST['email'], ENT_QUOTES, 'UTF-8'); 
    $submitted_street = htmlentities($_POST['street'], ENT_QUOTES, 'UTF-8'); 
    $submitted_city = htmlentities($_POST['city'], ENT_QUOTES, 'UTF-8'); 
    $submitted_zip = htmlentities($_POST['zip'], ENT_QUOTES, 'UTF-8'); 

// Ensure that the user has entered a non-empty firstname, lastname, and one phone
if(empty($_POST['firstname'])) 
{ 
    $errors['addcust_fname'] = '* First name required';
} 
if(empty($_POST['lastname'])) 
{ 
    $errors['addcust_lname'] = '* Last name required';
} 
if(empty($_POST['phone1'])) 
{ 
    $errors['addcust_phone'] = '* One phone required';
} 

    $state = $_POST['state'];
    $query = " 
        INSERT INTO customers ( 
            firstname, 
            lastname,
            phone1,
            phone2,
            ext1,
            ext2,
            email,
            street,
            city,
            state,
            zip,
            joindate 
        ) VALUES ( 
            :firstname, 
            :lastname, 
            :phone1, 
            :phone2, 
            :ext1, 
            :ext2, 
            :email, 
            :street, 
            :city, 
            :state, 
            :zip, 
            NOW() 
        ) 
    "; 
    $query_params = array( 
        ':firstname' => $_POST['firstname'], 
        ':lastname' => $_POST['lastname'], 
        ':phone1' => $_POST['phone1'], 
        ':phone2' => $_POST['phone2'], 
        ':ext1' => $_POST['ext1'], 
        ':ext2' => $_POST['ext2'], 
        ':email' => $_POST['email'], 
        ':street' => $_POST['street'], 
        ':city' => $_POST['city'], 
        ':state' => $_POST['state'], 
        ':zip' => $_POST['zip'] 
    ); 
    try 
    { 
        // Execute the query to create the user 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to run query: " . $ex->getMessage()); 
    } 
    // This redirects the user back to the login page after they register 
    header("Location: main.php"); 
    die("Redirecting to main.php"); 
    }  
?> 
<?php include('common/header2.php'); ?>
<body align="center">
<div align="center">
<div id="header">
<div id="logo"><h1><span><?php echo($company); ?></span><em>/</em><strong>Portal</strong></h1></div>
<div><span id="tick2"></span></div>
<div><?php echo date("Y/m/d"); ?></div>
</div>
<?php 
// Get top menu
require("common/top_menu.php");
?>
<div style="height: auto" id="main-content-section">
<h2>Add New Customer</h2> 
<div align="center" id="addcustdiv">
<form action="add_customer.php" method="post"> 
First Name: <input class="search-input" type="text" name="firstname" value="    <?php echo $submitted_firstname; ?>" /> <?php if($_POST &&     isset($errors['addcust_firstname'])) { echo $errors['addcust_firstname'] ; } ?>
<br><br>Last Name: <input class="search-input" type="text" name="lastname"     value="<?php echo $submitted_lastname; ?>" /> <?php if($_POST &&     isset($errors['addcust_lastname'])) { echo $errors['addcust_lastname'] ; } ?>
<br><br>Phone 1: <input class="search-input" size="10" type="text"     name="phone1" value="<?php echo $submitted_phone1; ?>" /> Ext: <input     class="search-input" size="3" type="text" name="ext1" value="<?php echo     $submitted_ext1; ?>" /> <?php if($_POST && isset($errors['addcust_phone'])) {     echo $errors['addcust_phone'] ; } ?>
<br><br>Phone 2: <input class="search-input" size="10" type="text"     name="phone2" value="<?php echo $submitted_phone2; ?>" /> Ext: <input     class="search-input" size="3" type="text" name="ext2" value="<?php echo     $submitted_ext2; ?>" /> 
<br><br>E-Mail: <input class="search-input" type="text" name="email" value="    <?php echo $submitted_email; ?>" /> 
<br><br>Street: <input class="search-input" type="text" name="street"     value="<?php echo $submitted_street; ?>" /> 
<br><br>City: <input class="search-input" type="text" name="city" value="<?    php echo $submitted_city; ?>" /> State: <select class="search-input"     name="state">
  <option value="CT">CT</option>
  <option value="AL">AL</option>
  <option value="AK">AK</option>
  <option value="AZ">AZ</option>
  <option value="AR">AR</option>
  <option value="CA">CA</option>
  <option value="CO">CO</option>
  <option value="CT">CT</option>
  <option value="DE">DE</option>
  <option value="FL">FL</option>
  <option value="GA">GA</option>
  <option value="HI">HI</option>
  <option value="ID">ID</option>
  <option value="IL">IL</option>
  <option value="IN">IN</option>
  <option value="IA">IA</option>
  <option value="KS">KS</option>
  <option value="KY">KY</option>
  <option value="LA">LA</option>
  <option value="ME">ME</option>
  <option value="MD">MD</option>
  <option value="MA">MA</option>
  <option value="MI">MI</option>
  <option value="MN">MN</option>
  <option value="MS">MS</option>
  <option value="MO">MO</option>
  <option value="MT">MT</option>
  <option value="NE">NE</option>
  <option value="NV">NV</option>
  <option value="NH">NH</option>
  <option value="NJ">NJ</option>
  <option value="NM">NM</option>
  <option value="NY">NY</option>
  <option value="NC">NC</option>
  <option value="ND">ND</option>
  <option value="OH">OH</option>
  <option value="OK">OK</option>
  <option value="OR">OR</option>
  <option value="PA">PA</option>
  <option value="RI">RI</option>
  <option value="SC">SC</option>
  <option value="SD">SD</option>
  <option value="TN">TN</option>
  <option value="TX">TX</option>
  <option value="UT">UT</option>
  <option value="VT">VT</option>
  <option value="VA">VA</option>
  <option value="WA">WA</option>
  <option value="WV">WV</option>
  <option value="WI">WI</option>
  <option value="WY">WY</option>
  <option value="DC">DC</option>
</select>
<br><br>Zip: <input class="search-input" type="text" name="zip" value="<?php      echo $submitted_zip; ?>" /> 
<br><br><input type="submit" width="20" class="login-submit" value="Add         Customer" /> 
</form>
</div>
</div>
<?php include('common/footer.php') ?>

将所有表单处理置于if条件下,该条件将检查错误数组长度:

if(!count($errors)) {
    // do your form processing
    // This redirects the user back to the login page after they register 
    header("Location: main.php"); 
    die("Redirecting to main.php");
}

请确保通过将$errors变量设置为数组来初始化它,否则会出现错误($errors = array())。

您可以检查$errors大小,如果它是空的,则运行sql命令:

if(sizeof($errors)<1){
    $state = $_POST['state'];
    //run SQL commands ...
    die("Redirecting to main.php"); 
}
//rest of the code