2016-04-05 67 views
1

我使用HTML和PHP做一個登錄頁面,我做了一個簡單的一個,其工作正常使用這些代碼:登錄使用PHP和HTML

HTML 登錄表單

<link rel="stylesheet" href="css/style.css"> 




</head> 

<body> 

    <div class="login"> 
<div class="login-triangle"></div> 

    <h2 class="login-header">Login</h2> 

<form class="login-container" method="post" action="Login.php"> 
    <p><input type="text" id="username" name="username"  placeholder="Username"></p> 

    <p><input type="password" id="password" name="password" placeholder="Password"></p> 
    <p><input type="submit" value="Login"></p> 
    </form> 
</div> 
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> 


    </body> 
</html> 

PHP

<?php 
include ("dbconfig.php"); 
session_start(); 
$name = mysqli_real_escape_string($dbconfig, $_POST['username']); //to clean up, to avoid sql injection 
//$name = md5($name); 


$pw = mysqli_real_escape_string($dbconfig, $_POST['password']); 
// $pw = md5($pw); 


$sql_query="SELECT userid FROM user WHERE username='$name' AND password='$pw'"; 
$result = mysqli_query($dbconfig, $sql_query); 
$row = mysqli_Fetch_array ($result, MYSQLI_ASSOC); 
$count = mysqli_num_rows ($result); 
if ($count >0){ 
    $_SESSION['Login'] = $name; 
    header ("location:Welcome.php"); 
} 
if($count == 1) 
    { 
    echo "wrong login details"; 
    } 

?> 

但是當我嘗試使用新的html做登錄時使用相同的PHP文件它不會工作的所有文件,它仍然說「錯誤的登錄細節」,即使我把正確的登錄。

這是新的HTML,我想也許它必須做的與增加了額外的課程。

<!DOCTYPE html> 
<html lang="en"> 

<head> 
<meta charset="utf-8"> 
<title>Kate's World Sign In</title> 

    <!-- Google Fonts --> 
    <link href='https://fonts.googleapis.com/css?  family=Roboto+Slab:400,100,300,700|Lato:400,100,300,700,900' rel='stylesheet' type='text/css'> 

    <link rel="stylesheet" href="css/animate.css"> 
    <!-- Custom Stylesheet --> 
    <link rel="stylesheet" href="css/style.css"> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"> </script> 
</head> 

<body> 
    <Form method="post" action="Login.php"> 
    <div class="container"> 
     <div class="top"> 
      <h1 id="title" class="hidden"><span id="logo">Log <span>In</span></span></h1> 
     </div> 
     <div class="login-box animated fadeInUp"> 
      <div class="box-header"> 
       <h2>Log In</h2> 
      </div> 
      <label for="username">Username</label> 
      <br/> 
      <input type="text" id="username" name="username" > 
      <br/> 
      <label for="password">Password</label> 
      <br/> 
      <input type="password" id="password" name="password"> 
      <br/> 
      <button type="submit">Sign In</button> 
      <br/> 
     </div> 
     </div> 
    </Form> 
</body> 

<script> 
    $(document).ready(function() { 
     $('#logo').addClass('animated fadeInDown'); 
     $("input:text:visible:first").focus(); 
    }); 
    $('#username').focus(function() { 
     $('label[for="username"]').addClass('selected'); 
    }); 
    $('#username').blur(function() { 
     $('label[for="username"]').removeClass('selected'); 
    }); 
    $('#password').focus(function() { 
     $('label[for="password"]').addClass('selected'); 
    }); 
    $('#password').blur(function() { 
     $('label[for="password"]').removeClass('selected'); 
    }); 
</script> 

</html> 

回答

0

不,額外的類不應該影響你的PHP代碼。

要解決這個問題,你需要看看你在PHP端收到了什麼。堅持幾個測試 - 迴應一些數據。首先,在一開始。然後,當你確定知道什麼是通過的時候,將你的測試向下移動一點。解決所有的錯誤,然後刪除所有的測試。

例如,通過修改你的PHP是這樣開始:

<?php 
     session_start(); 
     include ("dbconfig.php"); 
     $name = mysqli_real_escape_string($dbconfig, $_POST['username']); //to clean up, to avoid sql injection 
    echo 'Name: ' . $name. '<br>'; 

     $pw = mysqli_real_escape_string($dbconfig, $_POST['password']); 
    echo 'Password: ' . $pw. '<br>'; 

    die(); 

然後,向下移動的文件了一下,這樣做:

$sql_query="SELECT userid FROM user WHERE username='$name' AND password='$pw'"; 
    $result = mysqli_query($dbconfig, $sql_query); 
    $row = mysqli_Fetch_array ($result, MYSQLI_ASSOC); 
    $count = mysqli_num_rows ($result); 
echo 'Rows found: ' .$count. '<br>'; 

    if ($count >0){ 
echo 'Inside count > 0<br>'; 
     $_SESSION['Login'] = $name; 
     header ("location:Welcome.php"); 
    }else{ 
echo 'Inside count ELSE<br>'; 
     echo "wrong login details"; 
    } 

注:

  1. PHP header() m如果已發送其他頭部消息,ethod將不起作用。替代方案:echo '<meta http-equiv="refresh" content="0; url=http://new.example.com/address" />';

  2. 注McKenzma的有關if ($count >0){代碼意見:雙方如果要是$count==1陳述爲真。

  3. 注意session_start()在你的PHP文件中的第一個指令。 請參見上面

+0

謝謝我會嘗試一下,看看 –

+0

當我嘗試這種使用第一個HTML表單它確實迴應用戶名和密碼,但與第二個HTML文件它只是再次「錯誤的細節」,這是如此奇怪 –

+0

添加更多'echo'語句清楚地跟蹤PHP文件中的程序流。隨着您的改進,您還可以查看[FirePHP](https:// github。com/firephp/firephp)(適用於PHP的Firebug,在Firefox中效果最佳,但也適用於Chrome)。但是,您可能需要花費數小時才能完成設置,手動'echo'方法應在幾分鐘內找到解決方案。不過,FirePHP很好理解。 – gibberish

0

你的第二個條件應該是「$ count!= 1」。你想返回一個成功的登錄行。

+0

我的示例代碼你的意思!=而不是<>? –

0

你應該使用if和else,而不是if和if。

<?php 
$count = mysqli_num_rows ($result); 
if ($count >0){ 
$_SESSION['Login'] = $name; 
header ("location:Welcome.php"); 
} else { 
echo "wrong login details"; 
} 
?>