2009-05-06 3 views
0

Я ищу простой и безопасный скрипт для вставки строк в таблицу mysql из сценария php.PHP Script, который вставляет переменные URL в mysql db?

по телефону http://www.myserver.com/addtosometable.php?1=asdf&2=asdf ....

Я не спрашиваю, как конкретно, а я думал, что это может быть хорошей платформой для построения пример сценария и держать его в курсе лучших практик ...

Приветствия

+0

Я думал, что мы могли бы разработать пример скрипта, который включает в себя очистку переменных и т. Д. – Danny

ответ

2

все URL переменные (GET переменные) помещаются в переменную PHP $_GET как массив.

Используя ваш пример выше myfile.php?1=asdf&2=asdf ваш сценарий будет иметь доступ к массиву, который выглядит следующим образом:

array(
    1 => "asdf" 
    2 => "asdf" 
) 

Если вы хотите увидеть это для себя, просто это в вашем файле:

print_r($_GET); 

Оттуда должна быть простая задача очистки переменных, чтобы избежать атак атаки, а затем создать инструкцию INSERT. Мне нужно будет узнать больше о вашей структуре таблиц и о том, что вам нужно специально для этого. См. Документацию по адресу mysql_real_escape_string.

+1

Это также может помочь взглянуть на функции urlencode/decode, если контент, который вы хотите передать, содержит специальные символы, такие как>, <, пробел и т. д. См. http://br2.php.net/manual/en/function.urlencode.php – Macaubas

+0

Я считаю, что переменные уже будут декодированы, когда они находятся в $ _GET – nickf

0

Если вы используете MySQL 5, вы можете использовать подготовленные инструкции, чтобы избежать большинства форм SQL-инъекций.

 

$stmt = $db->prepare("INSERT INTO table (col1, col2) values (?, ?); 
// check for errors 
$result = $stmt->execute($_GET['1'], $_GET['2']); 
// check for errors 

Я считаю, что вам все равно придется беспокоиться о XSS (Cross-Site-Scripting) атак но это за пределами моего понимания.

+0

, это используя структуру БД, хотя, правильно? – nickf

+0

В представленном примере используется MDB2, который действительно является базой DB. Вы также можете использовать mysqli-> prepare(), но он включает в себя больше инструкций (prepare, bind_param, execute, bind_result, fetch), по сравнению с 3 с MDB2 (подготовка, выполнение, выборка) – hapes

+0

MDB2 довольно безболезнен для реализации, и вы можете установить модули PEAR, не будучи root или даже иметь доступ к оболочке, поэтому нет оправдания, чтобы не использовать структуру базы данных. – hapes

Смежные вопросы