2016-07-26 60 views
0

我想知道是否可以做到這一點,或者是錯誤的:我可以使用GET_方法中的變量來獲取mysql數據嗎?

我已經在MySQL至極表包含此colums:

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

您可以在'where'子句中使用的有多個值'和'或'或'加入他們。不要將用戶數據直接傳遞給您的查詢。使用參數化查詢。 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

+0

你可以使用它。閱讀↑↑↑ – Drew

+0

此外,單引號中的變量不是變量,它是文字字符串。 – chris85

回答

1

它不會有很多工作要做,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>"; 
+0

這看起來好多了,唯一的問題是我有一個管理後端網站,您可以根據語言自定義電子郵件模板,也可以添加語言,因此如果生成了新的語言,代碼將會直到我按照你的描述添加一種新的語言時,它纔會起作用,它可以用於指定的語言,但對於可以添加語言的用戶來說,它不會,但是你的回答與我最初的問題是一致的,所以非常感謝,現在我理解。 – GTCR

1

是的,你可以,但你必須使用雙引號,而不是單引號 - > $ admin_mailData [「$ email_message」]。 但是不是好主意,因爲客戶端可以輕鬆修改$ _GET變量併發送空郵件。

相關問題