我理解PHP中$ _SESSION变量的基础知识。我目前有一个站点,可以在整个页面中传递几个值来管理SQL查询。我遇到了一个新问题:
我在用户表中使用电子邮件地址作为主键。我希望将此电子邮件传递到第二页(一旦从服务器收集额外的信息),并在选择链接时动态加载内容。这是我对我的问题的设置:
//从服务器返回的数据: // $ FName = bob,$ LName = rogers,$ Email = bob@rogers.com
$_SESSION['userEmail'] = $Email;
$_SESSION['FirstName'] = $FName;
$_SESSION['LastName'] = $LName;
当我在第二页上加载内容时,我收到了这些值:
echo $_SESSION['userEmail']; //bob@rogers_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 :(得分: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);
}
答案 1 :(得分:0)
如果你想使用没有变换的文本,如哈希,编码等, 您可以尝试使用替代密钥替代电子邮件主键。
你可以从每一行的auto_increment索引键中获取命中。
在:
select * from users where email = 'johndoe@johndoe.com';
后:
select * from users where id = '1';
这等于:
select * from users where id in (select id from users where email = 'johndoe@johndoe.com');
祝你好运。
答案 2 :(得分:0)
我想出了一个解决方法:
当您收到电子邮件时,可以替换字符'。'具有不同的字符序列;这是通常的电子邮件地址中找不到的东西。我发现 - # - 是一个体面的(通常)。我就这样做了:
$TempFormat = strtr($row['UserEmail'], array('.' => '-#-'))
然后,当我转到我的if($ _ SERVER [' REQUEST_METHOD'] ==' POST'){}函数时,我将字符串转换回它的#s (希望)原始状态通过执行:
$OriginalFormat = strtr(end(array_keys($_POST)), array('-#-' => '.'))