我正在制作这个简单的代码来验证用户。带有表单的页面是:> login.php。使用以下代码。
login.php:
<html>
<body>
<div style="position:absolute;left:300px;top:300px;width:300px;height:100px;z-index:9;>
<form name="form1" method="POST" action="check.php">
Username:<br />
<input type="text" name="Username" />
<br /><br />
Password:<br />
<input type="password" name="Password" />
<br /><br /><br/>
<input type=button onClick="location.href='check.php'" value='Continue' name='continue'/>
</form>
</div>
</body>
</html>
表单字段值正在下一个php页面中使用,代码如下:
check.php:
<?php
session_start();
$con = mysql_connect("localhost", "root", "");
mysql_select_db("aviation", $con) or die(mysql_error());
if (isset($_POST['continue'])) {
$userName = $_POST[Username];
$passWord = $_POST[Password];
mysql_select_db('aviation');
$query = "select * from users where Username='" . $userName . "'and Password='" . $passWord . "'";
$result = mysql_query($query, $con);
if (!$result) {
die('Could not enter data: ' . mysql_error());
}
$rows = mysql_num_rows($result);
if ($rows == 1) {
$_SESSION['Username'];
$_SESSION['Password'];
echo "Successful";
echo "<BR>";
echo "You are authorized to update the status of Bays.";
echo "<BR>";
$Msg = "Redirecting....";
echo '<script type="text/javascript">
alert("' . $Msg . '");
</script>';
header("location:upbstatus.php");
} elseif ($userName == "" || $passWord == "") {
$errorMsg = "Data was not entered <br/> Enter Username and Password";
echo '<script type="text/javascript">
alert("' . $errorMsg . '");
</script>';
else {
$errorMsg = "Data Does Not Match <br/> Re-Enter Username and Password";
$errorMsg = "Data was not entered <br/> Enter Username and Password";
echo '<script type="text/javascript">
alert("' . $errorMsg . '");
</script>';
}
} else {
echo (" =============== not SET ===============");
}
?>
总是回归: ===============不设置===============
我很困惑,为什么会发生这种情况。有人可以帮忙吗?我们将不胜感激 谢谢。
答案 0 :(得分:2)
您的onclick(onClick="location.href='check.php'"
)事件处理程序在表单发出check.php
请求之前请求POST
。点击该按钮后,它会重定向到check.php
,check.php
会向POST
非 <input type='submit' value='Continue' name='continue' />
发送GET请求。
要解决此问题,您需要将按钮更改为提交类型的输入。
$_POST['Username']
其他信息:
mysql_real_escape_string
答案 1 :(得分:1)
代码存在一些问题:
奇怪的表单行为
<input type=button onClick="location.href='check.php'" value='Continue' name='continue'/>
你为什么要这样做?这根本不会发送用户名和密码字段,因为浏览器将在提交表单之前重定向。如果您想在点击时提交表单,请使用<input type="submit">
<input type="submit" value="Continue" name="continue" />
引用数组索引
$userName = $_POST[Username];
$passWord = $_POST[Password];
这导致在PHP中引发通知,因为常量Username
不存在。请改用:
$userName = $_POST['Username'];
$passWord = $_POST['Password'];
我不会涉及可能未设置$_POST['Username']
的情况。
在SQL中转义变量
$query = "select * from users where Username='".$userName."'and Password='".$passWord."'";
这很危险;你应该正确地转义变量:
$query = sprintf("select * from users where Username='%s' and Password='%s'",
mysql_real_escape_string($userName),
mysql_real_escape_string($passWord)
);
不要以纯文本格式存储密码
以纯文本格式存储密码只是在寻找麻烦。使用bcrypt代替存储密码的哈希值。
另请参阅:Secure hash and salt for PHP passwords
请勿使用mysql_xx
个功能
答案 2 :(得分:0)
在提交按钮中单击删除。在你的时候,修改你的报价。
答案 3 :(得分:0)
<form name="form1" method="POST" action="check.php">
Username:<br />
<input type="text" name="Username" />
<br /><br />
Password:<br />
<input type="password" name="Password" />
<br /><br /><br/>
<input type="submit" value="Continue" name="continue"/>
</form>