我正在为我的企业建立一个博客类型的页面。全新的MySQL和PHP。设置这个登录系统。由于某些原因,我不知道为什么登录会下降。假设检查错误,然后通过php返回'好',如果电子邮件和密码是正确的。如果php返回good,那么它应该重定向到博客页面。
已经处理这个几个月了,迫切需要帮助。谢谢你!下面是jquery附带的php代码。
链接到测试网站在这里。test.toddprod.com/login非常感谢你的帮助。由于
<?php
#fake mysql connection first
DEFINE ('DB_USER','usernamegoeshere');
DEFINE ('DB_PASSWORD','passwordhere');
DEFINE ('DB_HOST','hostnamehere');
DEFINE ('DB_NAME','andtheotherthinghere');
$dbc = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) or die ('Could not connect to MySQL');
$db = mysql_select_db(DB_NAME, $dbc) or die('Could not select database.'.mysql_error());
$e = $_POST['email'];
$pass = $_POST['pass'];
$q = 'SELECT user_id from toddprod where email="'.$e.'" and pass= SHA1("'.$pass.'")';
$r = mysql_query($db, $q);
if( mysql_num_rows($r)==1 ){
setcookie ( 'user_id', $r);
setcookie ( 'email', '$e');
setcookie ( 'logged-in', 'true');
echo 'good';
}
else if (mysql_num_rows($r)==0) {
echo 'Your '.$e.' with password '.$pass;
};
mysql_close ($db);
?>
嗯,我觉得这里有很多地方不对…
首先你的查询应该被净化…
$email = mysql_real_escape_string ($_POST['email']); // escape the email
$pass = SHA1(mysql_real_escape_string ($_POST['pass'])); // escape and encrypt the pass
// now you can put it into the query safely
$query = "SELECT user_id from toddprod where email = '$email' and pass = '$pass' ";
下一步你执行查询错误,mysql_query
函数有两个参数,查询和数据库连接。你传递了错误的参数,你传递了查询和mysql_select_db
函数的结果,它只是一个布尔值。所以你必须把$dbc
,而不是$db
放入查询中,即使这样,你也以错误的顺序传递参数。先执行查询,然后再执行连接。所以应该是…
$result = mysql_query($query, $dbc);
接下来,您尝试将mysql_query
函数的返回值设置为cookie,但该值是一个资源,而不是您需要的userid。您必须像这样实际地从资源中读取值。
$row = mysql_fetch_array($result);
$userid = $row["user_id"];
setcookie('user_id', $userid);
继续……当您设置电子邮件cookie时,您将变量放在单引号中,因此cookie实际上包含$e
而不是实际的电子邮件,因为单引号存储字符串litterly
(不解析变量)。所以你应该使用双引号,或者根本不使用引号。因此,以下任何一种都可以…
setcookie('email', "$e");
setcookie('email', $e);
最后但并非最不重要的是,您不应该在if语句的末尾有分号,并且您需要将连接而不是数据库选择结果传递给mysql_close
函数,因此它应该是
mysql_close($dbc);
在那里,希望这对你有所帮助,尝试这些变化,如果问题仍然存在,我很乐意进一步帮助你。
这里有一些链接可以帮助你:
http://www.php.net/manual/en/function.mysql-query.php http://www.php.net/manual/en/function.mysql-fetch-array.php http://www.php.net/manual/en/function.mysql-real-escape-string.php 编辑:在这里,我根据我发现的问题修复了代码。试一试,我不能测试它,所以它可能有一些小的语法错误,但它应该给你一些比较。同样为了将来,我建议你在语义上/正确地命名你的变量,这样别人更容易拾取,它也会让你不会像你在几个函数中传递$db而不是$dbc那样感到困惑。
<?php
// keep the function names in lowercase, no reason, just looks better to me
define('DB_USER', 'usernamegoeshere');
define('DB_PASSWORD', 'passwordhere');
define('DB_HOST', 'hostnamehere');
define('DB_NAME', 'andtheotherthinghere');
// connect to the mysql server
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ('Could not connect to MySQL');
// select the database, you don't need to store the result, it just returns true or false
mysql_select_db(DB_NAME, $conn) or die('Could not select database.' .mysql_error());
// escape the input
$email = mysql_real_escape_string($_POST['email']);
$pass = sha1(mysql_real_escape_string($_POST['pass']));
// create the query
$query = "SELECT user_id FROM toddprod WHERE email = '$email' AND pass = '$pass'";
// execute the query
$result = mysql_query($query, $conn);
$usercount = mysql_num_rows($result);
if($usercount == 1){
// read the results and get the user_id
$row = mysql_fetch_array($result);
$userid = $row['user_id'];
// set the cookies
setcookie('user_id', $userid);
setcookie('email', $email);
setcookie('logged-in', 'true');
// echo success message
echo 'good';
}elseif($usercount == 0) {
echo "You're $email with password $pass";
}
mysql_close($conn);
?>
首先,您必须使用mysql_real_escape_string():
检查用户输入$e = mysql_real_escape_string ($_POST['email']);
$pass = mysql_real_escape_string ($_POST['pass']);
读一读SQL注入,你会很高兴的。
关于主要问题,你能提供更多的背景吗?如何检查用户是否已登录?