从登录表单系统中的单独文件执行 PHP 错误消息的问题
Posted
技术标签:
【中文标题】从登录表单系统中的单独文件执行 PHP 错误消息的问题【英文标题】:Issue with executing a PHP error message from a separate file in a login form system 【发布时间】:2014-01-07 20:36:06 【问题描述】:我正在运行 php 5.5.3。本质上,我有一个网页 [djaccess.php],上面有一个简单的登录表单,它与 mysql 数据库连接(当前位于其中的一个用户名和密码):
<form action="login.php" method="POST" >
<p>Username</p><input type="text" name="usernameInput" /><br />
<p>Password</p><input type="password" name="passwordInput" /><br />
<input type="submit" name="buttonSubmit" value="Login to DJ Access" class="submitButton"/>
<?php
include ('login.php');
if($error) ?><h2 class="error"> There was an issue with the form"</h2><?php ?>
<a href="#">Find out more about DJing</a>
</form>
当用户在表单字段中输入用户名和密码,并单击提交按钮时,检测此用户名和密码是否正确的 PHP 脚本位于 login.php 中:
// Variables to connect to database
$dbhost = "localhost";
$dbusername = "root";
$dbpass = "";
// Database connection
$dbhandle = mysql_connect($dbhost, $dbusername, $dbpass) or die("Could not connect to database");
$selected = mysql_select_db("boxlogin", $dbhandle);
// Variables to set POST username & password
$myusername = $_POST['usernameInput'];
$mypassword = $_POST['passwordInput'];
// Protection from SQL injections
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
// Selecting the username and password in the database table, and comparing the form values to the database values
$query = "SELECT * FROM test WHERE Username='$myusername' and Password='$mypassword'";
// Querying the form entries with the database, and ensuring that the count is equal to '1'
$result = mysql_query($query);
$count = mysql_num_rows($result);
// Re-direct to loginsuccess.php
if($count == 1)
$seconds = 18000 + time();
setcookie(loggedin, date ("F jS - g:i a"), $seconds);
header("location:loginsuccess.php");
else
header("location:djaccess.php") && echo $error;
// Ends connection to MySQL
mysql_close();
?>
如果用户名正确输入密码和用户名,他/她将成功定向到 loginsuccess.php 但是,我的问题是这样的:
我在 login.php 页面中设置了一个计数,如果用户名和密码匹配,则它等于“1”,因此将该用户重新定位到 loginsuccess.php 页面,但如果该计数不等于“1”我希望将它们定位回 djaccess.php 页面,并在表单下方显示一条错误消息,指出用户名或密码不正确,但是我在实现这一点时遇到了问题。
如果计数不等于“1”以及 echo $error 变量,我已尝试在 login.php 中设置标题:位置,但这似乎不起作用。另外作为参考,我是 PHP 新手,所以仍在尝试了解语法。我上面的代码取自数小时的研究和教程,我理解我所写的内容,但我被困在这个特殊问题上。
谁能帮忙?
【问题讨论】:
&& 是用于条件检查的逻辑运算符。 IE if ($count == 1 && $anotherCount != 1)。不是“执行这个和这个”;但是,您可以执行 header('location:djaccess.php?error=您的用户名和密码不匹配');然后在 djaccess.php 中使用 $_GET 超全局来检查该错误消息 好吧,我现在就看看。我如何能够将该错误消息放在表单下方?我可以将 $_GET PHP 脚本放在 标记之后吗? 在 djaccess.php 中是的,你可以。 if (isset($_GET['error'])) echo $_GET['error']; ?> 好吧,这行得通,这很好,我理解它为什么行得通……但我的最后一个问题是我可以在上面应用吗?或者任何其他用于样式目的的 html 元素?
是的,您可以为所欲为!反复试验是开发者最好的朋友 【参考方案1】:另一种可能性是不用手工编码,而是在 PHP 框架(如 Kohana、CodeIgniter 或 Laravel)中完成项目,所有这些功能和特性都已经为您开发好了。
【讨论】:
很棒的答案,改进了他的代码,让他克服了这个错误继续前进。 +1 @Rottingham 我明白你的意思。你的回答很好。我写我写的东西是因为我开始在我的应用程序中编写所有 PHP 功能,但现在我已经开始使用框架,并且可以通过一行代码引入一个 15 行、1.5 小时的开发功能一分钟的代码,我喜欢它,不会回头向所有初学者和新手 PHP 开发人员推荐它。我编辑了我的答案,试图让它看起来不那么刻薄。 我和你在一起,我的大部分工作也使用框架,(定制)但我们都学会了使用甚至制作框架,首先学会了如何手工完成所有工作。 我在这里与Rottingham 保持一致,我宁愿先学习编写代码,然后再转向框架。但我绝对感谢我将研究这些框架的建议!【参考方案2】:转换您的重定向处理以将消息传递到 djaccess.php 文件。您不能使用 && 逻辑运算符来“附加”一个操作。
// Re-direct to loginsuccess.php
if($count == 1)
$seconds = 18000 + time();
setcookie(loggedin, date ("F jS - g:i a"), $seconds);
header("location:loginsuccess.php");
else
// CHANGE THIS
// header("location:djaccess.php") && echo $error;
$error = "Your username and password do not match";
header("location:djaccess.php?error=$error");
【讨论】:
谢谢!完美运行。 欢迎。快乐编码以上是关于从登录表单系统中的单独文件执行 PHP 错误消息的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何从单独的 php 脚本执行 php 脚本而不会丢失第二个脚本的输出?
使用 Flutter,如何在单独的登录页面小部件中显示在 AuthService 类中捕获的 Firebase Auth 错误消息?