checkbox, SQL et boucle

page 1 page 2
Répondre
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
Bonjour,
alors voilà, j'ai utilisé l'article concernant les checkbox et l'insertion mySQL mais je butte sur un problème tout bête sans doute : je n'arrive pas à sortir l'insertion de la boucle. Je ne souhaite pas qu'il y ait un nouvel id créé à chaque fois que $image a plusieurs valeurs, mais que les différents noms d'image aillent tous dans le champ image de l'id concerné.
Actuellement tout marche bien, sauf que j'ai autant d'entrées créés qu'il y a de valeurs à ma variable $image.
Merci !
le wall
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
oupsss, bien joué pour le nom de base et le password en clair dans le wall :(
Si une bonne âme pouvait les remplacer par des XXXX.
Désolé...
i M@N
i M@N
Déconnecté
One Love, One Heart, One Unity.
Hello.

Essaye comme ça :
  1. <?php
  2. /*si un seul enregistrement*/  
  3. if ($i == 0) {  
  4. $image = $image[0];  
  5. /*si plusieurs enregistrements*/  
  6. else {  
  7. $image = $image.';'.$image[$i];  
  8. }  
  9. ?> 


@+...
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
En effet, des fois on s'en veut de n'avoir pas de cerveau, merci.
Cependant, je ne sais pas ce qu'il fau mettre comme syntaxe pour $image dans l'insertion SQL. Actuellement, j'ai ça, mais ça continue de me mettre deux lignes avec un champ image comportant "Array;nom_de_ma_deuxieme_image.jpg"
  1. <?php $sql2 = "INSERT INTO 2008_test VALUES('','$type','$status','$home','$titre','$url','$texte','".$image[$i]."')"; ?> 


En clair, il faudrait que ma $image prenne (dans l'insertion)soit la valeur $image[$i] soit la valeur $image[0], mais je n'arrive pas à trouver la bonne syntaxe dans la requete...
Merci pour ton aide en tout cas!
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
(suite) ce qui est logique puisque mon insertion EST dans la boucle, mais je n'arrive pas à boucler sur le $image[$si] ET à extraire la requete de la boucle. Si je sépare la requete, elle ne m'affiche que "Array" dans ma base :-(
i M@N
i M@N
Déconnecté
One Love, One Heart, One Unity.
reuh ...

Tu comprends pas ...

$image vaut $image[0] si une seule checkbox, si plusieurs checkboxes $image vaut image1;image2;...;imageN

$image[$i] vaut imageN où N est la valeur de $i quand tu parcours le tableau si plusieurs checkboxes.

Tu dois seulement insérer $image dans ta base.

Si tu postais le code de la page avec les checkboxes et celui du script qui la traite ça serait plus simple aussi.

P.S : il manque un } à la fin du premier if de mon code.

@+...
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
Bah si je comprend :-). J'ai mis $image[$i] en désespoir de cause pour essayer, parce que si je mets juste $image, ça insère le mot Array dans la base. Donc, je supposais que ça venait de la façon d'écrire cette variable $image dans la requete.
  1. <?php  
  2. if (isset($_POST['image'])) { 
  3.  
  4.    $image = $_POST['image']; 
  5.  
  6.    for($i = 0;$i < count($image);$i++) {  
  7.  
  8. /*si un seul enregistrement*/ 
  9.    if ($i == 0) { 
  10.  
  11.       $image==''.$image[0];  
  12. /*si plusieurs enregistrements*/ 
  13.       } else { 
  14.  
  15.       $image==';'.$image[$i]; 
  16.  
  17.       } 
  18.    $base2 = mysql_connect ('$server', '$login', '$pwd'); 
  19.    mysql_select_db ('$base', $base2) ; 
  20.    $sql2 = "INSERT INTO 2008_test VALUES('','$type','$status','$home','$titre','$url','$texte','$image')"; 
  21.  
  22.    mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error()); 
  23.    echo '<img src=../imgincfront/'.$image[$i].'>';  
  24. }  
  25. }  
  26. ?>
  27.  

Ce code là, qui est celui de ma page traitant les données, insère juste Array dans le champ $image... Comme si les deux valeurs possible de $image[0] ou [$i] n'étaient pas récupérées...
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
krma, j'ai modifié le wall dès que j'ai lu ton sujet.

J'espère que personne n'aura "tilté" :/
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
Merci loll. Je suis en dessous de tout mais je ne poste plus très souvent, les bonnes habitudes foutent le camp.
Par hasard, t'as une idée sur le post là ? Pourquoi mon $image de la requete ne prend pas les valeurs possible du POST_IMAGE ?
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
Bon, après 2 jours de rames, je n'ai toujours pas trouvé pourquoi je n'arrivai pas à récupérer ma variable $image.
Voici le code et le formulaire, que j'ai regroupé sur la meme page avec un switch action des familles, pour faciliter le copier/coller. Si qqu'un peut me dire ou ça coince, je lui en serai éternellement reconnaissant.
Le nom de la page _CHECKBOX_test.php (pour le formulaire). Merci !

  1. <?php
  2. switch($action)  
  3. {  
  4. case "submit";  
  5.  
  6. if (isset($_POST['image'])) {  
  7.  
  8. $image = $_POST['image'];  
  9. /*affiche le contenu du tableau $checkbox*/  
  10. //print_r($image);  
  11. /*pour chaque enregistrement du tableau on affiche sa valeur*/  
  12. for($i = 0;$i < count($image);$i++) {  
  13.  
  14. /*si un seul enregistrement*/  
  15. if ($i == 0) {  
  16. $image = ''.$image[0];  
  17.  
  18. /*si plusieurs enregistrements*/  
  19. } else {  
  20. $image = $image.';'.$image[$i]; 
  21.  
  22.       }  
  23. print $image;  
  24. }  
  25. }  
  26.  
  27. break;  
  28.  
  29. default:  
  30. ?> 
  31.  
  32. <form method="POST" action="_CHECKBOX_test.php?action=submit">
  33. <input type="checkbox" name="image[]" value="affiche_baba.jpg">
  34. <img src="http://www.encompagniedeos.com/imgincfront/affiche_baba.jpg" width="80"><br />
  35. <input type="checkbox" name="image[]" value="affiche_bubulle.jpg">
  36. <img src="http://www.encompagniedeos.com/imgincfront/affiche_bubulle.jpg" width="80"><br />
  37. <input type="checkbox"name="image[]" value="affiche_cendrillon.jpg">
  38. <img src="http://www.encompagniedeos.com/imgincfront/affiche_cendrillon.jpg" width="80"><br />
  39. <input type="submit" value="envoyer">
  40. </form>
  41.  
  42. <?php
  43. break;  
  44. }  
  45. ?>
  46.  
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
(krma) Quand un mot de passe est compromis, on le change ;)

Pour en revenir au fond, je te proposes une solution plus simple. Parce qu'en fait, tu compliques tout pour rien (et je m'y connais ;) ).

Simplification :
  1. <?php
  2. if (isset($_POST['image']))  
  3. { 
  4.  
  5.    $images = implode(';', $_POST['image']) ; 
  6.  
  7.    $base2 = mysql_connect ('***', '***', '***'); 
  8.    mysql_select_db ('***', $base2) ; 
  9.  
  10.    $sql_tpl = "INSERT INTO 2008_test VALUES ('','%s','%s','%s','%s','%s','%s','%s')" ; 
  11.    $sql = sql_build($sql_tpl, array($type ,$status, $home, $titre, $url, $texte, $images)) ; 
  12.  
  13.    mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());  
  14. }  
  15.  
  16. function sql_build($sql_fmt, $args)  
  17. { 
  18.    $escaped_args = array() ; 
  19.  
  20.    foreach($args as $value) 
  21.       $escaped_args = mysql_escape_string($value) ; 
  22.  
  23.    $sql = call_user_func_array('sprintf' 
  24.          , array_merge(array($sql_fmt), $escaped_args)) ; 
  25.  
  26.    return $sql ;  
  27. }  
  28.  
  29.  
  30. ?> 
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
Merci Lupus, un vrai truc de killer ça! Sauf que j'y baïte rien du tout :-) J'ai mis la function en haut de page et inséré ton code et j'ai des messages de "machin is not an array" et wrong parameter count argument#2...
En revanche, implode en écriture et explode en lecture me semble une voie plus gérable pour moi.
J'ai carrément pas le niveau pour ce que tu me proposes.
Ce qui me tue, c'est que ça doit être tout con de récupérer la valeur (nom) de plusieurs jpg par des checkbox, passer la variable dans la base (implode??) et les exploder pour les afficher côté client... Plus de 2 jours pour ça, heureusement quand on aime...
Mais je vois que la communauté est tjs aussi active et je vous en remercie.
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
  1. <html>
  2. <head>
  3. <title>blu</title>
  4. </head>
  5.  
  6. <body>
  7.  
  8. <?php if (isset($_POST)) { ?><pre><?php print_r($_POST); ?></pre><?php } ?>
  9.  
  10. <form method="POST" action="blu.php">
  11.    <input type="checkbox" name="image[]" value="affiche_baba.jpg" /> affiche_baba<br />
  12.    <input type="checkbox" name="image[]" value="affiche_bubulle.jpg" /> affiche_bubulle<br />
  13.    <input type="checkbox" name="image[]" value="affiche_cendrillon.jpg" /> affiche_cendrillon<br />
  14.    <input type="hidden" name="action" value = "submit" />
  15.    <input type="submit" value="envoyer"> 
  16. </form>
  17. </body>
  18. </html> 


Est ce que ceci t'aide ?
La, dans le tableau POST, tu as les checkbox sur lesquelles tu as cliqué.

En fait, je n'ai rien lu du sujet :) Je ne sais pas si c'est la récupération des checkbox qui pose problème ou bien l'insertion des données dans une table SQL.
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
  1. <html>
  2. <head>
  3. <title>blu</title>
  4. </head>
  5.  
  6. <body>
  7.  
  8. <?php if (isset($_POST['image'])) { 
  9.    ?><pre><?php
  10.    if (is_array($_POST['image'])) { 
  11.       $data = implode(';', $_POST['image']); 
  12.  
  13.       $sql = "INSERT INTO table (image) VALUES ('".mysql_escape_string($data)."')"; 
  14.       echo $sql; 
  15.    } 
  16.    ?></pre><?php
  17. }  
  18. ?>
  19.  
  20. <form method="POST" action="blu.php">
  21.    <input type="checkbox" name="image[]" value="affiche_baba.jpg" /> affiche_baba<br />
  22.    <input type="checkbox" name="image[]" value="affiche_bubulle.jpg" /> affiche_bubulle<br />
  23.    <input type="checkbox" name="image[]" value="affiche_cendrillon.jpg" /> affiche_cendrillon<br />
  24.    <input type="hidden" name="action" value = "submit" />
  25.    <input type="submit" value="envoyer">
  26. </form>
  27. </body>
  28. </html> 


En relisant le sujet, ceci devrait t'aider.
krma
krma
Déconnecté
L'homme-singe est celui qui connait ses limites
Je tente un hourra parce que grace à vos pistes, j'ai (coup de bol) trouvé le truc qui marche et qui fait ce que je veux !
Je le poste des fois que ça serve à d'autres, pour insérer plusieurs $image via checkbox dans un meme champ de table séparé par des ; (associer plusieurs images à un document en évitant de faire N champ image redondants).
Super content le gars !! Merci.
  1. <?php
  2. // page traitant les données reçues depuis un list_dir du rep image
  3. if (isset($_POST['image'])) {  
  4. $image = implode(';', $_POST['image']) ;  
  5.  
  6. /*affiche le contenu du tableau $checkbox*/  
  7. print_r($image);  
  8. $base = mysql_connect ('$host', '$login', '$pwd');  
  9. mysql_select_db ('$bd', $base) ;  
  10. // lancement de la requête d'insertion
  11. $sql = "INSERT INTO$tableVALUES('','$type','$status','$home','$titre','$url','$texte','$image')";  
  12.  
  13. // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
  14. mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());  
  15. /*pour chaque enregistrement du tableau on affiche sa valeur*/  
  16. for($i = 0;$i < count($image);$i++) {  
  17.  
  18. /*si un seul enregistrement*/  
  19. if ($i == 0) {  
  20. $image = ''.$image[0];  
  21.  
  22. /*si plusieurs enregistrements*/  
  23. } else {  
  24. $image = explode(';',$image[$i]) ; 
  25.  
  26.       }  
  27. }  
  28. }  
  29. ?> 


ps : Pour la GLOBULE : en mode preview, on dirait que les retours chariots ne sont pas pris en compte dans les modifs du post... Du coup mon $table est coincé entre INTO et VALUES, mais vous aurez corrigé de vous meme.
à plus, thanx !
page 1 page 2
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog