2013-03-11 17 views
1

嘿所有即時通訊與一個簡單的會員制度掙扎。我編寫了一段時間,但沒有太多的PHP(主要是Java),所以將不勝感激任何幫助或建議看什麼。我似乎總是過目簡單的錯誤,雖然我已經在一個語法檢查器檢查的話我敢肯定它的東西很細微的PHP會員登錄系統(是的,再次)

這裏不用..

我的login.php文件允許用戶登錄,如果他們有一個用戶名和密碼,如果沒有發送適當的答覆。但是,當我使用現有的用戶名和密碼登錄時,它會轉到下一頁顯示您的姓名和鏈接以轉到成員部分,但是單擊鏈接時,成員部分似乎不會識別我的$ _SESSION值,因此要求用戶再次登錄。

<?php 
error_reporting (E_ALL^E_NOTICE); 
session_start(); 
$userid = $_SESSION['$userid']; 
$username = $_SESSION['$username']; 
?> 
<html> 
<head> 
<title>Member system - login</title> 
</head> 
<body> 
<?php 
    $form = "<form action='./login.php' method='post'> 
    <table> 
    <tr> 
     <td>username :</td> 
     <td><input type='text' name='user'/></td> 
    </tr> 
    <tr> 
     <td>password :</td> 
     <td><input type='password' name='password'/></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><input type='submit' name='loginbtn' value='Login'/></td> 
    </tr> 
    </table> 
    </form>"; 

if($_POST['loginbtn']) { 
    $user = $_POST['user']; 
    $password = $_POST['password']; 

    if($user) { 
     if($password) { 
      require("connect.php"); 

      $password = md5(md5("12345".$password."54321")); 
      //make sure login info correct 
      $query = mysql_query("SELECT * FROM user WHERE username='$user'"); 
      $numrows = mysql_num_rows($query); 

      if($numrows == 1) { 
       $row = mysql_fetch_assoc($query); 
       $dbid = $row['id']; 
       $dbuser = $row['username']; 
       $dbpass = $row['password']; 
       $dbactive = $row['active']; 

       if($password == $dbpass) { 
        if($dbactive == 1) { 
         //set seesion info 
         $_SESSION['userid'] = $dbid; 
         $_SESSION['username'] = $dbuser; 

         echo "you have been logged in as <b>$dbuser</b> <a href='./member.php'>click here</a> to go to the member page"; 
        } 
        else 
         echo "You must be an active member. $form"; 
       } 
       else 
        echo "you did not enter the correct password. $form"; 
      } 
      else      
       echo "The user name you entered was not found. $form"; 

      mysql_close(); 
     } 
     else 
      echo "you must enter your password. $form"; 
    } 
    else 
     echo "you must enter a user name. $form"; 
    } 
else 
echo $form; 
?> 

這是我的登錄表單這確實大部分工作

<?php 
error_reporting (E_ALL^E_NOTICE); 
session_start(); 
$userid = $_SESSION['$userid']; 
$username = $_SESSION['$username']; 
?> 
<html> 
<head> 
<title> Member system : Members</title> 
</head> 
<body> 
<?php 
    if($username && $userid) { 
     echo "Welcome <b>$username</b>, <a href='./logout.php'>logout</a>"; 
    } 
    else 
     echo "Please login in to veiw this page <a href='./login.php'>Login in</a>"; 

?> 
</body> 
</html> 

的這是我的會員形式,這似乎不承認會話,並要求用戶再次登錄。

我知道這是對某人而言很尷尬的表現,我對我的無知表示歉意,但我會從中學習,所以如果有人能幫助生病,我會非常感激。

問候 邁克

+1

爲什麼使用包含美元符號的會話變量?這令人困惑,並可能導致錯誤。 '$ _SESSION ['$ userid'];'== BAD JOO JOO。 – 2013-03-11 20:28:38

+0

你的密碼系統讓我畏縮。我認爲比明文更好!請查看:[爲什麼常見的散列函數如md5()和sha1()不適合密碼? ](http://php.net/manual/en/faq.passwords.php) – mkaatman 2013-03-11 20:28:56

+0

又一次它的事情如此愚蠢是爲什麼我使用$ _SESSION ['$ userid'];感謝您的快速回復人們不能相信這很簡單。感謝Cillosis砸錢。並感謝您的提示mkaatman我正在尋找它,因爲我鍵入。很大的幫助,我想我會被屠殺。 – Mike 2013-03-11 20:32:52

回答

1

首先,有一點點失誤。在第一個腳本中使用$ _SESSION ['userid'],在第二個腳本中使用$ _SESSION ['$ userid](在密鑰中包含一美元)。

我完全不知道這是否解決您的問題,而是試圖取代:

if($username && $userid) { 

與此:

if(isset($_SESSION['userid'],$_SESSION['username'])) { 

問候Jokus!

+0

是的,他們都工作得很好,雖然它的工作也沒有if(isset($ _SESSION ['userid'],$ _ SESSION ['username'])){。再次感謝很多愛。 – Mike 2013-03-11 21:37:00

+0

很高興幫助你;)請將問題標記爲已回答 – Jokus 2013-03-12 15:15:03