Много $ _GET в одном скрипте - PullRequest
0 голосов
/ 05 января 2011

Я хочу передать около 20 переменных в таблицу MySQL, используя PHP-скрипты.Есть ли лучший способ, чем просто:

$var1= preg_replace('/[^\w\.\-\& ]/', '', $_GET["var1"]);
$var2= preg_replace('/[^\w\.\-\& ]/', '',($_GET["var2"]));
$var3= preg_replace('/[^\w\.\-\& ]/', '',($_GET["var3"]));

и т. Д.

И затем иметь массивную строку кода с:

$query = "INSERT INTO tbl_users (var1, var2, var3 etc.) VALUES('$var1', '$var2', '$var3' etc.)"

Заранее спасибо, Сондар

Ответы [ 5 ]

1 голос
/ 05 января 2011

Не беспокойтесь о количестве полей, 20 невелико.

Однако вы должны использовать функцию escape, предоставляемую базой данных.Если вы используете функции mysql_ *, вы можете использовать mysql_real_escape_string

Если вы используете PDO (рекомендуется), используйте связанные параметры.

0 голосов
/ 05 января 2011

Как отмечалось всеми, очевидный способ упростить его - использовать вспомогательный код.Я решил обе проблемы с , например :

foreach ($_GET->keys() as $id) {
    $var[$id] = $_GET->text[$id];
}

, где $_GET->text["var12"] автоматически применяет фильтр регулярных выражений.

Или для вставки, не беспокоясь о ручном выходе SQL изЖелательно использовать подготовленные заявления.Но вам по-прежнему нужна специальная поддержка для вставки строк:

db("INSERT INTO users (:?) VALUES (??)", array_keys($var),
                                         array_values($var));

Используйте простой ORM, чтобы избежать ручной поделки SQL. Идиорм хорош.

0 голосов
/ 05 января 2011

Вероятно, есть много способов.Предполагается, что ваши $_GET имена переменных и имена полей таблицы точно совпадают.

$var_list = array('var1', 'var2', 'var3'); // as many as you want

// this filters GET to be just your variables
$params = array_intersect_key($_GET, array_fill_keys($var_list, ''));

$query = "INSERT INTO tbl_users (" . implode(',', array_keys($params)) . ") VALUES (";

foreach ($params as $val) {
    $query .= mysql_real_escape_string($val);
}
$query .= ")";

Редактировать:

Как отмечено в комментариях, вам нужно быть осторожным с ключами здесь,Общий способ просто вставить ключи в запрос, как этот, очень плохой, , если , вы не фильтруете их, как я сделал здесь.Если бы вместо array_keys($params) это было что-то вроде array_keys($_GET), тогда вы были бы широко открыты для внедрения SQL.Убедитесь, что вы дезинфицируете ввод, ключи и значения.

0 голосов
/ 05 января 2011
$get_values = array();
foreach($_GET as $name=>$val) {
    $get_values[$name] = preg_replace('/[^\w\.\-\& ]/', '', $val);
}

$query = 'INSERT INTO tbl_users ('.implode(', ', array_keys($get_values)).') VALUES('.implode(', ', $get_values).')';
0 голосов
/ 05 января 2011
$a = $_GET;
foreach($i = 0;$i<count($a); $i++) {
    $b[] = preg_replace('/[^\w.-\& ]/', '', $a[$i]);
}

Это должно перебрать все переменные записи, проверить их, используя ваше выражение, и вывести их в $ b.Но я не знаю, как сократить $query = "INSERT INTO tbl_users (var1, var2, var3 etc.) VALUES('$var1', '$var2', '$var3' etc.)"

...