2009-08-12 4 views
0

Как вы можете получить переменные в URL-адресе на следующей странице в PHP?Чтобы найти причину отсутствия переменных GET в PHP

Пользователь находится в URL

http://localhost/codes/index.php?ask_question&[email protected]&passhash_md5=202cb962ac59075b964b07152d234b70 

Он посылает вопрос, и он переходит к следующему URL, где переменные потеряли свои значения по неизвестной причине.

http://localhost/codes/index.php?question_sent&email=&passhash_md5= 

Следующий код является кодом handle_a_new_question.php.

$result = pg_prepare($dbconn, "query77", "INSERT INTO questions 
    (body, title, users_user_id) 
    VALUES ($1, $2, $3);"); 
$result = pg_execute($dbconn, "query77", array($body, $title, $user_id)); 

if(isset($result)) { 
    $header = ("Location: /codes/index.php?"                                       
     . "question_sent" 
     . "&" 
     . "email=" 
     . $_GET['email']    // this seems to be correct to me 
     . "&" 
     . "passhash_md5=" 
     . $_GET['passhash_md5']  // this seems to be correct to me too 
     ); 
    header($header); 
    } 

Вы видите какую-либо ошибку в коде?

ответ

1

Попробуйте использовать сеансовые обработчики вместо переменных GET , Это добавляет несколько нажатий клавиш к вашему коду, но, с моей точки зрения, сэкономит вам много headeache.

+0

Если я использую обработчики SESSION, мне не нужно дезинфицировать мои данные в $ _GET. Хм ... Мне нужно это изучить. –

1

Распечатайте $ _GET и проверить, если вары пусты, прежде чем создать заголовок:

print_r($_GET); 

или попробовать с

$_REQUEST['email'] 

вместо

$_GET['email'] 

Oh! и не забудьте добавить

exit(); 

после:

header($header); 

Если вы делаете что-то, если нет действительного $ результата, например:

if(isset($result)) { 
    $header = ("Location: /codes/index.php?"                                       
     . "question_sent" 
     . "&" 
     . "email=" 
     . $_GET['email']    // this seems to be correct to me 
     . "&" 
     . "passhash_md5=" 
     . $_GET['passhash_md5']  // this seems to be correct to me too 
     ); 
    header($header); 
    } 

    sendEmailToMe('FAILED!!'); 

Возможно, что «sendEmailToMe ('FAILED !!') "может выполняться, даже если $ result действителен.

+0

Я никогда не использовал команду 'exit();' before. Я поставил его до конца моих обработчиков, и это заставило мои страницы не работать. Это не вызывает конфликтов только в файле handle_a_new_question.php. –

+0

Это хорошая практика. – inakiabt

+0

Ваши две первые команды дают мне только 'Array()'. –

1

Обязательно данные отправляются POST. Таким образом, он может быть получен следующим образом:

$_POST['email']

КСТАТИ:

  1. не забудьте дезинфицировать данные, прежде чем делать перенаправление (это не делается в вашем примере).
  2. не забудьте «солить» свой хэш, или это может быть небезопасно.
+0

Я не понимаю пункт (1), так как в коде используется pg_prepare, который является подготовленным оператором. Это должно дезинформировать данные. - Я новичок, поэтому не стесняйтесь комментировать. - (2): Когда я получу мой код, я начну работать. –

+1

Вам нужно, чтобы HTTP/URL-адрес санировал переменные $ _GET перед их использованием в вызове header() –

3

Как выглядит код формы? проблема находится на странице, которая направляет вас на страницу question_sent, а не на самой странице question_sent.

вы передавая эти переменные вместе в скрытых полях или в действии формы, например

<form method="post" action="index.php?question_sent&email=<?php echo $_GET['email']?>&passhash_md5=<?php echo $_GET['passhash_md5']?>"> 

или вы используете скрытые переменные

<form method="post" action="index.php?question_sent"> 
    <input type="hidden" name="email" value="<?php echo $_GET['email']?>" /> 
    <input type="hidden" name="passhash_md5" value="<?php echo $_GET['passhashmd5']?>" /> 
    ... 
</form> 

, потому что любой из тех, кто должен работать, то сначала вы можете получить переменные ur из $ _GET, которые вы можете получить из $ _POST.

также для пользовательских сеансов, вы, вероятно, следует хранить их данные для входа в куки, посмотрите на это, когда вы получаете шанс

http://www.tizag.com/phpT/phpcookies.php

+0

Это код формы: http://github.com/vilsu/codes/blob/cb4714b1fd4773e35d140c108ca1b152f90b9a3c/lomakkeet/lomake_ask_question.php –

+0

Я не использую скрытые переменные. –

+0

, вероятно, вы должны использовать скрытые переменные. вы должны передавать переменные email и passhash_md5 через следующий скрипт, используя один из этих трех методов, в порядке правильности: 1. использование файлов cookie 2. использование скрытых переменных в форме 3. в атрибуте действия сама форма –