2013-04-01 71 views
2

我很新的PHP和MySql,像大多數初學者我試圖利用我學習的東西,所以我試圖做一個簡單的登錄/註銷系統。MySQL/PHP/PHPMydamin錯誤

我已經下載了WAMP,使我的數據庫在PHPMyAdmin和我的表等等,但我無法讓我的PHP代碼識別數據庫中的數據,我只是'查詢失敗'!我當然可以連接數據庫,並我不認爲問題出在數據庫上,而是我的登錄文件!我已經看過大量不同的教程,但是我仍然無法得到這個工作。我真的很感激,如果有人能指出我在正確的方向!

如果有人想玩弄我的代碼多數民衆贊成罰款我在數據庫中的字段有:ID,用戶名,密碼,姓,名(ID是自動增量主鍵)

我login文件是

<?php 
    //require 'core.inc.php'; 
    //echo $current_file; 

    if (isset($_POST['username'])&& isset ($_POST['password'])){ 
     $username= $_POST['username']; 
     $password= $_POST['password']; 

     if (empty ($username)&&empty ($password)){ 
      echo 'supply username and password'; 
     } 

     $query = "SELECT * FROM 'test1' WHERE 'username'='$username'AND 'password'='$password'"; 
     $result= mysql_query($query); 

    if($result) { 
      if(mysql_num_rows($result) > 0) { 
       //Login Successful 
       session_regenerate_id(); 
       $member = mysql_fetch_assoc($result); 

       $_SESSION['SURNAME_NAME'] = $member['username']; 
       $_SESSION['SESS_ID'] = $member['password']; 
       session_write_close(); 

       exit(); 
      }else { 
       //Login failed 
       echo 'user name and password not found'; 
       $errflag = true; 
       if($errflag) { 
        $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
        session_write_close(); 

        exit(); 
       } 
      } 
     }else { 
      die("Query failed"); 
     } 

    } 

?> 

    <form method="POST"> 
    Username: <input type = "text" name="username"> Password: <input type ="password" name="password"> 
    <input type="submit" value="Log in"> 
    </form> 

和我的連接數據庫文件(我已刪除了我的目的密碼):

+1

你需要在查詢中使用反單引號周圍的表/字段名...而不是單引號 – SomeSillyName

+1

如果你是新的PHP/SQL,它會更容易讓你不學'mysql_ *'函數,而不是MySQLi或PDO –

回答

-1

我注意到,在比如你的「形式」的標籤不包含一個Action參數,也許這是一個問題。如果它是故意的,那麼忽略。

您應該將action="siteexample.php"作爲處理論壇數據的頁面。

這有幫助嗎?

+0

不,這是真正的錯誤的做法,但它會起作用,不會提供一個動作將發佈到所有瀏覽器中的當前頁面(我已經測試過) – user1416256

+0

除了somesillyname的答案之外,倒退看起來像這樣: ' – zingzing45

+0

噢該死了......我會尋找另一種解決方案! – zingzing45

0

更改die('....');echo mysql_errno() . ": " . mysql_error(); exit();以查看正在發生的事情。此外,請勿在實際應用程序中使用此示例代碼。它不安全,因爲它不驗證輸入。

至少做這樣的事情:

$sql = "SELECT * FROM bla WHERE x = '".mysql_real_escape_string($_POST['x'])."'"; 
1
$query = "SELECT * FROM test1 WHERE username = '$username' AND password = '$password'"; 

$query = "SELECT * FROM `test1` WHERE `username` = '$username' AND `password` = '$password'"; 
0

的問題了很多!這裏是一個固定的代碼做是正確的:

ini_set('display_errors', 1); 
$database="******"; 
$host="localhost"; 
$table1="install_crawler"; 
$data_username="**********"; 
$data_password="*********"; 
$linkos = mysql_connect("$host", "$data_username", "$data_password") or die('no connection -'.mysql_error()); 
mysql_select_db("$database") or die('no connection -' .mysql_error()); 
session_start(); 

if (isset($_POST['username'])&& isset ($_POST['password'])) { 
      $username= mysql_real_escape_string($_POST['username']); 
      $password= mysql_real_escape_string($_POST['password']); 
      if (empty ($username)&&empty ($password)) { echo 'supply username and password <br />'; } 
      else { 
        $query = "SELECT * FROM $table1 WHERE username='$username' AND password='$password'"; 
        $result = mysql_query($query) or die ("Query problem!".mysql_error());   
      } 
     } 

if(isset($result)) { 
    $member = mysql_fetch_row($result); 
    if(isset($member[0])) //0 - is the first col of the table, 1 is the second etc.... 
     { 
      //Login Successful - do your stuff - call your functions. 
      echo "SUCCESS LOGIN!".$member[0]; 
      exit; 
     } 
     else 
     { 
      //Login failed - do your stuff - call your functions. 
      echo 'User-name Or Password NOT Correct! Try agian: <br />'; 
      echo '<form method="POST"> 
       Username: <input type = "text" name="username"> Password: <input type ="password" name="password"> 
       <input type="submit" value="Log in"> 
       </form>'; 
      exit; 
     } 
    } 
    else 
    { 
    echo '<form method="POST"> 
     Username: <input type = "text" name="username"> Password: <input type ="password" name="password"> 
     <input type="submit" value="Log in"> 
     </form>'; 
    } 

注:

  1. 你應該使用* .mysql_error()*。並將其添加到您的DIE()語句中。
  2. 在輸入表名& col's時不要使用單引號。使用:* $ result = mysql_query($ query)或者死(「Query problem!」。mysql_error()); *
  3. 使用mysql_real_escape_string()來避免和逃避SQL特殊字符。 (重要)。

在編輯的代碼中查看其餘部分。

玩得開心!

0
$query = "SELECT * FROM test1 WHERE username='".$username."'AND password='".$password."'"; 
$result= mysql_query($query); 

我總是把我的變量從字符串中分離出來並像上面那樣將它們追加在一起。

您可能需要使用上述

if($result) echo "success"; 
else echo mysql_error(); 

你的MySQL的代碼將聲音後,再開始與下面的測試。如果你使用sql特性創建一個sql語句,我將向你指出PHPMyAdmin有一個創建php代碼按鈕的方向。