簡體   English   中英

非常簡單的PHP + MySql登錄表單不起作用?

[英]Very Simple PHP + MySql Login Form Not Working?

我當前正在構建一個非常非常基本的登錄腳本,該腳本基本上連接到數據庫,並檢查用戶在表單中輸入的值是否匹配。 但是由於某種原因,單擊提交按鈕時,我的代碼拒絕執行任何操作! 這是代碼...

<?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>

有任何想法嗎?

您正在檢查

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

...但是不會設置$_POST['submit'] ,因為您沒有給任何表單控件一個name="submit"屬性。

將提交按鈕更改為此:

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

還請清理數據庫輸入 ,最好使用參數化查詢。

簡單一試

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

代替

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

希望這可以幫助!

編輯:您尚未命名為提交

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">

無論如何,我認為在自我頁面中處理不是一個好習慣,因為您應該始終重定向到處理程序頁面。

您是否將表單發布到同一頁面?

如果是這樣,請嘗試刪除action =“ login.php”。

  1. 成功登錄后使用header(..)將不起作用。 這是因為可能已經向瀏覽器發送了幾個字符。 您需要確保不發送任何字符。 這種方式:

    其他所有HTML內容在這里..
  2. if(isset($_POST['submit']))更改為if(isset($_POST['username'])) 這是因為您submit輸入沒有“名稱”字段。 測試具有的東西。

  3. 正如其他人指出的那樣,您的腳本可以進行SQL注入。 使用以下任一方法進行修復

    • mysql_real_Escape_string($_POST['username']);
    • 准備陳述

這是不對的,因為您已經准備好輸出一些內容,因此您的會話將受到影響。

您的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>

還建議將session_start()放在代碼頂部。

所以嘗試

<?php session_start(); ... ?>

登錄頁面(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 );
   }
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM