我正在开发一个PHP项目,我有一个名为login.php的文件。此文件包含一个HTML代码,该代码基本上由一个包含2个输入(用于电子邮件和密码)和提交按钮的表单组成。在HTML之前有一个PHP脚本,用于检查输入是否有效(非空,用户存在于数据库中)。我使用隐藏的输入字段(称为formsubmitted)来检查用户是否按下了提交按钮。如果值有效,那么PHP脚本会将用户重定向到主页,否则,PHP脚本会打印一个HTML div,我在其中存储错误消息,然后是表单的HTML。
我想只打印错误div,而不是HTML的其余部分,为此我可以使用exit()函数。现在我不知道这是不是一个好习惯,我搜索过网络但没有找到任何有用的东西。如果有人能告诉我是否可以这样做,我将不胜感激。 谢谢!
以下是我的代码简要介绍的方式:
<?php
if (isset($_POST['formsubmitted'])) {
//check if the email and password are valid
if (valid) {
header("Location:home.php");
} else {
echo "<div id='error-section'>";
echo "message";
echo "</div>"
}
}
exit();
?>
<!DOCTYPE html>
<html>
...............
</html>
答案 0 :(得分:5)
回答你的问题:我个人不会在你的代码中的任何地方使用exit()
语句(除非它是在REST API echo(json_encode(array())
echo语句之后。)它只会导致随着调试错误,很多头疼。
(它还可以打破\ob_*()\
调用以及大多数框架的显示模块 - 因为框架无法获得它的回应语句。)
我的表单中总是有一个.errors
div:
<?php if (isset($errors) && !empty($errors): ?>
<?php foreach ($errors as $error): ?>
<div class="alert alert-danger" role="alert">
<strong>Error: </strong> <?php echo $error['message'] ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
<form>
<!--- form here -->
</form>
通过这种方式,您只需将$errors
数组传递到表单中,所有内容都可以正常运行,您可以避免使用exit()
- 使用exit()
有时间和地点,但是因为它没有给你一个消息或记录任何东西,以后调试可能是一种巨大的痛苦。
作为结束语,此方法允许您将数组传递给错误,如下所示:
array(
'first_name' => 'First Name Required',
'last_name' => 'Last Name Required',
'zip_code' => 'Must enter a valid zip code'
)
这使您可以在渲染表单时在输入字段中添加.error
类,这将有助于您的用户找到哪个输入存在问题 - 总是很好:
<input id="first_name" type="text" class="my_input_class<?php (isset($errors) && isset($errors['first_name'])) ? ' error' : '' ?>">
答案 1 :(得分:1)
试试这个:(更新)
<?php
if (isset($_POST['formsubmitted'])) {
//check if the email and password are valid
if (valid) {
header("Location:home.php");
} else {
die("<html>
<head>
<!-- ADD STUFF HERE IF YOU WANT-->
</head>
<body>
<div id='error-section'>message</div>
</body>
</html>");
//you can use exit if you want too
}
}
?>
<!DOCTYPE html>
<html>
...............
</html>
答案 2 :(得分:0)
最佳做法是显示带有错误消息的表单,以便用户有机会再试一次。无效凭证可能有多种含义。在任何情况下,您都不应该只为用户显示错误消息和死胡同。提供有意义的错误消息,并有机会再试一次。