checkbox, SQL et boucle

Répondre
LupusMic
le 02/07/2008 à 20:37
LupusMic
(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 :
<?php
if (isset($_POST['image']))
{

$images = implode(';', $_POST['image']) ;

$base2 = mysql_connect ('***', '***', '***');
mysql_select_db ('***', $base2) ;

$sql_tpl = "INSERT INTO 2008_test VALUES ('','%s','%s','%s','%s','%s','%s','%s')" ;
$sql = sql_build($sql_tpl, array($type ,$status, $home, $titre, $url, $texte, $images)) ;

mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
}

function sql_build($sql_fmt, $args)
{
$escaped_args = array() ;

foreach($args as $value)
$escaped_args = mysql_escape_string($value) ;

$sql = call_user_func_array('sprintf'
, array_merge(array($sql_fmt), $escaped_args)) ;

return $sql ;
}


?>
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
krma
le 02/07/2008 à 22:20
krma
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.
L'homme-singe est celui qui connait ses limites
LA GLOBULE
le 02/07/2008 à 22:33
LA GLOBULE
<html>
<head>
<title>blu</title>
</head>

<body>

<?php if (isset($_POST)) { ?><pre><?php print_r($_POST); ?> </pre> <?php } ?>

<form method="POST" action="blu.php">
<input type="checkbox" name="image[]" value="affiche_baba.jpg" /> affiche_baba<br />
<input type="checkbox" name="image[]" value="affiche_bubulle.jpg" /> affiche_bubulle<br />
<input type="checkbox" name="image[]" value="affiche_cendrillon.jpg" /> affiche_cendrillon<br />
<input type="hidden" name="action" value = "submit" />
<input type="submit" value="envoyer">
</form>
</body>
</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
le 02/07/2008 à 22:39
LA GLOBULE
<html>
<head>
<title>blu</title>
</head>

<body>

<?php if (isset($_POST['image'])) {
?><pre><?php
if (is_array($_POST['image'])) {
$data = implode(';', $_POST['image']);

$sql = "INSERT INTO table (image) VALUES ('".mysql_escape_string($data)."')";
echo $sql;
}
?></pre> <?php
}
?>

<form method="POST" action="blu.php">
<input type="checkbox" name="image[]" value="affiche_baba.jpg" /> affiche_baba<br />
<input type="checkbox" name="image[]" value="affiche_bubulle.jpg" /> affiche_bubulle<br />
<input type="checkbox" name="image[]" value="affiche_cendrillon.jpg" /> affiche_cendrillon<br />
<input type="hidden" name="action" value = "submit" />
<input type="submit" value="envoyer">
</form>
</body>
</html>


En relisant le sujet, ceci devrait t'aider.
krma
le 02/07/2008 à 22:43
krma
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.
<?php
// page traitant les données reçues depuis un list_dir du rep image
if (isset($_POST['image'])) {
$image = implode(';', $_POST['image']) ;

/*affiche le contenu du tableau $checkbox*/
print_r($image);
$base = mysql_connect ('$host', '$login', '$pwd');
mysql_select_db ('$bd', $base) ;
// lancement de la requête d'insertion
$sql = "INSERT INTO $table VALUES('','$type','$status','$home','$titre','$url','$texte','$image')";

// 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)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
/*pour chaque enregistrement du tableau on affiche sa valeur*/
for($i = 0;$i < count($image);$i++) {

/*si un seul enregistrement*/
if ($i == 0) {
$image = ''.$image[0];

/*si plusieurs enregistrements*/
} else {
$image = explode(';',$image[$i]) ;

}
}
}
?>


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 !
L'homme-singe est celui qui connait ses limites
i M@N
le 02/07/2008 à 22:48
i M@N
reuh ...

waow ... si ça donne un truc fonctionnel je veux bien repasser sous window$ ... ou alors j'ai rien pigé à la question. oÔ

@+...
One Love, One Heart, One Unity.
krma
le 02/07/2008 à 22:48
krma
Ha, nos messages se sont croisés. Merci La Glob, ton code semble bien plus compact, je vais le bosser. Au fait, il faut tjs mettre les sql_escape_strg avant insertion???
L'homme-singe est celui qui connait ses limites
krma
le 02/07/2008 à 22:50
krma
mdrrr iMan smiley
c'est sur que je suis un la caverne à Mimile du PHP (pourtant 7 ans que je bidouille mais bon, quand ça fait ce que je veux, ça me suffit, meme si c'est encore moins que catholique.
L'homme-singe est celui qui connait ses limites
i M@N
le 02/07/2008 à 22:54
i M@N
reuh ...

nan mais te barres pas comme ça, faut améliorer ton code là, c'est nawak (excuse mais faut le dire).
Je tente de coder un truc et on en reparle ... je reviens.

@+...
One Love, One Heart, One Unity.
krma
le 02/07/2008 à 23:02
krma
ptdrrrrr, mais il est top ce code de 50 lignes alors que 6 suffiraient :p)
Tu sais, j'ai une devise : "quand ça marche, touches plus à rien".
Mais faut progresser, c sur.. Bon, bah merci si tu codes un truc plus mieux. à tout'
L'homme-singe est celui qui connait ses limites
Répondre
LoadingChargement en cours