0

我已经为用户创建了配置文件,这样当用户登录时,他们就会被重定向到他们自己的配置文件页面。

login.php(仅相关代码)

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

成员.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。谁能告诉我如何解决这个问题?谢谢。

4

3 回答 3

1

也许你想写这个?

<a href="update_info.php?username=<?php echo $username ?>">Update info</a></p>
于 2013-04-06T14:57:34.740 回答
1

你的意思是:

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

这会将 $username 传递给 update_info.php 页面

于 2013-04-06T14:57:55.040 回答
1

好的。
让我们解释一下如何构建 -basic- 身份验证的基础知识。然后将其扩展到安全的:)

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成员,怪事WHERE member.MemberID = oddjob.MemberID AND member.MemberID = $MemberID"))or die (mysql_error());

这对我们来说是不可读的,但对你来说尤其不可读。你最好这样写:

$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);

Post Post Scriptum:
停止使用mysql_* functionsin php.ini 文件。看到这个网站上的红框了吗?不再支持这些功能。你最好开始使用 PDO;顺便说一句,其中还内置了一些检查(mysql注入)标准;以及更多!

于 2013-04-06T15:08:01.657 回答