[CRON] INSERT ON DUPLICATE KEY UPDATE

cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 15 oct. 2011 à 10:57 - Dernière réponse : pierreSabatier 27 Messages postés lundi 12 avril 2010Date d'inscription 15 octobre 2011 Dernière intervention
- 15 oct. 2011 à 15:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/source/53678-cron-insert-on-duplicate-key-update

Afficher la suite 
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 15 oct. 2011 à 10:57
bonjour

/*Bonjour je crois qu'il y a problème de sécurité dans une fonction*/
/*http://www.phpsecure.info/v2/article/InjSql.php*/
/*le tableau $data doit etre ecrasé*/
/* mon test */
/*on suppose connecté*/
$link = mysql_connect('localhost','root','');
$Q new SegmenterRequete('INSERT INTO T (pop, top) VALUES ', ' ON DUPLICATE KEY UPDATE SET pop VALUES(pop);');
$Q->mode = Mode::DEBUG_ALL;
$Q->max = 2;

$Q->ajouter('lol\'', 'mom');
echo '
';
$Q->ajouter('lol', 'mom');
echo '
';
$Q->concatener("('lol','')");

/*mon test*/
$data=array("INSERT INTO membres (login,password,nom,email,userlevel) VALUES ('','','','','3')#','1");
print_r($Q->ajouter_tableau($data));
/*fin test*/

//array_map('mysql_real_escape_string', $data);
//mais $data = array_map('mysql_real_escape_string', $data);
//j'ai mis le return pour le test

//public function ajouter_tableau($data){
//
// $data=array_map('mysql_real_escape_string', $data)
// return $chaine = '(' . $this->guillemet . implode($this->guillemet . ', ' . $this->guillemet, $data) .
// $this->guillemet . ')';

?>
pierreSabatier 27 Messages postés lundi 12 avril 2010Date d'inscription 15 octobre 2011 Dernière intervention - 15 oct. 2011 à 11:25
Merci COD57. Effectivement, je m'étais mal renseigné sur la fonction "array_map", j'avais pensé à un passage par référence :p

Maintenant le code est sûr.

Mais attention COD57. Je crois que tu n'as pas bien compris comment utiliser cette classe. La méthode SegmeterRequete::ajouter_tableau prend en paramètre un tableau de valeurs à ajouter, et seulement les valeurs, pas la structure de la requête. Celle-ci est définie par les attributs SegmenterRequete::$debut et SegmenterRequete::$fin.
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 15 oct. 2011 à 15:25
Si j'ai compris ce que tu veux faire avec cette class, mon exemple n'étais que pour mettre en évidence le non filtrage ... bon ... pour ce qui est vraiment utile ton code est intéressant, il faudra que je teste ça sur un gros update. Il y a des astuces très ingénieuses.

++
pierreSabatier 27 Messages postés lundi 12 avril 2010Date d'inscription 15 octobre 2011 Dernière intervention - 15 oct. 2011 à 15:38
Merci COD57 :-) En affectant l'attribut SegmenterRequete::$mode à Mode::DEBUG_ONE, la première requête est affichée. Ca peut être rassurant de voir le résultat avant le gros update ;-)
Commenter la réponse de cod57

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.