[SQL] Problème INSERT clause WHERE
Résolu/Fermé
A voir également:
- [SQL] Problème INSERT clause WHERE
- Touche insert - Guide
- Disk boot failure insert system disk and press enter - Guide
- Blob sql ✓ - Forum Webmastering
- Reboot and select proper boot device or insert boot media in selected boot device and press a key - Forum Windows
- Activer touche insert sur ASUS UX32A - Forum Clavier
19 réponses
kryoportail
Messages postés
222
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
22 mai 2014
125
15 août 2008 à 06:38
15 août 2008 à 06:38
Salut,
Oui la syntaxe du 'elseif' c'est bon.
La requête SQL semble OK.
Note : tu aurais pu faire l'usage de la fonction : 'mysql_real_escape_string( )' pour échapper le code HTML de l'image...
Par contre ton test :
Ça me fait bizarre !...
En lisant ça, l'interpréteur PHP pour moi, calcul le 'OU' binaire de 12 OU 24 OU 36... 119 OU 131 est vérifie que la valeur obtenue est égale à $rand. Bref, pour moi, il passe directement à la clause 'else'.
Si je crois comprendre ce que tu veux faire, ce serait plutôt :
if( $rand == 12 || $rand == 24 || ...... || $rand == 119|| $rand == 131)
Si c'est le cas, au niveau propreté tu devrais peut-être plutôt faire :
Amicalement,
S@M...
http://kryoportail.ath.cx
Oui la syntaxe du 'elseif' c'est bon.
La requête SQL semble OK.
Note : tu aurais pu faire l'usage de la fonction : 'mysql_real_escape_string( )' pour échapper le code HTML de l'image...
Par contre ton test :
if($rand == 12|24|36|48|60|72|84|96|108|120|23|35|47|59|71|83|95|107|119|131)
Ça me fait bizarre !...
En lisant ça, l'interpréteur PHP pour moi, calcul le 'OU' binaire de 12 OU 24 OU 36... 119 OU 131 est vérifie que la valeur obtenue est égale à $rand. Bref, pour moi, il passe directement à la clause 'else'.
Si je crois comprendre ce que tu veux faire, ce serait plutôt :
if( $rand == 12 || $rand == 24 || ...... || $rand == 119|| $rand == 131)
Si c'est le cas, au niveau propreté tu devrais peut-être plutôt faire :
$a1 = explode( '|', '0|1|2|3|4|5|6|7|8|9|10|11|132|133|134|135|136|137|138|139|140|141|142|143' ); $a2 = explode( '|', '12|24|36|48|60|72|84|96|108|120|23|35|47|59|71|83|95|107|119|131' ); ..... if( in_array( $rand, $a1 ) ) { .... } elseif( in_array( $rand, $a2 ) ) { .... } else { $rand = rand(0,143); }
Amicalement,
S@M...
http://kryoportail.ath.cx
kryoportail
Messages postés
222
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
22 mai 2014
125
15 août 2008 à 16:13
15 août 2008 à 16:13
Re,
Même si ta table en base de données semble simple, peux-tu exporter la table 'casesmap' que je puisse essayer ?
(Onglet 'Exporter' sous phpmyadmin ).
----------------------
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] );
Protège les caractères spéciaux de la chaîne
Voir: https://www.php.net/mysql_real_escape_string
Et on s'en sert comme ceci :
Le mieux c'est de passer systématiquement par cette fonction pour convertir toute variable introduite dans une requête MySQL. Cela permet d'éviter les 'injections SQL', en particulier lorsque les variables proviennent de l'utilisateur...
Voir: https://fr.wikipedia.org/wiki/Injection_SQL
----------------------
Amicalement,
S@M...
http://kryoportail.ath.cx
Même si ta table en base de données semble simple, peux-tu exporter la table 'casesmap' que je puisse essayer ?
(Onglet 'Exporter' sous phpmyadmin ).
----------------------
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] );
Protège les caractères spéciaux de la chaîne
Voir: https://www.php.net/mysql_real_escape_string
Et on s'en sert comme ceci :
$HtmlImg = mysql_real_escape_string ( '<img src="../images/riveD.png" alt="" />', $connexion ); $MyQuery = "INSERT INTO `casesmap` ( `image` ) VALUES ( '{$HtmlImg}' )"
Le mieux c'est de passer systématiquement par cette fonction pour convertir toute variable introduite dans une requête MySQL. Cela permet d'éviter les 'injections SQL', en particulier lorsque les variables proviennent de l'utilisateur...
Voir: https://fr.wikipedia.org/wiki/Injection_SQL
----------------------
Amicalement,
S@M...
http://kryoportail.ath.cx
ReDLine
Messages postés
30
Date d'inscription
mercredi 13 août 2008
Statut
Membre
Dernière intervention
18 août 2008
7
15 août 2008 à 03:02
15 août 2008 à 03:02
Bonsoir,
Est-ce normal que else if soit attaché ?
Essaye ça pour voir... =$
else if($rand == 12|24|36|48|60|72|84|96|108|120|23|35|47|59|71|83|95|107|119|131)
{
$riveD = "INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveD.png\" alt=\"\" />') WHERE ID = '".$rand."'";
$query4 = mysql_query($riveD, $connexion);
$i=0;
}
else { $rand = rand(0,143); }
}
}
Est-ce normal que else if soit attaché ?
Essaye ça pour voir... =$
else if($rand == 12|24|36|48|60|72|84|96|108|120|23|35|47|59|71|83|95|107|119|131)
{
$riveD = "INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveD.png\" alt=\"\" />') WHERE ID = '".$rand."'";
$query4 = mysql_query($riveD, $connexion);
$i=0;
}
else { $rand = rand(0,143); }
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Non ça ne change rien, et il me semble bien que la syntaxe de elseif est correcte, je crois que c'est une sorte de raccourci.
Ok merci, je ne connaissais pas du tout cette syntaxe que tu me propose. J'essaie de la mettre en œuvre dans la journée et je te tiens au courant.
Merci.
Merci.
Apparement je n'ai pas su utiliser au mieux tes conseils.
Avec ce code ci-dessous, rien n'a changé : toujours pas d'erreur SQL ou PHP, mais aucun résultat visible dans la BDD.
Peut-être que je n'ai pas correctement formulé tout ça. Je suppose que 'explode' permet de construire un tableau ? par contre je ne sais pas pourquoi il y un '|' au début et | | | entre les nombres. Ensuite la condition des if (in_array( $rand, $a1 )) qu'est-ce que ça fait au juste ? ça compare si $rand existe bien dans $a1 ?
Avec ce code ci-dessous, rien n'a changé : toujours pas d'erreur SQL ou PHP, mais aucun résultat visible dans la BDD.
function casesRiviere() { //paramètre de connexion à la base de données $hote = 'localhost'; $utilisateur = 'root'; $mdp = ''; $connexion = mysql_connect ($hote, $utilisateur, $mdp); $bdd = 'ile'; //connexion à la base de donnée mysql_select_db($bdd, $connexion); while ($i==1) { $rand = rand(0,143); $a1 = explode( '|', '0|1|2|3|4|5|6|7|8|9|10|11|132|133|134|135|136|137|138|139|140|141|142|143' ); $a2 = explode( '|', '12|24|36|48|60|72|84|96|108|120|23|35|47|59|71|83|95|107|119|131' ); if(in_array( $rand, $a1 )) { $riveH = "INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveH.png\" alt=\"\" />') WHERE ID = '".$rand."'"; $query3 = mysql_query($riveH, $connexion); $i=0; } else if(in_array( $rand, $a2 )) { $riveD = "INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveD.png\" alt=\"\" />') WHERE ID = '".$rand."'"; $query4 = mysql_query($riveD, $connexion); $i=0; } else { $rand = rand(0,143); } } }
Peut-être que je n'ai pas correctement formulé tout ça. Je suppose que 'explode' permet de construire un tableau ? par contre je ne sais pas pourquoi il y un '|' au début et | | | entre les nombres. Ensuite la condition des if (in_array( $rand, $a1 )) qu'est-ce que ça fait au juste ? ça compare si $rand existe bien dans $a1 ?
Bon après avoir insérer comme condition à mes if ( $rand == 1 || $rand == 2 || rand == 3 || .... ) celà ne fonctionne toujours pas. Bizarre, je m'explique : au début je pensais que c'était peut-être parce que, à chaque rebouclage, le dernier else qui demande à $rand de créer un nouveau chiffre pour qu'il puisse tomber juste à un moment (else $rand (0, 143);) , ne fonctionnait pas. Mais en y réfléchissant, la boucle ne bouclerait jamais si elle ne tombait pas juste à un moment, car la condition de bouclage ne se résolve qu'a l'intérieur d'un des deux if ($i = 0).
Peut-être donc qu'il y a une erreur dans l'insertion du code HTML dans la table casesmap.
Je pensais aussi que ma fonction n'étais peut-être pas appelée correctement, c'est pourquoi je poste le code complet de mon petit programme :
Voilà.
Peut-être donc qu'il y a une erreur dans l'insertion du code HTML dans la table casesmap.
Je pensais aussi que ma fonction n'étais peut-être pas appelée correctement, c'est pourquoi je poste le code complet de mon petit programme :
<?php function ajoutCases() { for ($i=0, $num=0; $i<144; $i++,$num++) { //création des cases initiales $zone='<div class="case" id="case'.$num.'">'; $img='<img src="../images/case.png" alt="" />'; $fin='</div>'; echo $zone.$img.$fin; //paramètre de connexion à la base de données $hote = 'localhost'; $utilisateur = 'root'; $mdp = ''; $connexion = mysql_connect ($hote, $utilisateur, $mdp); $bdd = 'ile'; //connexion à la base de donnée mysql_select_db($bdd, $connexion); //ajout des ID des cases dans la table casesmap $idcases = "INSERT INTO casesmap (`ID`) VALUES ('$num')"; $query = mysql_query($idcases, $connexion); } } function casesRiviere() { //paramètre de connexion à la base de données $hote = 'localhost'; $utilisateur = 'root'; $mdp = ''; $connexion = mysql_connect ($hote, $utilisateur, $mdp); $bdd = 'ile'; //connexion à la base de donnée mysql_select_db($bdd, $connexion); while ($i==1) { $rand = rand(0,143); if($rand == 0 || $rand == 1 || $rand == 2 || $rand == 3 || $rand == 4 || $rand == 5 || $rand == 6 || $rand == 7 || $rand == 8 || $rand == 9 || $rand == 10 || $rand == 11 || $rand == 132 || $rand == 133 || $rand == 134 || $rand == 135 || $rand == 136 || $rand == 137 || $rand == 138 || $rand == 139 || $rand == 140 || $rand == 141 || $rand == 142 || $rand == 143) { $riveH = "INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveH.png\" alt=\"\" />') WHERE ID = '".$rand."'"; $query3 = mysql_query($riveH, $connexion); $i=0; } elseif($rand == 12 || $rand == 24 || $rand == 36 || $rand == 48 || $rand == 60 || $rand == 72 || $rand == 84 || $rand == 96 || $rand == 108 || $rand == 120 || $rand == 23 || $rand == 35 || $rand == 47 || $rand == 59 || $rand == 71 || $rand == 83 || $rand == 95 || $rand == 107 || $rand == 119 || $rand == 131) { $riveD = "INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveD.png\" alt=\"\" />') WHERE ID = '".$rand."'"; $query4 = mysql_query($riveD, $connexion); $i=0; } else { $rand = rand(0,143); } } } casesRiviere(); ajoutCases(); ?>
Voilà.
balou01
Messages postés
83
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
3 décembre 2014
2
15 août 2008 à 12:27
15 août 2008 à 12:27
Salut alors bon....
Pour commencer oui explode permet de construire un tableau.
Dans le
le '|' permet de determiner a quel endroit sera coupé ta chaine $chaine :
Pour en revenir a ton probleme je l'ai déjà eu et j'ai mis un moment a trouver d'où cela venait !
En fait dans mon cas c'était la définition des champs de ma table qui était fausse.
En gros je fesait :
Alors que mon champs text était de type varchar(4)
PAr conséquent il ne m'introduisait pas ce que je lui demandais !
CA le fait aussi si tu fait :
Dans le VALUES il faut mettre le nombre de champs que ta table contient ! ;)
Pour commencer oui explode permet de construire un tableau.
Dans le
$a1 = explode( '|', $chaine );
le '|' permet de determiner a quel endroit sera coupé ta chaine $chaine :
$a1 = array( [0] =>0, [1] =>1, .... [12] => 132, [13] => 133, ...);
Pour en revenir a ton probleme je l'ai déjà eu et j'ai mis un moment a trouver d'où cela venait !
En fait dans mon cas c'était la définition des champs de ma table qui était fausse.
En gros je fesait :
INSERT INTO table_a ('id', 'text', 'indice', 'sexe')VALUES ('', 'je m'appelle francky', '0', 'masculin');
Alors que mon champs text était de type varchar(4)
PAr conséquent il ne m'introduisait pas ce que je lui demandais !
CA le fait aussi si tu fait :
INSERT INTO table_a ('id', 'text', 'indice', 'sexe')VALUES ('', 'je m'appelle francky', '0');
Dans le VALUES il faut mettre le nombre de champs que ta table contient ! ;)
Ok ok, exacte. Je vais essayer en ajoutant NULL pour mon champ ID.
Le type de mon champ image est TINYTEXT, cela me semble correcte non ?
Le type de mon champ image est TINYTEXT, cela me semble correcte non ?
Après une tentative avec le code suivant, rien n'a changé .... bizarre tout de même :
while ($i==1) { $rand = rand(0,143); $a1 = explode( '|', '0|1|2|3|4|5|6|7|8|9|10|11|132|133|134|135|136|137|138|139|140|141|142|143' ); $a2 = explode( '|', '12|24|36|48|60|72|84|96|108|120|23|35|47|59|71|83|95|107|119|131' ); if(in_array( $rand, $a1 )) { $riveH = "INSERT INTO casesmap (`ID`, `image`) VALUES (NULL, '<img src=\"../images/riveH.png\" alt=\"\" />') WHERE ID = '".$rand."'"; $query3 = mysql_query($riveH, $connexion); $i=0; } elseif(in_array( $rand, $a2 )) { $riveD = "INSERT INTO casesmap (`ID`, `image`) VALUES (NULL, '<img src=\"../images/riveD.png\" alt=\"\" />') WHERE ID = '".$rand."'"; $query4 = mysql_query($riveD, $connexion); $i=0; } else { $rand = rand(0,143); } }
balou01
Messages postés
83
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
3 décembre 2014
2
15 août 2008 à 18:24
15 août 2008 à 18:24
Mais ta table casemap est constitué comment ? de quels champs ?
Voilà la structure de ma table. Je ne copie pas le contenu car ce sont des entrées qui vont de 1 à 143 :
Base de données ile
Structure de la table casesmap
Champ Type Null Défaut
ID tinyint(3) Oui NULL
image tinytext Oui NULL
Contenu de la table casesmap
0
1
2
3
...
Je vais essayer ta fonction pour l'introduction de code HTML et je te fais part de mes découvertes. Merci.
Base de données ile
Structure de la table casesmap
Champ Type Null Défaut
ID tinyint(3) Oui NULL
image tinytext Oui NULL
Contenu de la table casesmap
0
1
2
3
...
Je vais essayer ta fonction pour l'introduction de code HTML et je te fais part de mes découvertes. Merci.
balou01
Messages postés
83
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
3 décembre 2014
2
15 août 2008 à 18:34
15 août 2008 à 18:34
ah....
je crois avoir vu ton erreur....
si tu utilise :
ca veut dire que ton entrée existe déjà...
A cemoment la ce n'est pas un "INSERT INTO" qui faudrait faire mais un "UPDATE"
essai ca :
ajuste le pour l'autre requete SQL ! ;)
je crois avoir vu ton erreur....
si tu utilise :
INSERT INTO casesmap (`ID`, `image`) VALUES (NULL, '<img src=\"../images/riveH.png\" alt=\"\" />') WHERE ID = '".$rand."'";
ca veut dire que ton entrée existe déjà...
A cemoment la ce n'est pas un "INSERT INTO" qui faudrait faire mais un "UPDATE"
essai ca :
UPDATE casesmap SET image = '<img src=\"../images/riveH.png\" alt=\"\" />' WHERE ID = '".$rand."'";
ajuste le pour l'autre requete SQL ! ;)
kryoportail
Messages postés
222
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
22 mai 2014
125
15 août 2008 à 18:44
15 août 2008 à 18:44
Re,
Oui, 'balou01' a raison, ta gestion du champs 'ID' parait un peu flou !.... Pourquoi la définir systématiquement à NULL !???
Car faire INSERT INTO .... WHERE ... en fait, n'a aucun sens....
Donc soit tu veux créer un nouvel objet 'casesmap' en base de données dans ce cas tu fais :
INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveH.png\" alt=\"\" />');
Soit tu veux le mettre à jour (parce qu'il existe déjà)
UPDATE casesmap SET `image`= '<img src=\"../images/riveH.png\" alt=\"\" />' WHERE `ID` = '".$rand."'";
Dans le cas d'une insertion, mieux vaut déclarer ton champ 'ID' non null, Primary KEY, et AUTOINCREMENT...
Amicalement,
S@M...
http://kryoportail.ath.cx
Oui, 'balou01' a raison, ta gestion du champs 'ID' parait un peu flou !.... Pourquoi la définir systématiquement à NULL !???
Car faire INSERT INTO .... WHERE ... en fait, n'a aucun sens....
Donc soit tu veux créer un nouvel objet 'casesmap' en base de données dans ce cas tu fais :
INSERT INTO casesmap (`image`) VALUES ('<img src=\"../images/riveH.png\" alt=\"\" />');
Soit tu veux le mettre à jour (parce qu'il existe déjà)
UPDATE casesmap SET `image`= '<img src=\"../images/riveH.png\" alt=\"\" />' WHERE `ID` = '".$rand."'";
Dans le cas d'une insertion, mieux vaut déclarer ton champ 'ID' non null, Primary KEY, et AUTOINCREMENT...
Amicalement,
S@M...
http://kryoportail.ath.cx
Désolé je n'ai pas eu le temps de me pencher sur vos réponse, mais quand je l'aurais, je vous tiendrais au courant c'est promis. Merci en tout cas pour votre générosité et votre aide.
Bonne journée
Bonne journée
dans tous les langages de programmation qui me sont familiers, rand ou son equivallent retourne un nombre reel entre 2 limites. ne connaissant pas votre langage de programmation, essayez de voir de ce cote.
balou01
Messages postés
83
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
3 décembre 2014
2
19 août 2008 à 10:47
19 août 2008 à 10:47
le problème ne vient pas d'ici ! ;)
Le nombre est bien généré correctement ! ;)
Le nombre est bien généré correctement ! ;)
Ok e, fait je stocke le code HTML dans une varialbe et après j'insère la variable dans ma table.
J'ai testé avec un autre programme, ça fonctionne donc je pense que ca devrait fonctionné avec ce programme aussi.
Comme je n'ai pas le temps de m'en occuper (trop de boulot !) j'essaierais plus tard, mais à mon avis la solution est là.
Merci à tous.
PS : problème résolu.
J'ai testé avec un autre programme, ça fonctionne donc je pense que ca devrait fonctionné avec ce programme aussi.
Comme je n'ai pas le temps de m'en occuper (trop de boulot !) j'essaierais plus tard, mais à mon avis la solution est là.
Merci à tous.
PS : problème résolu.