从登录表单系统中的单独文件执行 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 中是的,你可以。
yada yada 输入
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 错误消息?

使用会话在登录表单上显示错误的问题

PHP - 使用登录系统保护仅限会员的页面

Laravel 5.2 在同一页面上登录和注册表单

从同一文件中的 HTML 表单调用 PHP 函数