0

我目前正在构建一个非常非常基本的登录脚本,它基本上连接到数据库,并检查用户在表单中输入的值是否匹配。但是,由于某种原因,当单击提交按钮时,我的代码拒绝执行任何操作!??这是代码...

<?php
mysql_connect("localhost", "username", "password");
mysql_select_db("dbname");
?>

<body>
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
$num = mysql_num_rows($result);
if($num == 0){
echo "Bad login, go <a href='login.php'>back</a>.";
}else{
session_start();
$_SESSION['username'] = $username;
header("Location: admin.php");
}


}else{
?>


<form action='login.php' method='post'>
   Username: <input type='text' name='username' /><br />
   Password: <input type='password' name='password' /><br /><br />
   <input type='submit' value='Login' />
</form>
<?php
}
?>
</body>

有任何想法吗?

4

8 回答 8

7

您正在检查

if(isset($_POST['submit'])){

...但$_POST['submit']永远不会设置,因为您没有为任何表单控件提供name="submit"属性。

将提交按钮更改为:

<input type='submit' name='submit' value='Login' />

还请清理您的数据库输入,最好通过参数化查询。

于 2012-05-28T14:22:32.063 回答
1

简单的,试试

<input type='submit' name='submit' value='Login' />

代替

<input type='submit' value='Login' />

希望这可以帮助!

编辑:你还没有命名提交

于 2012-05-28T14:23:29.627 回答
1

DaveRandom 给出的答案对我来说似乎是最有效的。

但是,您的代码中有几个需要首先处理的故障。

你没有清理你的输入,这可能是致命的,尤其是在登录表单中。

利用

  mysql_real_escape_string($_POST['username']));
  mysql_real_escape_string($_POST['username']));

并采取其他措施避免SqlInjection。

您的表单是否重定向到正确的页面?如果它所依赖的页面名称是 login.php 它应该可以工作,但您也可以使用

 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

无论如何,我认为在 self 页面中处理不是一个好习惯,因为您应该始终重定向到处理程序页面。

于 2012-05-28T14:29:57.933 回答
0

您是否发布到与表单相同的页面?

如果是,请尝试删除 action="login.php"。

于 2012-05-28T14:25:10.287 回答
0
  1. 成功登录后使用header(..)将不起作用。这是因为一些字符可能已经发送到浏览器。您需要确保没有字符被发送出去。有点这样:

    这里的所有其他 HTML 内容..
  2. 更改if(isset($_POST['submit']))if(isset($_POST['username']))。这是因为您submit输入的内容没有“名称”字段。测试有的东西。

  3. 正如其他人指出的那样,您的脚本对 SQL 注入是开放的。通过使用来修复它

于 2012-05-28T14:29:09.587 回答
0

这是不对的,您的会话将受到影响,因为您已经输出了一些内容。

您的 action="login.php" 必须指向该文件,例如,您的示例脚本保存在 login.php 中,这样就可以了。如其他答案所述,您必须设置name="something"为通过$_POST['something']

<?php // some php scripting ?>

<!-- blank lines also counts as output --> 
<body>
  <?php session_start(); header("What ever"); ?>
</body>
于 2012-05-28T14:31:00.060 回答
0

并且还建议放在session_start()代码的顶部。

所以试试

<?php session_start(); ... ?>
于 2012-05-28T14:32:12.070 回答
0

登录页面(php-mysql)的实现如下图所示:

<?php
if (!isset($_SESSION)) {
session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
   $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['username'])) {  //from form username textbox
   $loginUsername=$_POST['username'];
   $password=$_POST['password'];
   $MM_fldUserAuthorization = "access_level"; // from db user access-level
   $MM_redirectLoginSuccess = "login_success_page.php";
   $MM_redirectLoginFailed = "login_failed_page.php";
   $MM_redirecttoReferrer = false;
   mysql_select_db($DB_NAME, $DB_LINK);

   $Login_query=sprintf("SELECT username,password, access_level FROM tbl_user WHERE username=%s AND password=%s",
   GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

   $Login = mysql_query($Login_query, $DB_LINK) or die(mysql_error());
   $loginFoundUser = mysql_num_rows($Login);

   if ($loginFoundUser) {

      $loginStrGroup  = mysql_result($Login,0,'access_level');

      if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}

      $_SESSION['MM_Username'] = $loginUsername;
      $_SESSION['MM_UserGroup'] = $loginStrGroup;

      if (isset($_SESSION['PrevUrl']) && false) {
         $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
      }
      header("Location: " . $MM_redirectLoginSuccess );
   }
   else {
      header("Location: ". $MM_redirectLoginFailed );
   }
}
?>
于 2016-04-01T20:38:10.717 回答