由于if语句,PHP表单未验证或发送?
我试图通过让用户填写一份经过验证的表单来更新页面上的表。出于某种原因,当我添加validation if语句时,表单除了在用户单击“AddNew”时刷新外,不会执行任何操作。如果删除If语句,表将更新。我错过了什么由于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
<?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=“”谢谢您的建议。我做了这个更改,但并没有解决我原来的问题。您是否检查(打印)了变量的值以查看它们存储了什么?