2009-05-06 4 views
0

Je cherche un script simple et sécurisé pour insérer des lignes dans une table mysql à partir d'un script PHP.PHP Script qui insère des variables d'URL dans un mysql db?

en appelant http://www.myserver.com/addtosometable.php?1=asdf&2=asdf ....

Je ne demande pas comment précisément, plutôt que je pensais que ce pourrait être une bonne plate-forme pour construire un exemple de script et le garder à jour avec les meilleures pratiques ...

Vive

+0

Je pensais que nous pourrions développer un exemple de script qui inclut le nettoyage des variables etc ... – Danny

Répondre

2

toutes les variables d'URL (variables GET) sont mis dans la variable PHP $_GET comme un tableau.

En utilisant votre exemple ci-dessus myfile.php?1=asdf&2=asdf votre script aurait accès à un tableau qui ressemble à ceci:

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

Si vous voulez voir par vous-même, il suffit de mettre dans votre fichier:

print_r($_GET); 

De là, il devrait être une tâche simple de nettoyage des variables pour éviter les attaques par injection, puis en créant une instruction INSERT. J'aurais besoin d'en savoir plus sur la structure de votre table et je ne sais pas comment vous aider. Voir les documents sur mysql_real_escape_string.

+1

Il peut également être utile de jeter un oeil aux fonctions urlencode/decode, si le contenu que vous voulez passer contient des caractères spéciaux, comme>, <, espace, etc. Voir: http://br2.php.net/manual/fr/function.urlencode.php – Macaubas

+0

Je crois que les variables seront déjà décodées quand elles sont dans $ _GET – nickf

0

Si vous utilisez MySQL 5, vous pouvez utiliser des instructions préparées pour éviter la plupart des formes d'injection SQL.

 

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

Je crois que vous avez encore à vous soucier des attaques XSS (Cross-Site-Scripting), mais Cela dépasse mes connaissances.

+0

c'est en utilisant un cadre de DB si, non? – nickf

+0

L'exemple fourni utilise MDB2, qui est en fait un framework DB. Vous pouvez aussi bien utiliser mysqli-> prepare(), mais cela implique plus d'instructions (prepare, bind_param, execute, bind_result, fetch), comparé à 3 avec MDB2 (prepare, execute, fetch) – hapes

+0

MDB2 est assez facile à implémenter, et vous pouvez installer des modules PEAR sans être root ou même avoir un accès shell, donc il n'y a pas d'excuse pour ne pas utiliser un framework DB. – hapes

Questions connexes