2013-04-03 64 views
-1

我想創建一個登錄頁面,但它不起作用。任何人都可以看到錯誤。謝謝在php中登錄頁面Mysql

我有一個數據庫,我有3行電子郵件 - 密碼 - custermer_id。

<? 
$email = $_POST['email']; 
$password= $_POST['password']; 
$login = $_POST['login']; 
$user_custermers_id = $_GET['id']; 

if($login = 'yes') 
{ 
    global $wpdb; 

    $get = mysql_query("SELECT * FROM das_custermer_users WHERE email = '$email' AND password = '$password'") or die(mysql_error()); 

    $result = mysql_result($get, 0); 
    if($result != 1) 
    { 
     $msg = "WRONG MESSEGE"; 
    } 
    else 
    { 
     session_start(); 
     $_SESSION['email'] = $email; 
     header("location: http://tgdashboard.com"); 
    } 
} 
?> 

我的HTML

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <div class="header"> 
     Loginoplysninger 
    </div> 
    <div class="row"> 
     <label for="user">E-mail:</label> 
     <input type="text" name="user" id="user" value=""> 
    </div> 
    <div class="row"> 
     <label for="pass">Password:</label> 
     <input type="password" name="pass" id="pass" value=""> 
    </div> 
    <div class="row"> 
     <input type="submit" name="login" value="Login"> 
+2

你得到什麼錯誤? –

+0

歡迎使用堆棧溢出。請解釋您的代碼如何失敗。你不應該只是轉儲代碼,並讓我們猜測。 –

+2

首先,你正在使用'mysql'函數 - 不這樣做 - 使用更新的東西,而不是像PDO。其次,你不使用wordpress數據庫句柄'$ wpdb'。改爲使用它。第三,當你將它們粘貼到你的SQL查詢中時,你不會逃脫你的字符串,這使得你的代碼非常可惡。 – h2ooooooo

回答

2

的問題是,你已經給的Login一個value在這裏你提交按鈕

<input type="submit" name="login" value="Login">而你檢查,如果登錄是yes這裏

$login = $_POST['login']; 
$user_custermers_id = $_GET['id']; 



    if($login = 'yes'){ 

所以,你正在檢查,如果值是yes當你已經設置值Login

如下的用戶,已經注意到if($login = 'yes'){意味着你分配你應該這樣做

$login = $_POST['login']; 
    $user_custermers_id = $_GET['id']; 



     if($login = 'Login'){ 

此外,值爲yes至變量$login,這意味着,如果您想檢查是否必須使用==運算符,請改爲。像if($login == 'yes'){

+3

'if($ login ='yes')'** will always ** be'true',因爲他沒有比較兩者,而是將'$ login'設置爲'yes'。使用'=='或'==='進行比較。 – h2ooooooo

+0

@ h2ooooooo修好了。 – samayo

1

使用此代碼它可能會爲你工作..因爲我已經改變這wordpress.pls檢查這一點。

<?php 
    session_start(); 
    $email = $_POST['user']; //$_POST['email']; 
    $password= $_POST['pass']; //$_POST['password']; 
    $login = $_POST['login']; 
    $user_custermers_id = $_GET['id']; 

    if($login == 'Login' || isset($login)) 
    { 
     global $wpdb; 

     /*$get = mysql_query("SELECT * FROM das_custermer_users WHERE email = '$email' AND password = '$password'") or die(mysql_error()); 
     $result = mysql_result($get, 0);*/ 
     $get = $wpdb->get_row("SELECT * FROM das_custermer_users WHERE email = '$email' AND password = '$password'", ARRAY_A); 
     if ($get != null) 
     { 
      // do something with the link 
      $_SESSION['custermer_id'] = $get->das_custermers_id; 
      $das_custermer_id = $get->das_custermers_id; 
      $_SESSION['email'] = $email; 
      //echo 'custermer-id'.$get->das_custermers_id.'custermer-idbysession'.$_SESSION['custermer_id'].'email'.$email.'emailby session'.$_SESSION['email']; 
      header("location: http://tgdashboard.com?das_custermers_id=".$das_custermer_id); 
     } 
     else 
     { 
      // no link found 
      $msg = "WRONG MESSEGE"; 
     } 
    } 
?> 

這裏試試這個它會爲你工作..

<?php 
session_start(); 
$email = $_POST['user']; //$_POST['email']; 
$password= $_POST['pass']; //$_POST['password']; 
$login = $_POST['login']; 
$user_custermers_id = $_GET['id']; 

if($login == 'Login' || isset($login)) 
{ 
    global $wpdb; 

    $get = mysql_query("SELECT * FROM das_custermer_users WHERE email = '$email' AND password = '$password'") or die(mysql_error()); 

    //$result = mysql_result($get, 0); 
    $result = mysql_num_rows($get); // try this.. 
    if($result == 0) 
    { 
     $msg = "WRONG MESSEGE"; 
    } 
    else 
    { 
     //session_start(); 
     $_SESSION['email'] = $email; 
     header("location: http://tgdashboard.com"); 
    } 
} 
?> 
+0

它顯示錯誤MESSEGE ...:/ –

+0

我不明白爲什麼..:/ –

+0

我不明白爲什麼我得到錯誤消息...但如何可以$結果是1 ..? –

1

好了,幾件事情,因爲我也是在我的評論說。

首先,你使用mysql_query,但顯然使用WordPress(global $wpdb)(WordPress的不使用這些功能,他們是過時的和不提倡使用,please read this和使用$wpdb->get_results()函數來代替)。

其次,你不逃避自己的輸入,這意味着我可以輸入一個電子郵件是' OR email = '[email protected]'; --並登錄,我想任何用戶。在wordpress中,您正在尋找$wpdb->escape()或查看prepared statements in wordpress

第三,請不要使用短標記(<?)如你不能肯定他們在部署此代碼的所有PHP CONFIGS啓用。更好地堅持與<?php

第四,如其他人所說的你「比較」(見第五)$loginyes,但它從來都不是肯定的,因爲你的提交按鈕的值是Login

第五,你不比較$loginyes,你設置$loginyes。使用==來代替比較。

所以最終的推薦代碼應該是這個樣子:

<?php 
    $email = $_POST['email']; 
    $password= $_POST['password']; 
    $login = $_POST['login']; 
    $user_custermers_id = $_GET['id']; 

    if($login == 'Login') //Changed to == and 'Login' 
    { 
     global $wpdb; 

     //Changed to actually use $wpdb instead and get_results and escaping variables 
     $get = $wpdb->get_results("SELECT * FROM das_custermer_users WHERE email = '" . $wpdb->escape($email) . "' AND password = '" . $wpdb->escape($password) . "'"); 

     //As $wpdb works different, use this 
     if (!empty($get)) { 
      session_start(); 
      $_SESSION['email'] = $email; 
      header("location: http://tgdashboard.com"); 
     } else { 
      $msg = "WRONG MESSAGE"; 
     } 
    } 
?> 
+0

謝謝。 。但它不起作用..:/我不能看到什麼是錯誤:( –