我想知道这是否可以做到,或者是否错误:
我在 mysql 中有一个表,其中包含以下列:
电子邮件消息|电子邮件消息 |电子邮件主题 |电子邮件主题
所以我有这个代码:
$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
因此,电子邮件可以以正确的语言发送给管理员和将来的用户。
提前非常感谢您的帮助,对于我的英语水平我很抱歉。
最佳答案
这与 MySQL 没有太大关系,但问题是这样的:
$string = $admin_mailData['$email_message'];
$subjectmail = $admin_mailData['$email_subject'];
使用单引号,PHP 会查找字面上称为“$email_message”的索引。您需要删除单引号才能检索以变量值命名的列。
$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>";
关于php - 我可以使用 GET 方法中的变量来获取 mysql 数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599444/