php - 我可以使用 GET 方法中的变量来获取 mysql 数据吗?

标签 php mysql variables

我想知道这是否可以做到,或者是否错误:

我在 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/

相关文章:

javascript - 为什么我必须使用匿名函数而不是向 `setTimeout` 传递附加参数?

php - 1000 个并发用户的服务器设置

php - WordPress 从回调函数中获取 Post Meta

Javascript:通过名称访问闭包中的局部变量或变量

php - 正则表达式 $1、$2 等

mysql - 另一个 sql select 中的 Sql sum

php - Mysql查询需要很多时间来执行

php - 从 php 脚本执行 proc_open 以连接到 pgsql 时出错

mysql - 如何使用sql查询将第二个单位的数据聚合为一个平均分钟单位

java - Autowired DAO 对象为 null Spring Boot