2013-12-16 42 views
-1

***问题已得到解答。这是解决方案:使用PHP进行登录时遇到问题需要输入

好的,所以我需要解决一些事情之前,回答问题。首先,数据库意味着有许多安全缺陷。这是一个安全类,我试图故意破解它。然后,我入侵后,我应该阻止自己的攻击。

我想清楚的第二件事是,这是一个本地数据库,除了我自己,同学和老师以外,任何人都不会使用它。

现在回答:我做错的第一件事是代码应该从本地主机网页登录。我试图从login.php文件登录。

第二件事,是我混合了我的mysql *和mysqli *方法。代码中不能有多个版本的相同方法。

感谢所有发布的人和快速回复。

该问题的简要说明: 我一直在编码一个学校项目的数据库。根据教师的评论,我已经正确设置了学校数据库。我拥有的代码应该是用户输入的内容,请使用“已注册”的学生列表对其进行检查,并将学生ID和密码与已存在的列表进行比较。 检查完成后,代码将根据正在注册的学生开始会话。如果学生没有注册,它会再次将他们重定向到登录页面。

我遇到的麻烦是代码根本无法工作。我收到一个错误,说我的login.php文件的第35行有问题。这里是我的代码:

<?php 
//Connect to DB 
$con=mysql_connect("localhost","root","cravenreach","univ"); 

if (mysqli_connect_errno($con)) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
else 
{ 
    echo "Succeed to connect to MySQL. "; 
} 
//Session setup 
session_start(); 
if(isset($_POST['sid']) && isset($_POST['password'])) 
{ 
$checklogin = mysql_query($con, "SELECT * FROM students WHERE sid=".$_POST['sid']." AND password=".$_POST['password']); 
echo $count1 = mysql_num_rows($checklogin); 
if($count1==1) 
{ 
    // auth okay, setup session 
    $_SESSION['sid'] = $_POST['sid']; 
    // redirect to required page 
    header("Location: main.php"); 
} 
else { 
    // didn't auth go back to login 
    header("Location: login.php"); 
} 
} 
else { 
// username and password not given so go back to login 
//header("Location: login.php"); 
//This code is broken, causes a redirect loop. 
echo "failure to start"; 
//header("location: .php"); 
} 

?> 

这里是index.php的代码:

<html> 
<body> 
<form action="login.php" method="post"> 
<p><label>Student ID: <input type="text" name="sid"></label></p> 
<p><label> Password: <input type="password" name="password"></label></p> 
<input type="submit"> 
<input type="reset" value="Clear"> 
</form> 
</body> 
</html> 

我收到的错误是这样的:“成功连接到MySQL失败的开始。” 我知道代码并没有将登录评估为true,而是直接跳到最后一条else语句。我只是不明白为什么。

回顾:我的代码实际上不会接受正确的学生输入(或对此不正确),并且不允许用户登录。它只是抛出一个错误。我的问题是:我的代码有什么问题?我的查询是错误的,还是执行会话?

+0

你可以在你的login.php代码中尝试'var_dump($ _ POST)'吗?它会告诉你你的领域是否成功发送。 – andrewsi

+0

第一:你的学校项目是非常错误的,并有非常大的安全“漏洞”。最原始的安全事物在这里被打破了。即使我可以在10秒内接管你的服务器。你的教授/老师应该真正开展一些开发课程! – Sliq

+0

首先,你将'mysql_'与'mysqli_'函数混合在一起,这样会阻碍事物的发展。 –

回答

0

您的查询应该是这样

//Prevnt from SQL injection 
$sid = mysql_real_escape_string($_POST['sid']); 
$password = mysql_real_escape_string($_POST['password']); 
checklogin = mysql_query("SELECT * FROM students WHERE sid='$sid' AND password='$password'",$con); 

,MySQL的已经过时的使用库MySQLi或PDO

+0

我尝试进行您所建议的更改,但代码仍会输出相同的错误。 感谢您输入BTW。 –

1

您需要更换mysql_*功能于mysqli_*也,你需要)

前添加查询 "结束
$checklogin = mysqli_query($con, "SELECT * FROM students WHERE sid='".mysqli_real_escape_string($_POST['sid'])."' AND password='".mysqli_real_escape_string($_POST['password'])."' "); 
+0

我仍然收到相同的错误。 我建议将所有的mysql函数改为mysquli。 –

+0

您是否提交了表单,'$ _POST ['sid']'和'$ _POST ['password']'没有设置,这就是为什么你无法从代码启动 –