我有几个问题,但我会从我想要做的事情开始。
我有一个输入表单,客户端将输入一些信息及其电子邮件地址,我使用电子邮件作为帐户标识符。我想创建一个电子邮件数组,它将首先检查数组中是否存在电子邮件,然后检查显示它们的页面...
这样的事情:
$client_emails = array(
'email@ex-one.com',
'email@ex-two.com' => 'page_one',
'email@ex-three.com' => 'page_two',
'email@ex-four.com',
),
那么这样的话:
if (!empty($form_email)) { // input field variable
if (in_array($form_email, $client_emails)) {
// echo content
}
}
所以上面的内容被放到那里......我想(1)检查电子邮件是否存在,然后(2)看看密钥是否有值,如果有,那么我需要回复它自己要使用的变量。也许在函数中返回它?
我认为我需要一个像$client_page
这样的变量,如果该函数没有向键(电子邮件)返回一个值,那么它将返回默认页面。
的伪代码:
function($client_page)... if (key exists) {
if (key has value) {
return value
} else {
return default
}
}
我在PHP手册上发现了一个有趣的选项,它给出了array_flip()
的一个问题,我不确定它是否有用,但它看起来可能是任何方式:
http://php.net/manual/en/function.in-array.php#96198
我也在这个网站上遇到过这个问题,类似但不一样: PHP Searching multidimensional associative array
有什么想法吗?
附带问题:
考虑到我想要存储的电子邮件是敏感信息 - 我是否应该做些什么来保护它而不仅仅是在服务器端文档中?喜欢使用php类吗? (我对使用课程和所有有趣的东西一无所知)
答案 0 :(得分:1)
您只需要形成一个数组,例如key
是电子邮件,value
是显示页面,false
用于其他情况,例如:
$client_emails = array(
'email@ex-one.com' => false,
'email@ex-two.com' => 'page_one',
'email@ex-three.com' => 'page_two',
'email@ex-four.com' => false,
);
在您的功能中,您可以使用普通的isset
:
$test_email = 'sometestemail';
if (isset($client_emails[$test_email]) && $client_emails[$test_email])
return $client_emails[$test_email];
答案 1 :(得分:1)
使用电子邮件地址作为键,并将其各自的页面作为值。
$client_emails = array(
'email@ex-one.com' => null,
'email@ex-two.com' => 'page_one',
'email@ex-three.com' => 'page_two',
'email@ex-four.com' => null
);
if (null !== $form_email) {
if (isset($client_emails[$form_email])) {
$client_page = $client_emails[$form_email];
}
}
if (null === $client_page) {
echo 'You can not be here';
} else {
// Handle $client_page
}
答案 2 :(得分:0)
这里描述的是一个非常不完善的架构,它不能很好地扩展。即使预先解析并保存在操作码缓存中的代码,也会有一个点(猜测,大约300-500条记录),将数据保存在数据库中会更有效。维护数据也存在很大问题 - 为了支持对列表的更改,代码必须自我修改,这使得确保其安全性变得非常困难。 Zend操作码+缓存还会影响性能。
如果您控制文件系统,则可以更直接地映射内容....
$f=md5($form_email . $salt);
$d=substr($f,0,3);
$f=$base . '/' . $d . '/' . $f;
If (is_readable($f)) {
Include $f;
} else {
Include $default;
}