Php ! Explode() need help
Résolu
dubuducu
Messages postés
391
Date d'inscription
Statut
Membre
Dernière intervention
-
dubuducu Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
dubuducu Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
voici mon probleme, je ne comprends pas tout dans mon code ...
dans ma page precédente, je post une chaine du jenre 12,25,35,36 nommée "$saisie"
jvoudrai la découper et recuperer 12 25 35 et 36 par exemple séparement ! voyez vous ?
Merci
voici mon probleme, je ne comprends pas tout dans mon code ...
$tre = $_POST['saisie']; $decoupe = explode(",",$tre); echo "$tre"; $boucle=0; while ($boucle < sizeof($tre)) { echo $decoupe[$boucle]; echo "n"; $boucle = $boucle+1; }
dans ma page precédente, je post une chaine du jenre 12,25,35,36 nommée "$saisie"
jvoudrai la découper et recuperer 12 25 35 et 36 par exemple séparement ! voyez vous ?
Merci
A voir également:
- Php ! Explode() need help
- Easy php - Télécharger - Divers Web & Internet
- Need for speed network - Télécharger - Jeux vidéo
- Expert php pinterest - Télécharger - Langages
- Télécharger need for speed pc gratuit complet - Télécharger - Jeux vidéo
- Need for speed most wanted ios - Télécharger - Jeux vidéo
6 réponses
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
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>';
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.
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!
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
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 !
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
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.