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

时间:2016-07-26 20:38:01

标签: php mysql variables

我想知道是否可以这样做,或者是否错了:

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

因此,电子邮件可以在未来以正确的语言发送给管理员和用户。

非常感谢您的帮助,对不起我的英语。

2 个答案:

答案 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>";