2010-03-28 159 views
0

PHP/MySQL新手問題。PHP/MySQL數據庫問題

我有一個數據庫,我已經導入到我的本地phpmyadmin。不過,似乎我無法從我的一個PHP應用程序訪問它。連接字符串似乎是正確的,當我嘗試驗證用戶憑據來訪問數據庫信息時,沒有問題。

然而,驗證每個人都知道我什麼時候放入假憑證。它仍然不會從數據庫中提取任何其他信息。

例如,一旦用戶登錄,他們應該看到類似「Hello hello」這樣的事情。在這一點上,我看到沒有用戶名的「你好」。任何想法,我可能會錯過?

+7

你缺少的一件事是在你的問題中發佈有問題的代碼。通過查看代碼,所有人都可以在同一頁面上看到自己在哪裏以及如何解決問題。 – 2010-03-28 18:47:03

+1

是的,請顯示一些代碼。 – 2010-03-28 18:49:38

+0

'試圖發佈代碼,但操作系統不允許它..爲什麼呢? – queryne 2010-03-28 19:14:01

回答

0

好的抱歉,所有來回的傢伙。這是問題。我有一個PHP應用程序和MySQL數據庫連接(或至少我希望如此...)。我的頁面的標題中有一個表單供用戶登錄。我可以登錄,但我似乎無法從數據庫中提取任何信息。如果我嘗試使用僞造證書登錄,我會收到「不正確的登錄」消息。但是,當我登錄時,它似乎無法從數據庫以外的任何其他憑據。

確定這裏是代碼...

數據庫連接:

<?php 
session_start(); 

# FileName="Connection_php_mysql.htm" 
# Type="MYSQL" 
# HTTP="true" 
$hostname_test = "localhost"; 
$database_test = "girlpower"; 
$username_test = "root"; 
$password_test = "password"; 
$test = mysql_pconnect($hostname_test, $username_test, $password_test) or trigger_error(mysql_error(),E_USER_ERROR); 

mysql_select_db($database_test, $test); 
?> 

這裏的登入碼:

<?php 
require_once("includes/db.php"); 

$userEmail = trim($_POST['userEmail']); 
$password = trim($_POST['password']); 
$userlogin = trim($_POST['userlogin']); 

//print_r($_POST); 

if ($userlogin != "" && $userEmail != "" && password != "" ) 
{ 
    $sql = sprintf("Select * from girlpower where email = '%s' and pwd = '%s'", $userEmail, $password); 

    //echo $sql; 

    $res = mysql_query($sql); 

    if(mysql_num_rows($res) == 0) 
    { 
     //TODO: 
     //redirect.. 

     header("Location: " . $_SERVER['HTTP_REFERER'] . "?fail=1"); 

    } 
    else 
    { 
     $row = mysql_fetch_assoc($res); 
     $_SESSION['recordId'] = $row['recordId']; 
     $_SESSION['firstName'] = $row['firstName']; 

     //echo "success..."; 
     header("Location: " . $_SERVER['HTTP_REFERER']); 

     //print_r($_SERVER); 

    } 

    //print($_SESSION); 

} 
else 
{ 
     header("Location: " . $_SERVER['HTTP_REFERER'] . "?fail=1"); 

} 

這裏就是頭部代碼(這是哪裏形式生活)

<?php 

    $fail = false; 
    if($_GET['fail'] != "") 
    { 
     $fail = true; 
    } 


     if($_SESSION['recordId'] != "") 
    { 
     //get the 1st name 
     $firstName = $_SESSION['firstName']; 
    } 

     ?> 

<div id="header"> 
< SHOULD BE LINK "index.php"></a> 

<div id="ulogin"> 
    <fieldset id="userlogin"> 
     <?php if($firstName == ""){ ?> 
     <form name="loginForm" action="dologin.php" method="post" > 
    <label for="logemail">Members Login: &nbsp;Email</label> <input type="text" 
     name="userEmail" id="logemail" size="15" /> 
     <label for="logpwd">Password</label> <input type="password" name="password" 
       id="logpwd" size="15" /> 
       <input type="submit" name="userlogin" id="login" value="Login" /> 

       <?php if ($fail == true) {?> 
       <span class="error">Incorrect Login</span> 
       <?php }?> 

      </form> 
    </fieldset> 

      <?php 
     } 
    else{ 
    ?> 


<div id="welcome">Welcome <?= htmlentities($firstName) ?> | <SHOULD BE LINK ="seemsgs.php?receiver_id="<?= $_SESSION["recordId"]?> > See Messages</> |<SHOULD BE LINK ="member.php">Update Profile</> | <SHOULD BE LINK ="dologout.php">Logout</a> </div><?php }?> 
</div> 
+0

讓我知道這是否可讀。在之前沒有在OS上發佈代碼。 – queryne 2010-03-28 20:06:52

+0

這很好,但你應該編輯並將它添加到你的問題中,而不是在這裏發佈(這是頁面的'答案'部分) – 2010-03-28 20:10:49

0

我注意到你正在使用root用戶(儘管我不確定這是否僅僅用於發佈目的而添加)。根據你使用的託管環境,這可能會也可能不是問題 - 一些共享主機迫使您爲MySQL中的數據庫分配用戶。

從你的查詢應該執行的東西的外觀和至少返回一些行。在結果數組上使用您嘗試過的print_r?如果是這樣,你能發佈輸出嗎?

如果您成功從數據庫中獲取結果,我沒有看到您的發佈代碼中的任何地方有條件迴應成功消息。您可能需要根據您分配的$ _SESSION超全局鍵(recordID和firstName)檢查isset(),如果true,則回顯出成功消息(如果尚未這樣做)。

只是一個想法 - 我注意到你正在使用sprintf格式化你的查詢 - 它可能有點太強大,你試圖完成,但使用PDO來獲取參數化的SQL查詢是一個不錯的方法在可用的情況下完成這項工作。 Introduction to PHP 5 PDO