我想知道是否可以这样做,或者是否错了:
我在mysql中有一个包含此列的表:
email_message | email_message_es | email_subject | email_subject_es
所以我有这段代码:
$email_message = $_GET['langmess'];
$email_subject = $_GET['langsub'];
if ($payment == 'gateway1') {
//Admin Email DATA
$admin_mail = mysqli_query($link, "SELECT * FROM email_template WHERE email_type = 'email_me' ");
$admin_mailData = mysqli_fetch_array($admin_mail);
//Variables
$string = $admin_mailData['$email_message'];
$subjectmail = $admin_mailData['$email_subject'];
$pattern = '/{(\w+)}/i';
$replacement = "$$1";
$msnAdminbody = preg_replace($pattern, $replacement, $string);
eval("\$msnAdminbody = \"<html><body> " . $msnAdminbody . " </body></html>\";");
这只是代码的一部分,但我不确定我是否可以使用变量从mysql获取数据,其想法是URL包含:http://mydomain/file.php?langmess=email_message_es&langsub=email_subject_es
或
http://mydomain/file.php?langmess=email_message&langsub=email_subject
因此,电子邮件可以在未来以正确的语言发送给管理员和用户。
非常感谢您的帮助,对不起我的英语。
答案 0 :(得分:1)
是的,你可以,但你必须使用双引号而不是单引号 - &gt; $ admin_mailData [&#34; $ email_message&#34]。 但这不是个好主意,因为客户端可以轻松修改$ _GET变量并发送空邮件。
答案 1 :(得分:1)
它与MySQL没什么关系,但问题是:
$string = $admin_mailData['$email_message'];
$subjectmail = $admin_mailData['$email_subject'];
使用单引号,PHP会查找一个名为字面值&$ 39; $ email_message&#39;的索引。您需要删除单引号以检索以变量值命名的列。
$string = $admin_mailData[$email_message];
$subjectmail = $admin_mailData[$email_subject];
顺便说一下,这并没有解决代码中的所有安全问题。更安全的方法是这样的:
$language_code = $_GET['lang'];
if ($payment == 'gateway1') {
//Admin Email DATA
$admin_mail = mysqli_query($link, "SELECT * FROM email_template WHERE email_type = 'email_me' ");
$admin_mailData = mysqli_fetch_array($admin_mail);
//Variables
switch($language_code)
{
case 'es':
$string = $admin_mailData['email_message_es'];
$subjectmail = $admin_mailData['email_subject_es'];
break;
default:
$string = $admin_mailData['email_message'];
$subjectmail = $admin_mailData['email_subject'];
break;
}
$pattern = '/{(\w+)}/i';
$replacement = "$$1";
$msnAdminbody = preg_replace($pattern, $replacement, $string);
此处eval()
实际上是不必要的,可以替换为:
$msnAdminbody = "<html><body> " . $msnAdminbody . " </body></html>";