2016-07-26 2 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'에서 여러 값을 가질 수 있습니다 'and'또는 'or'를 눌러서 가입하십시오. 사용자 데이터를 쿼리에 직접 전달하지 마십시오. 매개 변수화 된 쿼리를 사용하십시오. 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

이것은 훨씬 더 좋아 보이는데 유일한 문제는 관리자 백엔드 사이트가있어서 언어에 따라 전자 메일 서식 파일을 사용자 지정할 수 있으며 언어를 추가 할 수 있으므로 새로운 언어가 생성되면 당신이 그것을 설명하면서 새로운 언어를 추가하기 전까지는 작동하지 않습니다. 특정 언어에 대해서는 작동하지만, 언어를 추가 할 수있는 costumers에게는 그렇지 않습니다. 그러나 귀하의 대답은 제 첫 질문과 맞습니다. 알다. – GTCR

1

예, 가능하지만 한 번 인용 부호 -> $ admin_mailData [ "$ email_message"] 대신 큰 따옴표를 사용해야합니다. 클라이언트는 $ _GET 변수를 쉽게 수정하고 빈 메일을 보낼 수 있기 때문에 좋은 생각이 아닙니다.

관련 문제