2016-11-19 5 views
-1

私はPHPの$ _SESSION varsの基本を理解しています。私は現在、SQLクエリを管理するページ間でいくつかの値を渡すサイトを持っています。私は新しい問題に遭遇しました:セッションバースで電子メールを渡す方法

私はユーザテーブルの主キーとして電子メールアドレスを使用しています。この電子メールを2番目のページに渡したい(追加の情報がサーバーから収集されると)、リンクが選択されるとコンテンツが動的に読み込まれます。 が// $します。FNameは=ボブ、$ LNAME =ロジャース、$メール= [email protected]

$_SESSION['userEmail'] = $Email; 
$_SESSION['FirstName'] = $FName; 
$_SESSION['LastName'] = $LName; 

私はロードすると:

//データがサーバから返された:これは私の問題のための私の設定です2番目のページのコンテンツは、私はこれらの値を受け取る:

echo $_SESSION['userEmail']; //[email protected]_com !!!!! THIS is not correct 
echo $_SESSION['FirstName']; //bob 
echo $_SESSION['LastName']; //rogers 

電子メールは、ページのPOSTフォームから収集されます。それはフォーム内の唯一の値です。最初のページでは、 "$ _SESSION ['userEmail'] = $ Email"がどこから来るのかを指定して、end(array_keys($ _ POST))を使用してメールを取得します。もっと具体的には、:: $ _SESSION ['userEmail'] = end(array_keys($ _ POST))::

電子メールは変換されずに要求を安全に通過できるようにするにはどうすればよいですか?

さらにトラブルシューティングを行った後、この変換がフォームのPOST要求で行われたと判断できました。クリックするとフォームはPHPのif($ _ SERVER ['REQUEST_METHOD'] == 'POST'){}を使用してインターセプトされるPOSTメソッドを使用しています(ここでは、 ) - ここで電子メールが変換されます。

+0

PHPは '.'を' _'に置き換えません。あなたはもっと多くのコードがここに続いていると思います。 – Xorifelse

+0

ありがとう@Xorifelse。もっと深く説明するために改訂しました。 – Jstngoulet

+0

私はあなたが何を求めているのか明確ではない。もっと説明していただけますか? –

答えて

0

私は回避策を考え出し:

をあなたがメールを持っている場合、あなたが文字を置き換えることができます「」異なる文字列で;これは普通の電子メールアドレスでは見つからないものです。私は - # - は(一般的に)うまくいくものだと分かった。これは私がそれをやった方法です:私は私の場合($ _、SERVER [ 'REQUEST_METHOD'] == 'POST'){}関数に行ったときに次に

$TempFormat = strtr($row['UserEmail'], array('.' => '-#-')) 

、私は(うまくいけば)それに戻って文字列を変換します

$OriginalFormat = strtr(end(array_keys($_POST)), array('-#-' => '.')) 
+0

@toschoが参照していたものは、html入力name属性に '.' charを使用しています。値として、それは解析されていなくてはならない。 – Xorifelse

0

私は検索して、このことがXampp localhost.Thisに役立つことを確認しました。

/** 
    * Return parsed body in array format (without converting dots and spaces to underscore). 
    * @return array result parsed 
    */  
    function fetch_parsed_body_nodots() 
    { 
     function DANODOT($string) { 
      $bes1= explode("&", $string); 
      foreach ($bes1 as $bes2) { 
       $bes2= explode("=",$bes2); 
       list($kilil, $beha) = array_map("urldecode", $bes2); 
       if(!empty($kilil)){ 
        $te[$kilil] = $beha; 
       } 
      } 
      return $te; 
     } 
     return DANODOT($this->result_body); 
    } 

http://forum.directadmin.com/showthread.php?t=48001

+0

私はあなたの例の違いを理解していません。 bob @ rogers_comを[email protected]にどのように変換しますか? – Jstngoulet

+0

変換が必要ですか? –

+0

不幸にも、電子メールに元々アンダースコアが含まれていた場合、この機能は動作しません。たとえば、[email protected]は[email protected]に変換され、その後、あなたの方法を使用して、bobrogers @ rogerscom – Jstngoulet

0

あなたは、このようなハッシュ、エンコードなど、 として変換されないテキストを使用したい場合は、電子メール、主キーの代替キーの代替を使用してみてください。

各行のauto_incrementインデックスキーからヒットすることができます。

は前に:

select * from users where email = '[email protected]'; 

後:

select * from users where id in (select id from users where email = '[email protected]'); 

幸運:

select * from users where id = '1'; 

これはあるに等しいです。

関連する問題