2015-03-01 3 views
0

У меня есть две страницы на моем сайте, одна называется «new_account.php», а другая - «visitor.php». Пользователь может самостоятельно создать новую учетную запись или просто перейти с учетной записи посетителя.file_get_contents для вставки в базу данных

Когда пользователь выбирает «посетителя», я делаю запрос на «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); 
} 

Моя проблема заключается в том, что, в то время как запрос успешно и новый случайный пользователь вставляется в базу данных, когда пользователь :: 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.

Я также мог бы решить эту проблему, скопировав новый код учетной записи на страницу посетителя, но я предпочел бы сохранить создание учетной записи на одной странице. Есть ли что-нибудь еще, что я могу попробовать?

ответ

0

Вы должны использовать require_once, чтобы включить новый-account.PHP

Таким образом, вы можете использовать код включаемого файла, как если бы это было в файле, откуда вы включите его.

+0

new_account.php также имеет кучу HTML, так как это страница создания учетной записи. Было бы не так просто сделать это. Я мог бы передать создание учетной записи функции и вызвать ot из обоих мест, хотя ... hmm –

+0

Вы всегда должны разделять проблемы. Разделите свою «бизнес-логику» и уровень презентации. Таким образом, у вас больше контроля над обоими без огромных побочных эффектов. – Structed

Смежные вопросы