Php ! Explode() need help
Résolu/Fermé
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
-
1 juil. 2008 à 12:37
dubuducu Messages postés 391 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 19 mai 2010 - 3 juil. 2008 à 10:42
dubuducu Messages postés 391 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 19 mai 2010 - 3 juil. 2008 à 10:42
A voir également:
- Php ! Explode() need help
- Easy php - Télécharger - Divers Web & Internet
- Télécharger need for speed pc gratuit complet - Télécharger - Jeux vidéo
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
- Bouton php - Forum PHP
- Baby i love you baby i need you ✓ - Forum Musique / Radio / Clip
6 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
1 juil. 2008 à 12:49
1 juil. 2008 à 12:49
Bonjour,
Dans ta boucle, sizeof($tre) doit être remplacé par sizeof($decoupe).
Bonne chance,
Xavier
Dans ta boucle, sizeof($tre) doit être remplacé par sizeof($decoupe).
Bonne chance,
Xavier
xclsaian
Messages postés
12
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
1 juillet 2008
1
1 juil. 2008 à 12:52
1 juil. 2008 à 12:52
Bonjour,
Il y a une erreur dans la valeur testée par sizeof. Tu devrais faire un sizeof ($decoupe), c'est à dire le tableau qui est retourné par la fonction explode.
Voilà j'espère avoir pu t'aider. Si tu as encore des problèmes, n'hésite pas... Et si cette explication a résolu ton problème, n'hésite pas à le faire savoir également. Les réponses positives encouragent souvent à répondre ;-)
Bonne journée
Il y a une erreur dans la valeur testée par sizeof. Tu devrais faire un sizeof ($decoupe), c'est à dire le tableau qui est retourné par la fonction explode.
Voilà j'espère avoir pu t'aider. Si tu as encore des problèmes, n'hésite pas... Et si cette explication a résolu ton problème, n'hésite pas à le faire savoir également. Les réponses positives encouragent souvent à répondre ;-)
Bonne journée
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
1 juil. 2008 à 13:04
1 juil. 2008 à 13:04
hum voila ... je n'ai rien compris !
cela semble pas tres dur a comprendre mais je ne vois toujours pas comment faire pour injecter dans sql les valeurs séparées afin qu'il me resssorte le "$clic" corespondant au 26 ainsi que celui au 15 etc ... est-ce possible ?
cela semble pas tres dur a comprendre mais je ne vois toujours pas comment faire pour injecter dans sql les valeurs séparées afin qu'il me resssorte le "$clic" corespondant au 26 ainsi que celui au 15 etc ... est-ce possible ?
$sql = "SELECT clic FROM devis_table where id IN ($decoupe) "; $result = mysql_query( $sql) or die( "Erreur : " . mysql_error() ); if($result) { echo '<table>'; echo '<tr>'; echo '<td width="80" bgcolor="#3366ff"><b><u><font color="#FFFFFF">Devis n° :</font></u></b></td>'; echo '</tr>'."\n"; // lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne. while($row = mysql_fetch_array($result)) { echo '<tr>'; echo '<td width="80" bgcolor="#e8e2e2">'.$row[clic].'</td>'; echo '</tr>'; } } else { echo 'Pas d\'enregistrements dans cette table...'; } echo '</table>';
xclsaian
Messages postés
12
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
1 juillet 2008
1
1 juil. 2008 à 13:18
1 juil. 2008 à 13:18
La syntaxe de ta requête n'est pas bonne. dans la section Where, le IN attend quelque chose du style (valeur1, valeur2, valeur3) alors que là tu lui envoi une chaine "Array".
Dans le fond, le principe est bon mais pour la syntaxe tu ne peux pas envoyer directement un tableau dans un echo.
Essai ce code :
tu verras la différence entre les 2 instructions SQL.
Bonne chance.
Dans le fond, le principe est bon mais pour la syntaxe tu ne peux pas envoyer directement un tableau dans un echo.
Essai ce code :
tu verras la différence entre les 2 instructions SQL.
<html> <head> </head> <body> <form method="POST"> <input type="text" name="saisie" /> <input type="submit" /> </form> <br /> <?php $tre = $_POST['saisie']; $decoupe = explode(",",$tre); echo "POST : $tre<br />"; $sql = "SELECT clic FROM devis_table where id IN ($decoupe) "; echo "SQL 1 : ".$sql."<br/>"; $sql = "SELECT clic FROM devis_table where id IN ("; $boucle=0; while ($boucle < sizeof($decoupe)) { $sql .= $decoupe[$boucle]; $boucle++; if ($boucle < sizeof($decoupe)) $sql .= ", "; } $sql .= ") "; echo "SQL 2 : ".$sql; ?> </body> </html>
Bonne chance.
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
1 juil. 2008 à 13:46
1 juil. 2008 à 13:46
Impressionnant ... !
je cherche a comprendre la synthaxe (pas evidente).
Je te remercie infiniment pour cette solution qui n'etait pas vraiment evidente.
Parfait!!
A bientot pour de plus amples echanges!
je cherche a comprendre la synthaxe (pas evidente).
Je te remercie infiniment pour cette solution qui n'etait pas vraiment evidente.
$tre = $_POST['saisie']; $decoupe = explode(",",$tre); echo "$tre"; $sql = "SELECT clic FROM devis_table where id IN ("; $boucle=0; while ($boucle < sizeof($decoupe)) { $sql .= $decoupe[$boucle]; $boucle++; if ($boucle < sizeof($decoupe)) $sql .= ", "; } $sql .= ") "; $result = mysql_query( $sql) or die( "Erreur : " . mysql_error() );
Parfait!!
A bientot pour de plus amples echanges!
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
2 juil. 2008 à 09:50
2 juil. 2008 à 09:50
C'est idiot ^^
Tu explose ta chaîne séparée par des virgules, pour la recréer... séparée par des virgules aussi !!!
Enfin ça dépend du format d'entrée de ta chaîne, si tu as une virgule finale ou pas.
Par contre, tu t'exposes à un gros problème d'injection SQL (c'est une technique de piratage)
Imagine qu'un utilisateur malveillant mette "DELETE FROM DEVIS_TABLE" comme valeur dans le formulaire 'saisie'.
Dans les deux solutions apportées, ta requête devient :
"SELECT clic FROM devis_table where id IN (DELETE FROM DEVIS_TABLE) ".
Je te laisse imagine le résultat ! Tu perds toutes tes données.
Suivant comment ton formulaire est fait, ce genre d'attaque est plus ou moins compliquée, mais n'est pas impossible.
Il me paraît indispensable de commencer par faire une vérification de la chaîne $tre.
Par exemple, une simple expression rationnelle peut te la valider.
Ton code devient alors :
« chiffres suivis d'une virgule » autant de fois que souhaité, se terminant par des chiffres sans virgule, en autorisant des espaces entre les chiffres et les virgules.
Tu explose ta chaîne séparée par des virgules, pour la recréer... séparée par des virgules aussi !!!
$tre = $_POST['saisie']; echo "$tre"; $sql = "SELECT clic FROM devis_table where id IN ($tre) "; $result = mysql_query( $sql) or die( "Erreur : " . mysql_error() );C'est pas plus simple comme ça ?
Enfin ça dépend du format d'entrée de ta chaîne, si tu as une virgule finale ou pas.
Par contre, tu t'exposes à un gros problème d'injection SQL (c'est une technique de piratage)
Imagine qu'un utilisateur malveillant mette "DELETE FROM DEVIS_TABLE" comme valeur dans le formulaire 'saisie'.
Dans les deux solutions apportées, ta requête devient :
"SELECT clic FROM devis_table where id IN (DELETE FROM DEVIS_TABLE) ".
Je te laisse imagine le résultat ! Tu perds toutes tes données.
Suivant comment ton formulaire est fait, ce genre d'attaque est plus ou moins compliquée, mais n'est pas impossible.
Il me paraît indispensable de commencer par faire une vérification de la chaîne $tre.
Par exemple, une simple expression rationnelle peut te la valider.
Ton code devient alors :
$tre = $_POST['saisie']; echo "$tre"; if (!preg_match("/^(([0-9]*)\s*,\s*)*([0-9]*\s*)$/", $tre)) { die("La chaîne donnée, « $tre », n'est pas valide !") } $sql = "SELECT clic FROM devis_table where id IN ($tre) "; $result = mysql_query( $sql) or die( "Erreur : " . mysql_error() );Le bloc que j'ai rajouté signifie que la chaîne d'entrée doit être écrite sous la forme :
« chiffres suivis d'une virgule » autant de fois que souhaité, se terminant par des chiffres sans virgule, en autorisant des espaces entre les chiffres et les virgules.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
3 juil. 2008 à 10:42
3 juil. 2008 à 10:42
Merci effectivement c mieux !
tu m'a fait peur avec tes techniques de piratage la !!!! defacon ce script est utilisé dans lapartie admin de mon site accessible que par mon equipe et moi meme !
Merci beaucoup poiur les précisions !
tu m'a fait peur avec tes techniques de piratage la !!!! defacon ce script est utilisé dans lapartie admin de mon site accessible que par mon equipe et moi meme !
Merci beaucoup poiur les précisions !
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
1 juil. 2008 à 12:54
1 juil. 2008 à 12:54
cela fonctionne parfaitement merci,voila ce qu'il fallai mettre :
par contre maintenant le probleme est le suivant :
me provoque l'erreur suivante :
Erreur : Unknown column 'Array' in 'where clause'
:( pas cool
$tre = $_POST['saisie']; $decoupe = explode(",",$tre); echo "$tre"; $boucle=0; while ($boucle < sizeof($decoupe)) { echo $decoupe[$boucle]; echo " "; $boucle = $boucle+1; }
par contre maintenant le probleme est le suivant :
$sql = "SELECT clic FROM devis_table where id IN ($decoupe) "; $result = mysql_query( $sql) or die( "Erreur : " . mysql_error() );
me provoque l'erreur suivante :
Erreur : Unknown column 'Array' in 'where clause'
:( pas cool
xclsaian
Messages postés
12
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
1 juillet 2008
1
1 juil. 2008 à 13:01
1 juil. 2008 à 13:01
Ton echo $decoupe retourne la chaine "Array" car il correspond à un tableau.
La fonction d'affichage des contenus d'un tableau est la fonction print_r($tab), mais la syntaxe du résultat retourné ne correspondra pas pour être directement injectée dans le SQL.
Un exemple de résultat pour print_r($decoupe) => Array ( [0] => 12 [1] => 25 [2] => 35 [3] => 36 ) .
Si tu veux chacune des valeurs de ton tableau tu peux plutôt les parcourir et les ecrire dans ton IN.
Voilà, bonne journée.
La fonction d'affichage des contenus d'un tableau est la fonction print_r($tab), mais la syntaxe du résultat retourné ne correspondra pas pour être directement injectée dans le SQL.
Un exemple de résultat pour print_r($decoupe) => Array ( [0] => 12 [1] => 25 [2] => 35 [3] => 36 ) .
Si tu veux chacune des valeurs de ton tableau tu peux plutôt les parcourir et les ecrire dans ton IN.
Voilà, bonne journée.