2016-11-19 4 views
-1

Я понимаю основы $ _SESSION vars в php. В настоящее время у меня есть сайт, который передает несколько значений на страницы, которые управляют SQL-запросами. У меня возникла новая проблема:Как отправлять электронные письма в сеансах Vars

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

// Данные, возвращаемые с сервера: // $ FName = боб, $ LName = Rogers, $ Email = [email protected]

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

Когда я загружаю содержание на второй странице, я получаю эти значения:

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

Электронная почта собирается из формы POST на этой странице. это единственное значение в форме. На первой странице я получаю электронное сообщение с помощью end (array_keys ($ _ POST)), откуда появляется «$ _SESSION ['userEmail] = $ Email". Это, более конкретно, :: $ _SESSION ['userEmail'] = end (array_keys ($ _ POST)) ::

Как сделать так, чтобы электронная почта была передана безопасно через запрос без преобразования?

После дальнейшего устранения неполадок я смог определить, что это преобразование происходит в запросе POST формы. При нажатии на форму используется метод POST, который перехватывается на PHP, используя if ($ _ SERVER ['REQUEST_METHOD'] == 'POST') {}, где я беру массив значений (в моем случае только один адрес электронной почты) - где теперь электронная почта трансформируется.

+0

PHP не заменяет '.' на' _' самостоятельно. У вас здесь больше кода, и вы думаете. – Xorifelse

+0

Спасибо @Xorifelse. Я переработал, чтобы объяснить более подробно. – Jstngoulet

+0

Я не понимаю, о чем вы просите. не могли бы вы объяснить больше? –

ответ

0

Я понял, обходным:

Если у вас есть электронная почта, вы можете заменить символы «» с другой последовательностью символов; это то, что не было бы найдено в обычном адресе электронной почты. Я обнаружил, что - # - является достойным, который работает (как правило).Это, как я это сделал:

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

Затем, когда я пошел к моему если ($ _ SERVER [ 'REQUEST_METHOD'] == 'POST') функция {}, я преобразовал строку обратно в это (надеюсь) оригинальное состояние:

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

Что @toscho имел в виду, использует символ '.' в атрибуте имени ввода html. В качестве значения он должен быть проанализирован, незапятнан. – Xorifelse

0

У меня есть поиск и обнаружение этой вещи в Xampp localhost.Это будет полезно.

/** 
    * 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 = '1'; 

Это равняется:

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

Удачи.

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