我是一个新手并试图在阅读之后实现一个简单的验证脚本,但是我看不出如何只有满足所有必需字段才会有多个只执行sql插入的Ifs。有了多个else语句,有什么语法方法可以将所有表单验证Ifs放在一起,如果其中一个失败,那么会显示正确的错误并且sql没有执行?
if(isset($_POST ['submit'])){
$user_ID = get_current_user_id();
$catErr = $ratingErr = $titleErr = $textErr = "";
if (empty($_POST["category"])) {
$catErr = "Category is required";
} else {
//DO THE INSERT BELOW!
}
if (empty($_POST["rating"])) {
$ratingErr = "Rating is required";
} else {
//DO THE INSERT BELOW!
}
if (empty($_POST["post_name"])) {
$postErr = "Title is required";
} else {
//DO THE INSERT BELOW!
}
if (empty($_POST["text"])) {
$textErr = "Text is required";
} else {
//DO THE INSERT BELOW!
}
//PDO query begins here...
$sql = "INSERT INTO forum(ID,
category,
rating,
post_name,
text
答案 0 :(得分:2)
您的问题有很多解决方案。以下是解决问题的3种方法。
您可以将所有if语句组合在一起:
if (empty($_POST['rating']) || empty($_POST'rating']) || ... ) { ... }
并用双管将它们分开。
您还可以检查整个阵列:
if (empty($_POST)) $error = "There was an error!";
您可以设置通用错误变量,然后输出它。
第三种解决方案可以保留您当前的语法,但会减少行数。您可以通过不使用括号来保存线条。您可以创建一个数组并将错误推送到数组。
注意: 您可以使用empty()
或isset()
。
// create an array to push errors to
$errors_array = array();
// if a particular field is empty then push the relevant error to the array
if(!isset($_POST['category'])) array_push($errors_array, "Category is required");
if(!isset($_POST['rating'])) array_push($errors_array, "Rating is required");
...
如果您有一个充满错误的数组,您可以像这样检查它们:
// if the array is not empty (then there are errors! don't insert!)
if (count($errors_array) > 0) {
// loop through and echo out the errors to the page
for ($i = 0; $i < count($errors_array); $i++) {
echo $errors_array[i];
}
} else {
// success! run your query!
}
答案 1 :(得分:1)
在将页面处理成帖子之前,您应该使用javascript来验证页面。这个脚本在他们点击提交并在他们离开页面之前捕获错误时将在客户端运行。
以下是关于如何执行此类操作的教程:tutorial
每个字段都有自己的验证参数和方法,它还可以使页面代码看起来更好。
答案 2 :(得分:1)
对所有错误消息使用一个变量并在分支中连接到它,所以最后如果该变量仍为空字符串,则不会执行插入操作。 (而且你不需要任何只包含注释的空的其他块。)
$err = "";
if (empty($_POST["category"])) {
$err .= "<br/>Category is required";
}
if (empty($_POST["rating"])) {
$err .= "<br/>Rating is required";
}
if (empty($_POST["post_name"])) {
$err .= "<br/>Title is required";
}
if (empty($_POST["text"])) {
$err .= "<br/>Text is required";
}
//PDO query begins here...
if($err=='')
{
$sql = "INSERT INTO forum(ID,
category,
rating,
...";
...
}
答案 3 :(得分:1)
在showdev让我这么想之后,我得到了这种方法。它可能不是很优雅,但确实有这个技巧,尽管如果有错误,所有用户都被带到一个空白页面并且它很简单地说:缺少类别(或其他)。想知道我是否可以通过那里的表单回显链接或回到页面,所以用户有一个选项,如&#34;返回并重新提交&#34;。否则,我将不得不处理并显示表格中的错误,这将需要完全不同的方法......
if(isset($_POST ['submit'])){
$errors = false;
if(empty($_POST['category'])) {
echo 'Missing category.<br>';
$errors = true;
}
if(empty($_POST['rating'])) {
echo 'Missing rating.<br>';
$errors = true;
}
if(empty($_POST['post_name'])) {
echo 'Missing title.<br>';
$errors = true;
}
if(empty($_POST['text'])) {
echo 'Missing text.<br>';
$errors = true;
}
if($errors) {
exit;
}
//然后在这里添加代码。但是,如果用户犯了错误,如果他们错过了某些东西(现在的工作原理)就会在页面上看到错误信息,那么再次显示形式
答案 4 :(得分:1)
通常,如果您发现自己反复编写非常相似的语句,使用某种循环可能是更好的方法。我认为你所说的“处理和显示表单中的错误”实际上是你需要做的,如果你希望这个过程是用户友好的。如果您将验证脚本放在包含表单的文件的顶部,那么您可以将表单提交给自己(action=""
)。如果提交成功,您可以将用户重定向到其他位置,如果没有,他们将再次看到该表单,并在有用的位置显示错误消息。
if (isset($_POST['submit'])) {
// define your required fields and create an array to hold errors
$required = array('category', 'rating', 'post_name', 'text');
$errors = array();
// loop over the required fields array and verify their non-emptiness
foreach ($required as $field) {
// Use empty rather than isset here. isset only checks that the
// variable exists and is not null, so blank entries can pass.
if (empty($_POST[$field])) {
$errors[$field] = "$field is required";
}
}
if (empty($errors)) {
// insert the record; redirect to a success page (or wherever)
}
}
// Display the form, showing errors from the $errors array next to the
// corresponding inputs