2014-11-03 146 views
-1

我有一个登录页面。我确信数据库已连接,但是当我提交表单时,页面刷新并没有任何反应。 我可以请知道这里有什么问题吗?我似乎无法修复它。 =(我的登录页面似乎无法正常工作

<?php 
session_start(); 

require_once('common/config.php'); 

if(isset($_POST['username'])) 
{ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $sql = "SELECT * FROM `users` WHERE username='$username' and password='$password'"; 

    $result = mysql_query($sql) or die(mysql_error()); 
    $count = mysql_num_rows($result); 

    if ($count == 1) 
    { 
     $_SESSION['username'] = $username; 
     header("location: adminhomepage.php"); 
    } 
    else 
    { 
     echo "Invalid Login Credentials."; 
    } 

} 
?> 

这里是我的形式。

<html> 
<head> 
    <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon"> 
    <link rel="icon" href="images/favicon.ico" type="image/x-icon"> 
    <title> 
     XXX 
    </title> 
    <link rel="stylesheet" href="login.css"> 
</head> 
<body> 
<img id= "loginlogo" src="images/loginlogo.png" alt="XXX"> 
<h1 id = "loginmain"> 
    XXX 
</h1> 
<br> 
    <div id= "inputs"> 
     <form id ="loginform" action="login.php" method="post"> 
      <h2 id = "loginheading"> 
       LOGIN 
      </h2> 
      <hr id ="loginline"> 
         <br> 
       <input id="username" type="text" placeholder="Username" autofocus required> 
         <br><br> 
       <input id="password" type="password" placeholder="Password" required> 
         <br><br> 
       <input id="loginbutton" type="submit" value="Login"> 
     </form> 
    </div> 
</body> 
</html> 
+1

你是否在回应$ count并查看它将要发生什么? – Choco 2014-11-03 11:48:34

+0

检查密码并在调用标题后添加一个'exit();' – Mihai 2014-11-03 11:51:57

+0

如果表单有方法等于post method =“post” – Eldar 2014-11-03 11:58:17

回答

2

您没有设置你的HTML输入(用户名/密码)的名字。您只设置了一个ID(ID用于分配CSS)。请将name='username'name='password'添加到您的输入中。通过这样做,$_POST[username]$_POST[password]现在将包含您的表单中发布的值。

Ergo,您当前的代码表示:如果$_POST[username]已设置,请执行此操作。如果没有设置,则不会发生任何事(空白页)。尝试在您上次}加入这个让我的建议修改前:

else { echo "SESSION[username] is not set"; }

即时猜测这会给你消息“SESSION [用户名]设置为不”,而不是一个空白页?

+0

我得到了这个错误。解析错误:语法错误,在C:\ xampp \ htdocs \ login中出现意外的'}'。第27行的php – Zazu 2014-11-03 12:44:47

+1

请在$ _POST键周围添加引号,因为php以这种方式将它们识别为常量。 – vaso123 2014-11-04 09:15:01

2

调试时,它是打印使用echo()为$ username和$ password接收到的值有时是有用的,也许你会发现,一个在POST []的元素没有被正确发送发帖登录形式将是有益的

1

首先,你需要知道一些重要的变化:。

  • 请勿使用mysql函数,请改用mysqli或PDO,否则bacuase mysql函数将被弃用。

  • 总是避免关于sql注入!逃脱你的弦乐,它们来自一个形式。

  • 您不需要创建$username$password变量,如果您以后不使用它们或不想操纵它们。直接使用$_POST["username"]$_POST["password"]即可。

  • 不要在数据库中存储明文密码。使用像md5这样的密码算法,并将表格的值与加密的密码进行比较。

在重定向页面之前,您还可以尝试调试您的代码。所以当你调试时,注释掉header("Location ...");这一行,然后转储你的sql。

所以,你应该代码似乎就是这样,当你调试:

session_start(); 
require_once('common/config.php'); 
if (isset($_POST['username'])) { 
    $sql = "SELECT * FROM `users` WHERE username='".mysqli_real_escape_string($link, $_POST["username"]). "'" 
     . " AND password='".md5($_POST["password"]). "'"; 
    echo $sql; //Here you can see, what your $sql has, and you can paste it directly into your CLI or phpMyAdmin, etc... 
    $result = mysql_queryi($link, $sql) or die(mysqli_error($link)); 
    $count = mysqli_num_rows($result); 
    if ($count == 1) { 
     $_SESSION['username'] = $_POST["username"]; 
     header("location: adminhomepage.php"); 
    } else { 
     echo "Invalid Login Credentials."; 
    } 
} 
+0

仍然没有变化。 =(可能是我的表单有什么不对吗? – Zazu 2014-11-03 12:11:54