file_get_contents用于在数据库中插入

时间:2015-03-01 07:26:45

标签: php mysql

我的网站上有两页,其中一页名为" new_account.php"另一个是" visitor.php"。用户可以选择为自己创建一个新帐户,也可以选择访问帐户。

当用户选择"访客"我向" new_account.php"提出了请求。使用随机用户名和密码创建临时帐户,以便在用户完成后删除。我使用file_get_contents作为请求,因为页面返回用于自动登录用户的用户哈希。

这是" visitor.php":

$url = getBaseUrl().'new-account.php';
$data = array(
    'name' => $tempName, 
    'character-name' => $tempCharacterName, 
    'gender' => $tempGender, 
    'age' => $tempAge, 
    'parent-email' => $tempParentEmail, 
    'password' => $tempPassword, 
    'password-confirmation' => $tempPassword,
    'temporary' => TRUE
);

$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data),
    ),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);

var_dump($result);

if($result != "error") {
    User::loginUser($result, TRUE, $conn);
    User::ifUserLoggedRedirect('game.php',$conn);
}

我的问题是,当请求成功并且在数据库中插入新的随机用户时,User :: loginUser尝试使用file_get_contents返回的哈希(例如用户)查询用户数据图标或用户名)我得到一个空的结果集。

User::loginUser就是这样:

public static function loginUser($userHash, $temporary, $conn) {
        if(User::isAnyLogged($conn))
            User::logout($conn);

        User::safeSessionStart();

        $result = $conn->prepare('SELECT p.screen_name, pi.url, p.id FROM player as p, player_icon as pi WHERE p.user_hash=? AND pi.id = p.player_icon_id');
        $result->bind_param('s',$userHash);
        $result->execute();
        $res = $result->get_result();

        if($res->num_rows == 0) {
            die("Invalid user with hash ".$userHash);
        }

        $user_info = $res->fetch_assoc();

        $_SESSION['user'] = new User($userHash, $temporary, $user_info['screen_name'], $user_info['url'], $user_info['id']);

        setcookie('userHash',$userHash);
        setcookie('temporary',$temporary ? '1' : '0' );

        return $_SESSION['user'];
    }

并且调用总是以无效的哈希消亡,但是如果我使用哈希查询用户来自phpmyadmin,那么用户实际上就在那里。通过访问" new_account.php"进行正常注册;也有效。

我尝试的第一件事是在从file_get_contents获得结果后关闭并重新打开连接,但这不起作用。使用mysqli::refresh也无效。我尝试将代码的登录部分移动到" new_account.php"但显然我也无法使用$_SESSION从请求中设置file_get_contents

我也可以通过将新帐户代码复制到访问者页面来解决这个问题,但我宁愿将帐户创建保存在一个页面中。还有什么我可以尝试的吗?

1 个答案:

答案 0 :(得分:0)

您应该使用require_once来包含new-account.PHP

这样,您可以使用所包含文件的代码,就好像它在您包含它的文件中一样。