2014-01-09 24 views
0

我想建立一個基於mysql數據庫的登錄頁面,但它不起作用。隨着下面的代碼,我總是得到一個空白頁面,而不是重定向。而echo $result_row['password'];不會返回任何內容。登錄頁面與PHP和MySQL不工作

<?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     session_start(); 

     $username = $_POST['username']; 
     $passwort = $_POST['passwort']; 

     $hostname = $_SERVER['HTTP_HOST']; 
     $path = dirname($_SERVER['PHP_SELF']); 

     $mysqlhost = "localhost"; // MySQL-Host angeben 
     $mysqluser = "***"; // MySQL-User angeben 
     $mysqlpwd = "***"; // Passwort angeben 

     $connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen"); 

     $mysqldb="db2507004-bank"; // Gewuenschte Datenbank angeben 
     mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen."); 

     $result = mysql_query("SELECT * FROM konto WHERE 'username' LIKE '$username' LIMIT 1") 
     or die(mysql_error()); 

     $result_row = mysql_fetch_array($result); 

     echo $result_row['password']; 

     // Benutzername und Passwort werden überprüft 
     if ($passwort == $result_row['password']) { 
     $_SESSION['angemeldet'] = true; 
     $_SESSION['username'] = $username; 
     $_SESSION['name'] = $result_row['name']; 

     echo '<meta http-equiv="Location" content="http://testserver.info.cm/konto_show.php/">'; 
     } 
     } 
?> 
+2

使用的mysqli或PDO請 –

+0

你沒有結果取 –

+1

也請不要存放純文本密碼。這與第一個評論者的組合是你可以對用戶做的最糟糕的事情。 – PeeHaa

回答

2

您沒有獲取結果。試試這樣:

<?php 
     if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
      session_start(); 

      $username = $_POST['username']; 
      $passwort = $_POST['passwort']; 

      $hostname = $_SERVER['HTTP_HOST']; 
      $path = dirname($_SERVER['PHP_SELF']); 

      $mysqlhost = "localhost"; // MySQL-Host angeben 
      $mysqluser = "***"; // MySQL-User angeben 
      $mysqlpwd = "***"; // Passwort angeben 

      $connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen"); 

      $mysqldb="db2507004-bank"; // Gewuenschte Datenbank angeben 
      mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen."); 

      $result = mysql_query("SELECT * FROM konto WHERE username ='$username' LIMIT 1") 
      or die(mysql_error()); 
      $row = mysql_fetch_object($result); 
      echo $row->password; 

      // Benutzername und Passwort werden überprüft 
      if ($passwort == $row->password) { 
      $_SESSION['angemeldet'] = true; 
      $_SESSION['username'] = $username; 
      $_SESSION['name'] = $row->name; 

      header("Location http://testserver.info.cm/konto_show.php"); 
      } 
      } 
    ?> 
+0

重新發布代碼沒有評論是非常沒用的。 – tadman

+0

@Nathan Maier:你試過這個嗎? –

+0

正如我已經說過,我用$ result_row = mysql_fetch_array($ result)獲取它; echo $ result_row ['password']; – ntm

2

mysql_query()函數的結果應該是牽強的使用php.you不能使用它這樣的。 你可以使用:

mysql_fetch_array()

mysql_fetch_assoc()

mysql_fetch_object()

通過例如,你可以使用它像這樣:

$query = "SELECT * FROM konto WHERE 'username' LIKE '$username' LIMIT 1"; 
$result = mysql_query($query); 
while($row= mysql_fetch_array($result)){ 
echo $row[1]; 
} 

,並通過該方式,MySQL的擴展程序已被棄用,將來會被刪除:使用庫MySQLi或PDO來代替

+1

最好的答案是重新開始PDO。 – tadman

+1

@tadman但是,這並沒有解決手頭的問題。 PDO是一個很好的工具,但它不是唯一的工具。沒有任何參考,入門指南或建議,您的評論什麼都不加。 – Sean

+1

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers這裏有你的資源不會阻止垃圾傳播 – PeeHaa

2

你正在做使用meta標記您的重定向,但如果這是你的腳本的全部,它不是一個結構良好的HTML文檔的一部分(唯一的其他輸出是echo $result_row['password'];)所以我期望這是它不起作用的原因。

嘗試使用301 HTTP標頭,也許是這樣的:(。另外,在你的SQL語句小心SQL注入漏洞通過相關的MySQL逃生功能始終運行用戶輸入)

header('Location: http://www.yourwebsite.com/konto_show.php'); 

+1

您應該填寫完整的URI地址 – 2014-01-09 19:11:15

+0

確實如此,儘管規範說明未來可能會發生變化,但我們將會調整答案,因爲我們都被迫生活在現在......:'( – Alex

1

在doc中,它正在編寫mysql_query返回一個資源。 您必須使用獲取函數來獲取結果。

在你的情況下,你想驗證如果「int」函數返回的是0或更多。 然後使用mysql_fetch_row Doc:php.net/mysql_fetch_row

它會將結果放入數組中。

result_row = mysql_fetch_row($result); 

然後比較你的價值:

if (result_row[0]) 
... 
1

你我去用這種方式:

$result = mysql_query("SELECT * FROM konto WHERE username ='$username' LIMIT 1") ; 
$row = mysql_num_rows($result); 
$result_row = mysql_fetch_array($result); 
if($row==1 && $passwort == $result_row['password']){ 
    $_SESSION['angemeldet'] = true; 
    $_SESSION['username'] = $username; 
    $_SESSION['name'] = $result_row['name']; 

    echo '<meta http-equiv="Location" content="http://testserver.info.cm/konto_show.php/">'; 
    } 
}