我有一个名为form1.php的表单文件
<?PHP
//form.php
session_start();
?>
<!DOCTYPE HTML>
<html>
<head>
<title>form</title>
</head>
<body>
<?PHP if (isset ($_SESSION["notfound"])) { ?>
<h2 style="text-align:center">Wrong user name or password</h2>
<?PHP unset($_SESSION["notfound"]);}
if (isset ($_SESSION["empty"])) {?>
<h2 style="text-align:center">Empty</h2>
<?PHP unset($_SESSION["empty"]); }?>
<form name="signin" action="http://localhost/M1.php" method="post">
<table>
<tr>
<td>
<label>
Username<input type="text" name="name" size="32"/>
</label>
</td>
<td>
<label>
Password <input type="password" name="pass" size="32"/>
</label>
</td>
<td>
<input type="submit" value="Login" />
</td>
</tr>
</table>
</form>和controll文件M1.php
<?php
$name=$_POST["name"];
$pass=$_POST["pass"];
if((!empty($name)) && (!empty($pass)))
{
session_start();
if($conection=mysql_connect("localhost","","")===false)
die("not connect to data base");
if(mysql_select_db('login',$conection) ===false)
die("data base not found");
$sql =sprintf("SELECT `password` FROM `signin` WHERE `username`= '%s' ",mysql_real_escape_string($name));
$dbpass=mysql_query($sql);
if ($dbpass==$pass)
{
$_SESSION["authenticated"]=true;
header("Location: http://localhost/home.php");
exit;
}
else //if ($dbpass===false)
{
$_SESSION["notfound"]=true;
header("Location: http://localhost/form1.php");
exit;
}
}
else
{
$_SESSION["empty"]=true;
header("Location: http://localhost/form1.php");
exit;
}
?>*我使用xampp来运行它们,我有数据库日志,当我用我保存在signin表中的相同用户名和密码填写表单时,它包含一个表号,然后单击submit,在form1.php上用会话'notfoun‘返回我,当我提交空表单时,它不需要设置空会话就返回我*
发布于 2014-03-07 12:16:06
现在是使用PDO或mysqli的好时机,而不是使用最新PHP中不推荐的mysql。
在传递db连接值时,我觉得您遗漏了用户名和密码,这将帮助您连接数据库。
稍后,mysql_query("SELECT_QUERY");返回结果对象,其值应由mysql_fetch_assoc()读取,后者将db行返回到关联数组形式。
最后,您的代码应该是,
$sql =sprintf("SELECT `password` FROM `signin` WHERE `username`= '%s' ",mysql_real_escape_string($name));
$result = mysql_query($sql);
$dbpass = mysql_fetch_assoc($result);
$dbpass = $dbpass['password'];
if ($dbpass==$pass)
{
$_SESSION["authenticated"]=true;
header("Location: http://localhost/home.php");
exit;
}
else //if ($dbpass===false)
{
$_SESSION["notfound"]=true;
header("Location: http://localhost/form1.php");
exit;
}发布于 2014-03-07 12:03:44
您不是从数据库中获取数据,而是根据execute query = $pass创建一个条件,该条件将始终为false,因此请更改为
$dbpass=mysql_query($sql);
$result = mysql_fetch_array($dbpass);
$passw = $result['password'];
if ($passw==$pass)
{
//logged顺便提一句,我要说几句话。首先,我注意到您对输入进行了净化,这是一个很好的实践,但是您确实应该使用PDO或mysqli切换到准备好的状态,这样就可以避免mysql injection的任何风险,这也是因为mysql_*函数被废弃了。第二,在数据库中用纯文本保存密码是非常糟糕的做法,您确实应该对其进行加密,并将密码的散列保存在数据库中,在数据库中有关于here的anice帖子。此外,我认为session_start();应该放在文件的顶部,这样才能正常工作。
发布于 2014-03-07 12:04:48
你犯了什么错误?
不管怎样,你是如何通过数据库连接的?我看到您已经将用户名和密码作为空字符串。您应该尝试输入现有用户的用户/传递:
mysql_connect语法:
mysql_connect(host,username,password,newlink,clientflag)示例:
mysql_connect("localhost","root","") 或
mysql_connect("localhost","root","password")https://stackoverflow.com/questions/22249441
复制相似问题