2013-07-04 106 views
1

你好我正在登录页面,我有问题,当我输入用户名和登录页面更改为回显错误的用户名或密码。使用数据库的php登录脚本

它似乎没有去login_success.php,这导致认为问题是与SQL语法,但我还没有找到答案为什么。我也认为它可能是if($ count == 1){和尝试($ count> 1){没有成功。

我搜查了网络,并尝试了几种不同的方法,但没有任何工作。我是新的,将调查的方法来阻止SQL注入攻击但本网站不活,仅用于练习:)这个社会一直是我学习的一个masive帮助谢谢大家提前

HTML LoginPage.html

<form id=login name="login" action="login.php" method="post"> 
    <fieldset id=fs> 
     <legend>Vault Security Console:</legend> 
     <!-- legeng tage creates a header title for the fieldset box, filedset pulls all data in the tag to gether with a box around it. --> 
     UserName: <input type="text" name="username"> <br> 
     Password: <input type="password" name="password"> <br> 
     <input type="submit" value="Login"> <input type="submit" value="Register"> 
    </fieldset> 
</form> 

PHP-login.php中

<?php 
    // Create connection 
    $con=mysqli_connect('172.16.254.111',"user","password","Faults"); //(connection location , username to sql, password to sql, name of db) 

    // Check connection 
    if (mysqli_connect_errno($con)) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    //below is the variables from the login form 
    $username = $_POST['username']; 

    $password = md5(strip_tags($_POST['password'])); 

    $sql="SELECT * FROM Users WHERE username='.addslashes($username).' and password='.addslashes($password).'"; 
    $result=mysqli_query($sql); 

    //Mysql_num_row is counting table row 
    $count=mysqli_num_rows($result); 

    if($count==1){ 
    session_register("username"); 
    session_register("password"); 
    header('location:login_success.php'); 
    } 
    //if false echo below 
    else { 
    echo "<H2>Wrong Username or Password</H2>"; 
    } 
?> 
+1

呼应查询然后检查输出是什么,并将其与您的数据库匹配 –

+0

我认为您的查询存在问题。 '$ sql =“SELECT * FROM Users WHERE username ='。addslashes($ username)。'和密码='。addslashes($密码)''“;'IMO这添加.addslashes()给你查询,而不是转义字符串,然后将其添加到查询。尝试像这样编辑它'$ sql =“SELECT * FROM Users WHERE username ='”。addslashes($ username)。“'and password ='”。addslashes($ password)。“'”;' – Jakolcz

+1

连接该查询被破坏。 'addslashes()'是错误的选择。改为准备好声明。 – MrCode

回答

1

试试这个。

<?php 
    //below is the variables from the login form 
    $username = mysqli_real_escape_string($con, $_POST['username']); 
    $password = md5($_POST['password']); 

    $sql="SELECT * FROM Users WHERE username='$username' and password='$password'"; 
    $result=mysqli_query($sql); 
?> 
+0

我试了一下它没有工作,我迷失在答案可以。这是我需要做的网站的最后一点是登录和注销:( – Gustar

+1

尝试每个结果中的回声如下所示:if($ count == 1){echo'a';} else {echo'b' ;}所以你可以看到这是怎么回事。第二,你有没有在数据库中加密密码?试试那些告诉我 – zPuls3

+0

b来了,echo'd时显示的密码098f6bcd4621d373cade4e832627b4f6与数据库中一样,所以它是一个匹配 – Gustar

0
$sql="SELECT * FROM Users WHERE username='".addslashes($username)."' and password='".addslashes($password)."'"; 

请像上面那样修改你的查询语句。

+0

这并没有解决问题 – Gustar

0

我认为用户名或密码有问题。
你必须遵循以下步骤: -

  1. 选择密码与登录用户
  2. 与编码的密码进行比较它,你的脚本生成
$username = mysqli_real_escape_string($con, $_POST['username']); 
$recievedPassword = md5($_POST['password']); 

$qry="select password from Users where username=$username"; 
$row=mysqli_query($qry); 

$result=mysqli_fetch_assoc($result); 
$dbPassword=$result['passsword']; 

if($recievedPassword==$dbPassword){ 
    echo "password matched"; 
} 
else{ 
    echo "password mismatch, Please not encryped in db or there is any space.."; 
}