2009-08-12 12 views
0

PHPでURLの変数を次のページにどのように取得できますか?PHPでGET変数が見つからない理由を見つけるには

ユーザーが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変数の代わりに、セッションハンドラを使用してみてください。コードにいくつかのキーストロークを追加しますが、私の視点では、たくさんのヒダケを保存します。

+0

私がSESSIONハンドラを使用する場合、私は$ _GETで自分のデータをサニタイズする必要はありません。うーん、私はそれを勉強する必要があります。 –

1

は、あなたの$ _GETを印刷して確認するVARSが空の場合は前にヘッダーを作成します。

print_r($_GET); 

をか

$_REQUEST['email'] 

代わりの

$_GET['email'] 

ああしてみてください!その「sendEmailToMe(

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!!'); 

ことが可能です:例えば、有効な$結果がない場合は、あなたが何かをする場合

header($header); 

:と

exit(); 

後に追加することを忘れないでください'FAILED !!') "$ resultが有効であっても実行できます。

+0

私は前に 'exit();'コマンドを使ったことがありません。私はそれをハンドラの最後に置いて、私のページを動かさないようにしました。 handle_a_new_question.phpファイル内でのみ競合が発生することはありません。 –

+0

それは良い習慣です。 – inakiabt

+0

あなたの最初の2つのコマンドは私に 'Array()'だけを与えます。 –

1

確実にデータはPOSTによって送信されます。だから、このように取得することができます。

$_POST['email']

ところで:

  1. は(それはあなたの例で行われていない)リダイレクトを行う前にデータをサニタイズすることを忘れないでください。
  2. あなたのハッシュを "塩"することを忘れたり、安全でないかもしれません。
+0

コードでは準備済みの文であるpg_prepareを使用しているため、ポイント(1)はわかりません。これによりデータが消毒されるはずです。 - 私は初心者ですので、お気軽にコメントしてください。 - (2):私が最初にコードを取得するとき、私はします。 –

+1

header()コールで使用する前に$ _GET変数をHTTP/URLで消毒する必要があります –

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> 

を使用している、隠されたフィールドやフォームのアクションで一緒にこれらの変数を渡しています、最初に$ _GETから$ _POSTからそれらを取り出すことができる2番目のur変数を取り出すことができます。

ユーザーセッションのためにも

、あなたはおそらくクッキーに自分のログイン情報を保存しなければならない、あなたはチャンス

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

+0

これはフォームコードです:http://github.com/vilsu/codes/blob/cb4714b1fd4773e35d140c108ca1b152f90b9a3c/lomakkeet/lomake_ask_question.php –

+0

私は隠れ変数を使用しません。 –

+0

おそらく隠れ変数を使用しているはずです。これらの3つの方法のいずれかを使用して、電子メールとpasshash_md5変数を次のスクリプトに渡す必要があります。 1.クッキーの使用 2.隠し変数の使用 3.フォーム自体 –

関連する問題