Flucht-Variablen in ein array und zuweisen entgangen Werte zu den ursprünglichen Variablen Wert dynamisch
Ich normalerweise nur verwenden mysql_real_escape_string
auf alle Variablen vor dem einsetzen meiner Datenbank, so zum Beispiel:
$first_name = mysql_real_escape_string($first_name); //Bill
$last_name = mysql_real_escape_string($last_name); //O'Rielly
$email = mysql_real_escape_string($email); //[email protected]
$insert = mysql_query("
INSERT INTO `users` (first_name, last_name, email)
VALUES ('$first_name', '$last_name', '$email')
") or die(mysql_error());
Aber auf einige Formen, die ich konnte haben vielleicht 20 verschiedene Variablen, die ich will, zu entkommen, so hoffte ich, es war ein Weg, ich könnte ein array verwenden, führen Sie es durch eine Funktion zu entfliehen jeder. Dann stellen Sie die ursprünglichen Variablen ($first_name
, $last_name
, $email
) haben den Wert der Escape-string aus dem array. Ich kam mit der folgenden, aber das ist so weit wie ich bekommen haben.
$form_array = array($first_name, $last_name, $email);
print_r($form_array);
echo("<br />".$last_name."<br />");
function cleanInput($array) {
return array_map('mysql_real_escape_string', $array);
}
$clean_array = cleanInput($form_array);
print_r($clean_array);
echo("<br />".$clean_array[1]."<br />");
Welche Ausgänge die folgende:
Array ( [0] => Bill [1] => O'Rielly [2] => [email protected] )
O'Rielly
Array ( [0] => Bill [1] => O\'Rielly [2] => name@domain.com )
O\'Rielly
So, wir können sehen, dass es die Flucht richtig, aber da bin ich überfragt mit der ganzen macht $first_name
haben den Wert $clean_array[0]
, $last_name
haben den Wert $clean_array[1]
etc.
Ich weiß, natürlich könnte ich einfach schreiben:
$first_name = $clean_array[0];
$last_name = $clean_array[1];
Aber irgendwie macht es sinnlos, mit diesem array/Funktion dort überhaupt, da könnte ich genauso gut entkommen jede variable/string getrennt wie ich es immer getan habe. Ich hatte gehofft, es war ein Weg, ich könnte eine Art Schleife in die Funktion zu tun, diese dynamisch, je nach dem, was in dem array.
Weil dann, wenn es darum geht zu tun, Validierung in der Zukunft kann ich nur
- Weisen alle $_POST Daten an Variablen
- Setzen Sie Variablen in ein array
- Führen Sie das array über die Funktion und alle original $_POST-Variablen haben nun den entgangenen Wert aus der Funktion
- Verwenden Sie die insert-Methode am Anfang erwähnt mit dem ursprünglichen Namen der Variablen
$first_name
,$last_name
etc.
Dann eher:
$insert = mysql_query("
INSERT INTO `users` (first_name, last_name, email)
VALUES ('$clean_array[0]', '$clean_array[1]', '$clean_array[2]')
") or die(mysql_error());
Ist das möglich?
Update
Von hakre die post über die compact
und extract
Funktionen, ich habe mir jetzt kommen mit dem folgenden:
$array = compact(array("first_name", "last_name", "email"));
echo("<strong>Before:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."<br /><br />");
extract(array_map('mysql_real_escape_string', $array), EXTR_OVERWRITE);
echo("<strong>After:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."");
Welche Ausgänge die folgenden Angaben, wie ich es gerne hätte:
Vor:
Vorname: Bill
Nachname: O'Rielly
E-Mail: [email protected]
Nach:
Vorname: Bill
Nachname: O\'Rielly
E-Mail: [email protected]
Habe ich versucht, indem extract
in eine Funktion, aber es funktioniert nicht das gleiche?
function cleanInput($array) {
$clean_array = extract(array_map('mysql_real_escape_string', $array), EXTR_OVERWRITE);
return $clean_array;
}
$array = compact(array("first_name", "last_name", "email"));
echo("<strong>Before:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."<br /><br />");
cleanInput($array);
echo("<strong>After:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."");
Ich bin mir sicher, dass ich zurückkehren muss, die extrahieren-Funktion, aber ich habe versucht ein paar verschiedene Dinge, und es ist entweder nicht zu geben, jede Ausgabe oder $last_name
ist nur den Druck des unescaped Wert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie interessieren könnten
kompakt
undExtrakt
. Beide Verfahren erlauben Ihnen, handle-Variablen als ein array. Array ist bequem, weil Sie Ihr können, wiederholen Sie den einzigen Aktion auf alle Werte.Beispiel:
Ausgabe:
compact
undextract
und ich habe ein funktionierendes Beispiel, aber nicht 100% so, wie ich es will, ich habe aktualisiert mein Frage mit was habe ich so weit, würden Sie in der Lage sein, einen Blick zu haben und wenn Sie ihm geben könnte mir ein wenig mehr Einblick auf, wo Sie von hier aus gehen? +1 für die mit mir diese 2 Funktionen!dieses Stück code aufgerufen wird eine Funktion. Und Funktionen, obwohl nur sehr wenige PHP-Nutzer haben eine Vorstellung davon, ist eine sehr, sehr mächtige Sache. Es kann Ihren code kurz und lesbar, und sparen Sie Stunden Tipparbeit.
So, dass diese Funktion in der Konfiguration-Datei, die Sie eingeben müssen, so wenig wie
Hinweis: die $fileds-array. Ich hoffe es ist selbsterklärend, obwohl
Gut, nachdem einige Klarstellungen in den Kommentaren, kann ich verlängern meine Antwort.
Den besten Weg, um loszuwerden, der ständigen Flucht ist, um loszuwerden, wenn es. Erstellen Sie entweder Ihre eigenen oder nutzen Sie einige der bestehenden DB-Abstraktions-Bibliothek, die alle die Flucht für Sie.
Sagen ein code zum überprüfen einer vorhandenen Benutzernamen werden würde, sieht aus wie
wo $_POST['name'] wäre korrekt formatiert sind, entweder durch die Verwendung von nativen prepared statements oder die ordnungsgemäße Flucht - /casting - /Whitelists.
Also, keine Notwendigkeit zu kümmern, Handbuch der Flucht überhaupt.
Das ist auch der genaue Punkt der Funktion, die ich gepostet auf den ersten.