2014-09-05 90 views
0

即時通訊在PHP和MySQL中是新的。我有一個登錄腳本與PHP和MySQL。在用戶tabell是我的用戶名和密碼在md5。但如果我在輸入字段中輸入正確的用戶名和密碼,則腳本始終顯示「密碼錯誤」。你能糾正我的代碼嗎?登錄腳本 - 儘管輸入正確,用戶名和密碼總是爲false

if(isset($_POST['username']) AND isset($_POST['password'])) { 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    if(empty($_POST['username']) OR empty($_POST['password'])) { 
     echo "Bitte fuelle alle Felder aus!"; 
    } else { 
     $rows = mysqli_query($db,"SELECT * FROM users WHERE username = '".mysqli_real_escape_string($db, $username)."' AND password = '".mysqli_real_escape_string($db, $password)."' LIMIT 1") or die(mysqli_error($db)); 
     if(mysqli_num_rows($rows) == 1) { 
      $_SESSION['username'] = $username; 
      header("Location: home.php"); 
      echo "Erfolgreich eingeloggt"; 
    } else { 
      echo "Falscher Benutzername"; 
     } 
    } 
} 

新問題!

我的登錄方式可行!現在我在我家。但是,只要我在調用字符串$ username時發出回顯,就會出現以下消息:可捕獲的致命錯誤:類stdClass的對象無法轉換爲第19行中的C:\ xampp \ htdocs \ home.php中的字符串

我的腳本:

if(!isset($_SESSION['username'])) { header("Location: index.php"); } 

$username = mysqli_fetch_object(mysqli_query($db, "SELECT * FROM users WHERE username = '".$_SESSION['username']."' LIMIT 1")) or die(mysqli_error()); 
echo 'hi "'.$username.'"'; 
+0

嘗試在密碼上使用'md5()',然後在'mysqli_real_escape_string'上輸入它,旁註:use ['password_hash()'](http://php.net/manual/en/ref.password .php)而不是 – Ghost 2014-09-05 03:23:18

+0

@Ghost首先不提示'md5()'! – 2014-09-05 03:24:46

+0

@Ghost它不起作用。 – Holyfuture 2014-09-05 03:27:14

回答

0

嗯......還是不能發表評論。新來的。

您試圖將明文密碼與md5散列密碼相匹配,因此永遠不會匹配。在查詢中使用密碼之前,嘗試重新調整密碼。你總是可以在某處回顯結果,以確保你輸入的內容與保存在數據庫中的內容相匹配。

+0

是的,你不能評論,因爲你還沒有足夠的代表,當你發佈這樣的東西備份一些代碼,並完全回答它 – Ghost 2014-09-05 03:37:02

+0

嘿,第一個問題已修復!我在'$ password = md5($ _ POST ['password']);'$ rows set'之前有了這個腳本。 – Holyfuture 2014-09-05 03:38:22

+1

@Ghost - 謝謝你的提升,我還是習慣了這個。肯定會聽取建議。 Holyfuture - 真棒,很高興它解決了。 – 2014-09-05 03:40:35

0

我有另一個問題。

我的登錄方式可行!現在我在我家。但是,只要我在調用字符串$ username時發出回顯,就會出現以下消息:可捕獲的致命錯誤:類stdClass的對象無法轉換爲第19行中的C:\ xampp \ htdocs \ home.php中的字符串

我的腳本:

if(!isset($_SESSION['username'])) { header("Location: index.php"); } 

$username = mysqli_fetch_object(mysqli_query($db, "SELECT * FROM users WHERE username = '".$_SESSION['username']."' LIMIT 1")) or die(mysqli_error()); 
echo 'hi "'.$username.'"'; 
1

你的第二個問題是因爲:

mysqli_fetch_object返回設置不是字符串結果的當前行。您可以打印或訪問值這樣的:

while ($username= mysqli_fetch_object(mysqli_query($db, "SELECT * FROM users WHERE username = '".$_SESSION['username']."' LIMIT 1"))) 
{ 
printf("%s",$username ->your_column_name); 

} 

LINK

+0

我粘貼了腳本時間。如果我Reloaded用戶名無處不在傳遞我的網站。哪裏有問題? – Holyfuture 2014-09-05 16:09:16

0

你們都從表中選擇,以便改變這樣的:

echo 'hi "'.$username.'"'; 

喜歡的東西:

echo 'hi "'.$username->fieldname.'"'; 

其中字段名稱是包含用戶名的字段的名稱

編輯,因爲我看到他使用的對象不是數組。

相關問題