2013-04-11 72 views
0

当前我试图创建一个提交给自己的登录表单,这样如果他们将显示在登录表单上方而不是发送到另一个页面。此外,如果登录成功,则会将其发送到所需的页面。这里是我的代码如下,我感谢任何帮助,谢谢!提供错误信息并提交给自己的登录页面

<?php 
if ((isset($_REQUEST['username'])) && (isset($_REQUEST['password']))) { 
    $adminusername = $_POST["username"]; 
    $adminpassword = $_POST["password"]; 
    if ($adminusername == '' || $adminpassword == '') { 
     echo "<b>You must complete all sections</b><br/>"; 
    } 

    $query = mysql_query("SELECT * FROM admin WHERE username = '$adminusername' AND password = '$adminpassword'"); 

    $numrows = mysql_num_rows($query); 
    if ($numrows != 0) { 

     while ($row = mysql_fetch_assoc($query)) { 
      $dbusername = $row['username']; 
      $dbpassword = $row['password']; 
     }    

     if ($adminusername == $dbusername && ($adminpassword == $dbpassword)) { 
      $_SESSION['username'] = $adminusername; 
      header("Location: admin.php"); 
     } 
    } else { 
     echo " ($error) Username and password do not match"; 
    }     
} 
?> 
<h3>Admin Login</h3> 
<form name="login" action="<?= $SERVER['PHP_SELF'] ?>" method="POST"> 
    Username: <input type="text" name="username"><br/> 
    Password: <input type="password" name="password"><br/><br/> 
    <button type="submit">Log In</button> 
</form> 
+1

你在坚持什么?它在做什么,它不应该做什么?或者它没有做什么,它应该如何? – andrewsi 2013-04-11 18:39:12

+0

和你的问题是...?除了[sql注入攻击](http://bobby-tables.com)漏洞,当然。 – 2013-04-11 18:39:28

+0

当我输入正确的信息,应该把我发送到管理页面,没有任何反应,没有错误信息 - 什么都没有。如果信息是正确的,它应该重定向到管理区... – cja91 2013-04-11 18:43:01

回答

1

我缩进你的代码,这样你可以更清楚地看到结构。

如果用户名和密码为空,则会输出错误,但数据库仍将被查询。

您不检查数据库查询是否实际工作。您应该检查$query是否为假,并且是否报告错误。

您正在检查用户名和密码匹配两次(一次在SQL中,稍后再次),这是矫枉过正,而且如果第二次检查失败则不报告。

header()只有在您还没有发送任何输出时才能正常工作......如果在您显示的代码之前有任何输出,即使是PHP以外的空白行,那么标题也不起作用。

就其本身而言,这对我的作品(SQL注入可能的除外):

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $adminusername = $_POST["username"]; 
    $adminpassword = $_POST["password"]; 
    if ($adminusername == '' || $adminpassword == '') { 
     echo "<b>You must complete all sections</b><br/>"; 
    } else { 
     $sql = "SELECT * FROM admin WHERE username = '$adminusername' AND password = '$adminpassword'"; 
     $query = mysql_query($sql); 

     if ($query === false) { 
      echo "Could not successfully run query ($sql) from DB: " . mysql_error(); 
      exit; 
     } 

     if (mysql_num_rows($query) > 0) { 
      $_SESSION['username'] = $adminusername; 
      header('Location: /admin.php'); 
      exit; 
     } 

     echo "<b>Username and password do not match</b><br/>"; 
    } 
} 
?> 
<h3>Admin Login</h3> 
<form name="login" action="<?= $_SERVER['PHP_SELF'] ?>" method="POST"> 
    Username: <input type="text" name="username"><br/> 
    Password: <input type="password" name="password"><br/><br/> 
    <button type="submit">Log In</button> 
</form> 
+0

非常感谢你的工作! – cja91 2013-04-11 21:23:57

0

要提交<form>,你需要一个提交按钮;你有:

<button type="submit">Log In</button> 

尝试:

<input type="submit" value="Log In" /> 

我不认为你目前正在提交表单,所以什么都不会发生,当你点击提交。

+0

感谢您的回复,我已经尝试过,没有任何更改,不幸的是... – cja91 2013-04-11 18:49:28

+1

'

+0

呵呵。所以他们是。我想这是我今天学到的新东西。 – andrewsi 2013-04-11 18:53:29

0

而不是 header(“Location:admin.php”);

尝试Java脚本

echo "<script>window.location = 'admin.php';</script> 
如果你已经

outpu页面页眉不会工作

+0

但是,除非错误没有被报告,否则PHP会通知您头文件已经发送。 – 2013-04-11 18:50:54

0

我的解决方案回声形式与div内下方的错误。我仍然在学习,但我希望它能帮助别人。

<div> 
    <?php 
    //make sure the form action='' is set to itseslf 
echo " 
     <form action='self_page_name' method='post'> 
      <table> 
      <tr>  
       <td>UserName:</td> 
      </tr> 
      <tr> 
       <td><input type='text' name='username' required='required' /></td> 
      </tr> 
      <tr> 
       <td>Password: </td> 
      </tr> 
      <tr> 
       <td><input type='password' name='password' required='required' /></td> 
      </tr> 
      <tr> 
       <td><input type='submit' name='submit' value='Login' /></td> 
      </tr> 
      </table> 
     </form> 
    "; 
//////////your php validation script here//////////// 
    ?> 
</div> 
+0

对于新问题的解答比一年前的问题更好,而且回答标记的问题通常更有意义。 – Paul 2014-10-27 04:14:12

相关问题