Enregistrement de plusieurs checkbox dans une base de données

ViPHP
ViPHP | 2291 Messages

29 août 2007, 18:22

="<?php echo votant_id; ?>" .
Il faudrait nous montrer tout les formulaire (les étapes)
Il va la chercher ou :?:
Comme est t'elle transmise :?: :wink:
Modifié en dernier par dunbar le 09 déc. 2007, 17:01, modifié 1 fois.

Eléphanteau du PHP | 43 Messages

29 août 2007, 19:59

J'ai expliqué ça plus haut.

Voici des captures des tables que je dois remplir au niveau du codage du script où je suis :

la table `concours_votants` qui se remplie bien :

Image

et la table `concours_insc_crit_vot` qui elle, ne se remplie pas comme je le voudrais:

Image

Ayant choisi deux critères lors du remplissage du formulaire, deux lignes auraient dû s'enregistrer avec l'id `icv_id` qui s'incrémente (1 et 2), l'id du votant `icv_votant_id` qui devrait être le même pour les deux lignes et qui devrait s'enregistrer avec mon fameux `votant_id` que je n'arrive pas à transmettre alors qu'il l'est dans la table `concours_votants`, l'id de l'inscrit `inscrit_id` que je récupère via la page de la liste des gars inscrits par le lien sur leur pseudo, et qui lui, s'enregistre très bien dans la table `concours_insc_crit_vot`, et enfin la valeur de chaque critères choisies dans le formulaire de vote, mais là, il n'y en a qu'un seul, et sous la forme de "A" alors qu'il devrait l'être sous la forme de "1", et en plus, je devrait avoir la valeur "2" à la première ligne qui existe, et "3" (vu que j'ai choisie les critères 2 et 3) à la seconde qui n'existe malheureusement pas.

J'ai également ajouté un petit bout de code qui vérifie que les critères (checkbox) ont bien été récupérées :
if (isset($_POST['critere_valeur']))
{
var_dump($_POST['critere_valeur']);
}
ce qui m'affiche bien les deux critères choisies :

array(2) { [0]=> string(1) "2" [1]=> string(1) "3" }

mais j'aimerais qu'ils soient enregistrés dans ma table, et pas qu'ils s'affichent.. |*()

Je patoge lamentablement..

Merci pour votre aide en tout cas :wink:
Clicky

Mammouth du PHP | 1776 Messages

29 août 2007, 20:22

Si tu veux réaliser plusieurs insertions, il faudrait commencer par lui dire d'effectuer plusieurs insertions.
Pour tes recherches : parcourir données tableau php
mot clef secondaire : foreach
solution: boucle

Eléphanteau du PHP | 43 Messages

30 août 2007, 08:55

bonjour,
Si tu veux réaliser plusieurs insertions, il faudrait commencer par lui dire d'effectuer plusieurs insertions.
C'est ce que j'essaie d'apprendre à faire.
Pour tes recherches : parcourir données tableau php
mot clef secondaire : foreach
solution: boucle
j'ai fait ces recherches (je fais des tas de recherches, je n'arrête pas), elles m'expliquent bien comment parcourir un tableau, mais pas comment enregistrer les données d'un tableau dans une bdd, sur plusieurs lignes selon le nombre de checkbox choisies.

Je vais me débrouiller autrement, merci bonne journée.
Clicky

Mammouth du PHP | 1776 Messages

30 août 2007, 10:06

elles m'expliquent bien comment parcourir un tableau, mais pas comment enregistrer les données d'un tableau dans une bdd,

Code : Tout sélectionner

mysql_query(" INSERT INTO concours_insc_crit_vot (icv_id, icv_votant_id, icv_inscrit_id, icv_valeur) VALUES ('', '".$_POST['votant_id']."', '".$_POST['inscrit_id']."', '".$_POST['critere_valeur']."') ") or die (mysql_error());
sur plusieurs lignes selon le nombre de checkbox choisies.
vois du côté de foreach ?
Je vais me débrouiller autrement, merci bonne journée.
Pourtant tu as toutes les cartes en main... :roll:
http://www.phpdebutant.org/article11.php

Eléphanteau du PHP | 43 Messages

30 août 2007, 10:39

Pour la requête, j'avais donc juste, c'est ce qu'il faut avant (foreach ou peut-être même juste for) qui me manque.
Je vais voir ce que je peux faire avec le lien que tu m'as donné, je suis d'ailleurs tombée sur cette page en faisant mes recherches hier soir, mais je ne devais plus trop avoir les idées claires, je n'ai pas fait assez attention à l'article.. :?

Si tu me dis que j'ai toutes les cartes en main, ça me motive un peu plus.

Merci beaucoup :)
Clicky

ViPHP
ViPHP | 2291 Messages

30 août 2007, 10:44

Je ne sais pas si c'est la meilleur méthode mais voici un exemple qui fonctionne.
$critere_valeur = array($_POST['critere_valeur'][1],
                                        $_POST['critere_valeur'][2],
                                        $_POST['critere_valeur'][3],
                                        $_POST['critere_valeur'][4]);


               foreach($critere_valeur as $inc_critere_valeur)  {

                  $req = "INSERT INTO
                                concours_insc_crit_vot
                                      							icv_crit_id 	  = '',
							icv_votant_id 	  = '".mysql_real_escape_string($_POST['votant_id'])."',
							icv_inscrit_id 	  = '".mysql_real_escape_string($_POST['inscrit_id'])."',
							icv_valeur 		  = '".mysql_real_escape_string($inc_critere_valeur)."'
							";
		        $result = mysql_query($req) or die("Erreur MySQL : Impossible de sauvegarder les données");

               }
Modifié en dernier par dunbar le 30 août 2007, 22:03, modifié 2 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 5924 Messages

30 août 2007, 15:21

On ne met pas une requète dans une boucle. On utilise des insertions multiples :

Code : Tout sélectionner

INSERT INTO machin VALUES ('truc','bidule'), ('machin', 'machintruc'), …

ViPHP
ViPHP | 2291 Messages

30 août 2007, 17:13

On ne met pas une requète dans une boucle. On utilise des insertions multiples :

Code : Tout sélectionner

INSERT INTO machin VALUES ('truc','bidule'), ('machin', 'machintruc'), …
J'ai modifier :cry:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 5924 Messages

30 août 2007, 18:04

Euh, tu es sur ?
Au passage, tu utilises SET dans un INSERT INTO alors que SET ne s'utilise que dans un REPLACE ou un UPDATE :-/

ViPHP
ViPHP | 2291 Messages

30 août 2007, 18:36

Euh, tu es sur ?
Au passage, tu utilises SET dans un INSERT INTO alors que SET ne s'utilise que dans un REPLACE ou un UPDATE :-/
Ou est mon erreur à part SET :?: je ne demande qu'a apprendre :wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 5924 Messages

30 août 2007, 21:12

A part ton erreur sur le SET, l'autre problème n'est pas vraiment une erreur, mais c'est un problème d'optimisation, c'est qu'une requète dans une boucle ca consomme beaucoup plus de ressources. Il faut donc faire en sorte de faire des requètes plus évoluées. Dans ce cas, comme je te dis, il vaut mieux faire une requète d'insertion multiple qui insère tous les enregistrements en même temps, plutôt que de faire n requètes insérant chacune un seul enregistrement.
C'est pour cela que je te conseille plutôt la forme suscitée. Mais si tu ne connaissais pas cette forme, tu n'étais pas sensé savoir que cela existait, je t'invite donc à lire la doc MySQL, cela te permettra d'aider plus efficacement la prochaine fois :).

Mais avant tout, il faut que tu édites ton code en enlevant l'erreur SQL du SET pour respecter la syntaxe des requètes de type INSERT, et ensuite d'implémenter la solution des insertions multiples en construisant la requète avec une boucle (sur cepoint, tu avais raison, il faut une boucle), mais en n'exécutant en définitive qu'une seule requète, et ce, avec la syntaxe de l'insertion multiple.

Mammouth du PHP | 693 Messages

30 août 2007, 21:56

IL me semble que maintenant un peu mettre SET avec un INSERT (du moins avec MySQL)

ViPHP
ViPHP | 2291 Messages

30 août 2007, 22:03

A part ton erreur sur le SET, l'autre problème n'est pas vraiment une erreur, mais c'est un problème d'optimisation, c'est qu'une requète dans une boucle ca consomme beaucoup plus de ressources. Il faut donc faire en sorte de faire des requètes plus évoluées. Dans ce cas, comme je te dis, il vaut mieux faire une requète d'insertion multiple qui insère tous les enregistrements en même temps, plutôt que de faire n requètes insérant chacune un seul enregistrement.
.

Je pense avoir comprid, mais il veut une ligne par cases cocher :?:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 1776 Messages

30 août 2007, 22:36

On ne met pas une requète dans une boucle. On utilise des insertions multiples :

Code : Tout sélectionner

INSERT INTO machin VALUES ('truc','bidule'), ('machin', 'machintruc'), …
Si on part là dedans, on peut aussi mettre un LOCK TABLE à write...
ON parle pas d'optimisation ici, simplement de quelques requêtes qui ont très certainement besoin d'un last_insert_id
Et je t'assure : on met des requêtes dans des boucles... :roll: