2013-04-06 277 views
0

我爲用戶創建了配置文件,以便用戶登錄時將其重定向到他們自己的配置文件頁面。重定向登錄用戶

login.php中(僅相關代碼)

$MemberID = user_id_from_username($username); 
     $_SESSION['MemberID'] = $username; 
     header('location: member.php?username='.$username); 

member.php

if (logged_in() === true){ 
     echo "Welcome, ".$_SESSION['MemberID']. "!<br><a href='logout.php'>Logout</a>\n<a href='index.php'>Back to homepage</a></p>"; 
    } 

    if(isset($_GET['username']) === true & empty ($_GET['username']) === false) { 
     $username = $_GET ['username']; 
     //check if user actually exisits 
     if (user_exists($username) === true) { 
     //get username from user id 
      $MemberID = user_id_from_username($username); 
      $profile_data =user_data($MemberID,'Name','Address','Postcode','DOB','Mobile','CoinsAvailable','Email','profile','OddJobName','Description','CoinValue','DaysAvailable');//Need to pull out stuff from oddjob table 
      echo $MemberID; 
     }else{ 
      protect_page(); 
     } 
} 

相關功能:

function user_data($MemberID){ //pass in memberid to get info about user 
     $data = array();//data to be returned 
     $MemberID =(int)$MemberID;//creating int from this input 

     $func_num_args = func_num_args(); //count number of arguments from user data on init.php 
     $func_get_args = func_get_args(); 

     if ($func_num_args >1) { //if more then 1, unset the first element of array 
      unset($func_get_args[0]); 

      $fields = '`' . implode('`,`', $func_get_args) . '`'; //taking array and converting to string 

      $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `member`,`oddjob` WHERE member.MemberID = oddjob.MemberID AND member.MemberID = $MemberID"))or die (mysql_error()); 
       //echo $MemberID; 
       return $data; 

     } 
} 

function logged_in() { 
    return (isset($_SESSION['MemberID'])) ? true : false; //Email 
} 



if (logged_in() ===true) { 
    $session_MemberID = $_SESSION['MemberID'];//grabbing value from login 
    $user_data= user_data($session_MemberID,'MemberID','Name','Address','Postcode','DOB','Mobile','CoinsAvailable','Email','Password','RepeatPassword','OddJobName','Description','DaysAvailable','profile'); 
    exit(); 
    } 

所有這些代碼允許用戶被重定向到其自己的頁面,當他們登錄他們的名字時會顯示其他$profile_data信息。現在我希望用戶能夠通過點擊update_info.php鏈接更新他們自己的信息。但我不知道如何讓會員用戶名出現在當他們參觀update_info.php登錄時,像它的URL

在會員頁面(其中鏈接),我試過。

<a><?php header('location:update_info.php?username='.$username)?>">Update info</a></p> 

但現在當用戶登錄時,他們被重定向到update_info.php而不是member.php。有誰能告訴我如何解決這個問題嗎?謝謝。

+1

PFF你想讓我開始評論這段代碼....讓我們從'loggedIn()'定義的地方開始吧?你對它進行了測試,但是我看不到這個功能。其次:爲什麼在''-tag內有'header()'? – stUrb 2013-04-06 14:57:02

+0

@stUrb對不起,忘了添加日誌功能。我所有的函數都在一個名爲init.php的獨立文件中,該文件包含在所有頁面的頂部。原來我在那裏有href,忘記刪除標籤,表示歉意。 – Lairds 2013-04-06 15:04:04

回答

1

你的意思是:

<a href="update_info.php?username=<?php echo $username; ?>">Update info</a> 

這傳遞$用戶名到update_info.php頁面

1

也許你想寫這個?

<a href="update_info.php?username=<?php echo $username ?>">Update info</a></p> 
+0

謝謝你,現在覺得這應該是這麼簡單! – Lairds 2013-04-06 15:08:01

1

所有權利。
讓我們解釋一下如何構建基本認證的基礎知識。然後將其擴展到安全的地方:)

1 - 用戶登錄:您檢查數據庫,如果憑據是好的。
如果是 - >$_SESSION['loggedIn'] = true;

2 - 在每個頁面上,您要檢查該用戶是否已登錄;你把支票:
if(!$_SESSION['loggedIn']) { header('location:login.php');}

有些耐人尋味: 你不想來存儲「只是」一個在客戶方,以檢查是否登錄布爾你最好生成一個隨機的會話ID字符串。將其存儲在數據庫中並將此ID存儲在$_SESSION['loggedin']中。現在,您不需要對$_SESSION['loggedIn']的值進行簡單檢查,而是查找數據庫中存儲的會話ID以查找存在的可用性和可用性。

Post Scriptum:
不要在函數中嵌套函數。
$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM成員, oddjob WHERE member.MemberID = oddjob.MemberID AND member.MemberID = $MemberID"))or die (mysql_error());

這不是可讀對於我們,尤其是不適合你。使用mysql_* functions在PHP
停止:你最好把它寫這樣的:

$sql = "SELECT $fields FROMmember,oddjobWHERE member.MemberID = oddjob.MemberID AND member.MemberID = $MemberID"; 
$res = mysql_query($sql) or die(mysql_error()); 
$data = mysql_fetch_assoc($res); 

員額scriptum。請參閱this website上的紅色框?這些功能不再受支持。你最好開始使用PDO;其中順便也有一些檢查(mysql注入)標準內置;以及更多!