2016-07-26 3 views
0

im wundern, wenn dies getan werden kann, oder wenn falsch:Kann ich eine Variable aus der Methode GET_ verwenden, um mysql-Daten abzurufen?

Ich habe eine Tabelle in mysql weicht dieses colums enthält:

email_message | email_message_es | email_subject | email_subject_es

Also ich diesen Code haben:

$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>\";"); 

Dies ist nur ein Teil des Codes, aber ich bin nicht sicher, ob ich eine Variable verwenden, können die Daten aus MySQL zu bekommen, ist die Idee, dass die URL enthält : http://mydomain/file.php?langmess=email_message_es&langsub=email_subject_es

oder

http://mydomain/file.php?langmess=email_message&langsub=email_subject

und so kann die E-Mail in der richtigen Sprache zur Anzeige gesendet werden min und für den Benutzer in der Zukunft.

Vielen Dank im Voraus für Ihre Hilfe, und es tut mir leid für mein Englisch.

+0

Sie können in einem mehr Werte 'haben where'-Klausel einen 'und' oder 'oder', um sich ihnen anzuschließen. Übergeben Sie keine Benutzerdaten direkt an Ihre Abfrage. Verwenden Sie parametrisierte Abfragen. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

+0

können Sie es irgendwie verwenden. Lesen Sie ↑ die ↑ oben ↑ – Drew

+0

Zusätzlich ist eine Variable in Anführungszeichen keine Variable, es ist die literale Zeichenfolge. – chris85

Antwort

1

Es ist nicht viel mit MySQL hat zu tun, aber das Problem ist folgendes:

$string   = $admin_mailData['$email_message']; 
    $subjectmail = $admin_mailData['$email_subject']; 

Mit den einfachen Anführungszeichen sucht PHP für einen Index wahrsten Sinne des Wortes ‚$ email_message‘ genannt. Sie müssen die einfachen Anführungszeichen entfernen, um die nach dem Wert der Variablen benannte Spalte abzurufen.

$string   = $admin_mailData[$email_message]; 
    $subjectmail = $admin_mailData[$email_subject]; 

Das löst nicht alle Sicherheitsprobleme in Ihrem Code übrigens. Ein sicherer Weg, dies zu tun, ist so etwas wie diese:

$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); 

Und die eval() ist hier wirklich unnötige und kann ersetzt werden durch:

$msnAdminbody = "<html><body> " . $msnAdminbody . " </body></html>"; 
+0

Dies sieht viel besser aus, das einzige Problem ist, dass ich eine Admin-Back-End-Website habe, wo Sie die E-Mail-Vorlage abhängig von der Sprache anpassen können, und auch Sprachen hinzufügen können. Wenn eine neue Sprache generiert wird, wird der Code nicht funktionieren, bis ich eine neue Sprache hinzufügen, wie Sie es beschreiben, kann es für bestimmte Sprachen arbeiten, aber für Kunden, die Sprachen hinzufügen kann, tut es nicht, aber Ihre Antwort ist richtig mit meiner ersten Frage, also vielen Dank, jetzt ich verstehen. – GTCR

1

Ja, Sie können, aber Sie müssen doppelte Anführungszeichen statt einzelne Anführungszeichen verwenden -> $ admin_mailData ["$ email_message"]. Aber ist nicht eine gute Idee, weil Client $ _GET Variablen leicht ändern und leere Post senden kann.

Verwandte Themen