由于if语句,PHP表单未验证或发送?

由于if语句,PHP表单未验证或发送?,php,mysql,forms,validation,Php,Mysql,Forms,Validation,我试图通过让用户填写一份经过验证的表单来更新页面上的表。出于某种原因,当我添加validation if语句时,表单除了在用户单击“AddNew”时刷新外,不会执行任何操作。如果删除If语句,表将更新。我错过了什么 <?php session_start(); require_once "db.php"; if ( isset ($_POST['url']) && isset ($_POST['email']) && isset ($_POST['len

我试图通过让用户填写一份经过验证的表单来更新页面上的表。出于某种原因,当我添加validation if语句时,表单除了在用户单击“AddNew”时刷新外,不会执行任何操作。如果删除If语句,表将更新。我错过了什么

<?php
session_start();
require_once "db.php";

if ( isset ($_POST['url']) && isset ($_POST['email']) 
&& isset ($_POST['length']) && isset ($_POST['rating']) ) {

    //Reject empty form fields
    if (strlen($_POST['url']) < 1 || strlen($_POST['email']) <1 || strlen ($_POST['length']) <1 || strlen($_POST['rating']) < 1) {
    $_SESSION['error'] = 'All values are required';
    header('Location: add.php');
    return;
    } 

    //Reject urls that are not http or https
    $url = $_POST['url'];
    if (strpos($url,"http://") !== 0 && strpos($url, "https://") !== 0 ) {
    $_SESSION['error'] = 'Error in input data';
    header('Location: add.php');
    return;
    }

    //Reject emails without '@' symbol
    if ( strpos($_POST['email'], "@") === false ) {
    $_SESSION['error'] = 'Error in input data';
    header('Location: add.php');
    return;
    }

    //Reject track lengths or rating numbers that are too small
    if ( $_POST['length'] +0 < 1 || $_POST['rating'] +0 < 1 ) {
    $_SESSION['error'] = 'Error in input data';
    header('Location: add.php');
    return;
    }

    $sql = "INSERT INTO videos (url, email, length, rating) 
              VALUES (:url, :email, :length, :rating)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array(
            ':url' => $_POST ['url'],
            ':email' => $_POST ['email'],        
            ':length' => $_POST['length'],
            ':rating' => $_POST['rating']));
   $_SESSION['success'] = 'Record Added';
   header( 'Location: index.php' ) ;
   return;

}

?>

<p>Add A New Video</p>
<form method="post">
<p>URL:
<input type="text" name="url"></p>
<p>Email:
<input type="text" name="email"></p>
<p>Length:
<input type="text" name="length"></p>
<p>Rating:
<input type="text" name="rating"></p>
<p><input type="submit" value="Add New"/>
<a href="index.php">Cancel</a></p>
</form>

添加新视频

网址:

电邮:

长度:

评级:


我想说,使用strpos进行验证很容易出现问题。尝试使用以下正则表达式:

if (! preg_match('/[^@\s]{3,}@([-a-z0-9]{2,}\.)+[a-z]{2,}/', $_POST['e_mail'])) { $_SESSION['error'] = 'Error in input data'; }

看看下面的代码是否适合您?我稍微修改了长度和评级字段以及电子邮件字段的条件。祝你好运

<?php
session_start();
require_once "db.php";

if ( isset ($_POST['url']) && isset ($_POST['email']) 
&& isset ($_POST['length']) && isset ($_POST['rating']) ) {

    //Reject empty form fields
    if (strlen($_POST['url']) < 1 || strlen($_POST['email']) < 1 || strlen ($_POST['length']) < 1 || strlen($_POST['rating']) < 1) {
        $_SESSION['error'] = 'All values are required';
        die(header('Location: add.php'));
    } 

    //Reject urls that are not http or https
    $url = $_POST['url'];
    if (strpos($url,"http://") !== 0 && strpos($url, "https://") !== 0 ) {
        $_SESSION['error'] = 'Error in input data';
        die(header('Location: add.php'));
    }

    //Reject emails without '@' symbol
    if (FILTER_VAR($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $_SESSION['error'] = 'Error in input data';
        die(header('Location: add.php'));
    }

    //Reject track lengths or rating numbers that are too small
    if ($_POST['length'] < 1 || $_POST['rating'] < 1 || $_POST['length'] > 1000 || $_POST['rating'] > 1000) {
        $_SESSION['error'] = 'Error in input data';
        die(header('Location: add.php'));
    }

    $sql = "INSERT INTO videos (url, email, length, rating) 
              VALUES (:url, :email, :length, :rating)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array(
            ':url' => $_POST ['url'],
            ':email' => $_POST ['email'],        
            ':length' => $_POST['length'],
            ':rating' => $_POST['rating']));
   $_SESSION['success'] = 'Record Added';
   header( 'Location: index.php' ) ;

}

?>

<p>Add A New Video</p>
<form method="post">
<p>URL:
<input type="text" name="url"></p>
<p>Email:
<input type="text" name="email"></p>
<p>Length:
<input type="text" name="length"></p>
<p>Rating:
<input type="text" name="rating"></p>
<p><input type="submit" value="Add New"/>
<a href="index.php">Cancel</a></p>
</form>

添加新视频

网址:

电邮:

长度:

评级:


您的代码的反应与我的代码相同:/刷新页面,但没有捕获任何内容。如果我注释掉验证If语句,它允许我输入数据并重定向到index.php。@user3384487为什么不直接执行嵌套If。。。那还有其他声明吗?一个接一个?此外,您还需要在表单中添加action=“”属性,该值为进行处理的URL或页面名称。在这种情况下,由于您在同一页上进行处理,因此可以将该值留空。@user3384487我将使用action=“”谢谢您的建议。我做了这个更改,但并没有解决我原来的问题。您是否检查(打印)了变量的值以查看它们存储了什么?