IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Php-Mysql : insérer un couple de variables issu d'un checkbox [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Php-Mysql : insérer un couple de variables issu d'un checkbox
    Bonjour !

    Après avoir trouvé tant de réponses si efficaces dans ces forums, je me lance car la suis bien bloqué...
    - je génère mes checkbox dynamiquement depuis une base de données, jusque la tout va bien
    - j'envoi les valeurs des checkbox cochées (valeurs A) + une autre valeur en chp masqué elle aussi générée dynamiquement (valeurs B)
    - Je les récupèrent et souhaitent créer des lignes avec ces 2 valeurs : soit une checkbox cochée = 1 variable A + 1 variable B

    Si je n'utilises pas la 2eme variable mon script marche bien, mais impossible de combiner avec une 2ème variable, soit un couple de variable...
    Dans ce cas il me mets toujours la même valeur pour ID_DEPARTEMENT
    la table est faite de 3 champs : code Ecole ($MNT_CODE) / code stage ($ID_S) / code département ($ID_DEPARTEMENT)

    Côté formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <input type="hidden" name="ID_S" id="ID_S" value="<?php echo "$ID_S"; ?>"/>
    <?php
    $sql_eco = "select * from ecoles WHERE active='1'";
    $rsTemp_eco = mysql_query($sql_eco) or die ('Erreur : '.mysql_error()); 
     
    while ($rowTemp_eco = mysql_fetch_array($rsTemp_eco)) {
    $MNT_CODE = $rowTemp_eco['MNT_CODE'];
    $MNT_NOM = $rowTemp_eco['MNT_NOM'];
    $ID_DEPARTEMENT = $rowTemp_eco['ID_DEPARTEMENT'];						
     
    $html_ecochoix=<<<EOD
    <div class="ecolechoix"><input type="checkbox" name="MNT_CODE[]" id="MNT_CODE[]" value="$MNT_CODE" $checked> $MNT_NOM
    <input type="hidden" name="$MNT_CODE" id="$MNT_CODE" value="0"/><input type="hidden" name="ID_DEPARTEMENT" id="ID_DEPARTEMENT" value="$ID_DEPARTEMENT"/></div>
    EOD;
    echo $html_ecochoix;}
    			  ?>
    Côté traitement des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
    $ID_STAGE = $_POST['ID_S'];
     
    $box=$HTTP_POST_VARS['MNT_CODE'];
    $box_count=count($box);
    $i = 0; 
    		foreach ($box as $valeur) {
    		$ID_DEPARTEMENT=$_POST['ID_DEPARTEMENT'];	
    		$insert_eco_stage = "INSERT INTO stages_c VALUES('$valeur','$ID_S','$ID_DEPARTEMENT')";
    		$result = mysql_query($insert_eco_stage) or die ("<h1>Erreur 0001</h1>");
    		$i++;
     
    		}
    $renvoi = "../../index.php?update=1"; 
    header("Location: $renvoi");
     
    ?>
    Merci beaucoup pour votre aide...

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 240
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 240
    Points : 8 516
    Points
    8 516
    Billets dans le blog
    17
    Par défaut
    Dans ce cas il me mets toujours la même valeur pour ID_DEPARTEMENT
    Normal puisque tes champs HIDDEN ont tous le même nom.

    Es-tu sûr de la nécissité d'envoyer ID_DEPARTEMENT via le formulaire ?

    1. A priori tu peux les récupérer lors du traitement du formulaire ;
    2. Puisque l'info est déjà présente dans la table écoles il ne faudrait mieux pas la répliquer par ailleurs ;
    3. Il ne faut plus utiliser $HTTP_POST_VARS mais $_POST

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ce retour.
    Effectivement tu parles de traiter la recherche ID_DEPARTEMENT dans le foreach... en ajoutant une requête qui va cherche la valeur...

    Je part tester cette solution !

    Merci.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Pour expliquer mon cas, et la répliquaton des donnes :
    - j'ai une table d'ecoles et une table de stages
    mais j'ai des stages affectés a plusieurs ecoles, donc j'ai une table supplémentaire qui me lie id_ecole et id_stage.

    Seulement quand j'affiche tout ça, je veux trier mes données par départements, hots ma requete allant dans la dernière table chercher les ecoles qui correspondent aux stage choisi, impossible de trier par département.

    Donc je veux ajouter cette valeur dans la table qui liera donc : ecole - stage - departement.

    Mes compétences étant limitées ja'i chercher a trier des valurs issues d'une table avec un critère d'une autre table mais sans succès.
    Pour info la requete d'affichage ressemble à ça avec "order by ID_DEPARTEMENT desc" qui sert a rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $sql_eco = "select * from stages_c where ID_PRODUIT_COMMUN='$ID_STAGE'";
    $rsTemp_eco = mysql_query($sql_eco) or die ($sql_eco); 
    	while ($rowTemp_eco = Mysql_Fetch_Assoc($rsTemp_eco)) {
    	$ID_STRUCTURE2 = $rowTemp_eco['ID_STRUCTURE'];
    	$sqlID_STRUCTURE2 = "select * from ecoles WHERE MNT_CODE='$ID_STRUCTURE2' order by ID_DEPARTEMENT desc";
    	$rsTempID_STRUCTURE2 = mysql_query($sqlID_STRUCTURE2) or die ($sqlID_STRUCTURE2); 
    		while ($rowTempID_STRUCTURE2 = mysql_fetch_array($rsTempID_STRUCTURE2)) {
    		$id_art = $rowTempID_STRUCTURE2['idj'];
    		$MNT_NOM = Utf8_Encode($rowTempID_STRUCTURE2['MNT_NOM']);
    		$ID_DEPARTEMENT = $rowTempID_STRUCTURE2['ID_DEPARTEMENT'];
    		$lien_ecole_temp = 'index.php?id='.$id_art.'';
    		$lien_ecole= '<a href="'.$lien_ecole_temp.'">'.$MNT_NOM.'</a><br>';
    	}
    }

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 240
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 240
    Points : 8 516
    Points
    8 516
    Billets dans le blog
    17
    Par défaut
    Hum, pour afficher les stages triés par département il suffit de faire une jointure.

    Mettons que tu aies une bdd de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ecoles
    ----------------
    ecole_id
    ecole_nom
    ecole_departement # Clef sur departements.departement_id
    ...
     
    departements
    ----------------
    departement_id # 75 = Paris, 94 = Val-de-Marne, etc.
    departement_nom
     
    stages
    ----------------
    stage_ecole  # Clef sur ecoles.ecole_id
    ...
    Pour afficher les stages triés par départements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ALL departement_nom, departement_id, etc.
    FROM stages
    INNER JOIN ecoles ON stage_ecole = ecole_id
    INNER JOIN departements ON ecole_departement = departement_id
    ORDER BY departement_id ASC
    Comme tu peux le voir inutile de stocker le département dans le stage puisque le stage est rattaché à 1 école et que l'école est rattachée à un département.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci bcp et dsl pour mes faibles connaissances, je vais approfondir cet exemple !!

    Je me coucherais moins bête ce soir !

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Quand tu écrits
    # Clef sur departements.departement_id
    cela veux dire que la clé est définie ainsi dans la base Mysql ecoles ?
    S'agit-il de clefs étrangères ?
    Ayant conçu mes bases sans relations entre elles (avec des index et clés primaire internes a chaque bdd) comment modifier cela, est-ce possible via phpMyadmin ou faut-il les refaire en via requètes sql ?
    j'ai déjà utiliser DB Designer pour cela mais très brièvement...

    Merci beaucoup pour tous ces conseils

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 240
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 240
    Points : 8 516
    Points
    8 516
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par seb38l Voir le message
    Quand tu écrits
    cela veux dire que la clé est définie ainsi dans la base Mysql ecoles ?
    Il vaut mieux oui.

    S'agit-il de clefs étrangères ?
    Oui.

    Ayant conçu mes bases sans relations entre elles (avec des index et clés primaire internes a chaque bdd) comment modifier cela, est-ce possible via phpMyadmin ou faut-il les refaire en via requètes sql ?
    Je connaîs mal phpMyAdmin, mais je pense que c'est possible de rajouter une clef étrangère sur une version pas trop vieille.

    Les relations servent à éviter que des incohérences n'apparaîssent, donc pour le moment rien ne t'empêche de tester sans toucher au schéma relationnel de la bdd.

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    OK, j'ai comme bases :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    ecoles
    ----------------
    MNT_CODE (= identifiant ecole)
    ID_DEPARTEMENT
    ...
     
    stages
    ----------------
    ID_STRUCTURE (= identifiant ecole)
    ID_STAGE
    ...
     
    stages_communs
    ----------------
    ID_STRUCTURE (= identifiant ecole)
    ID_PRODUIT_COMMUN (= identifiant stage : ID_STAGE)
    Donc je tente une requête du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql_eco = "SELECT * FROM stages_communs WHERE ID_PRODUIT_COMMUN='$ID_STAGE'
    INNER JOIN ecoles ON stages_communs.ID_STRUCTURE = ecoles.MNT_CODE
    INNER JOIN departement ON ecoles.ID_DEPARTEMENT = departement.ID_DEPARTEMENT
    ORDER BY ID_DEPARTEMENT desc";
    Mais cela m'affiche la requète et ne l'éxécute pas, ai-je encore des erreurs dans la syntaxe ou la logique dont je ne suis pas très sur..

  10. #10
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 240
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 240
    Points : 8 516
    Points
    8 516
    Billets dans le blog
    17
    Par défaut
    Mais cela m'affiche la requète et ne l'éxécute pas, ai-je encore des erreurs
    Pour cela il faut utiliser mysql_error( ).
    Tu trouveras des exemples d'utilisation dans la doc http://fr2.php.net/mysql-error
    1re chose : en SQL on place le WHERE après les jointures, doc à ce propos : http://dev.mysql.com/doc/refman/5.5/en/select.html

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut You are the champion !!
    Yes ! Ca marche exactement comme convenu avec ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql_eco = "SELECT * FROM stages_communs 
    						INNER JOIN ecoles ON stages_communs.ID_STRUCTURE = ecoles.MNT_CODE
    						INNER JOIN departement ON ecoles.ID_DEPARTEMENT = departement.ID_DEPARTEMENT
    						WHERE ID_PRODUIT_COMMUN='$ID_STAGE'
    						ORDER BY ecoles.ID_DEPARTEMENT asc";
    Donc je me suis renseigné, a priori pas besoin de faire des clés étrangères, c'est sql qui gère avec le JOIN (ahh ces bons vieux JOINS ), par contre j'ai passé mes tables en InnoDB qui gère les clefs étrangères.
    Donc plus besoin de rajouter mes dpts dans la base de liaison !

    Un grand merci pour tes conseils !!!

  12. #12
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    pour les clés étrangères, ça dépend de ton moteur de table:
    innodb le gère et quand tu les crées, il génère les index et relations d'intégrités correspondantes
    myisam ne les gères pas du tout mais prend en compte le caractère spécial de la clé...il faut alors générer les index correspondants pour garantir l'optimisation des jointures

    en effet tu dois indexer les colonnes servant à la jointure pour garantir la non lecture de la table pour trouver les lignes concernées... (surtout à partir de centaines de lignes dans l'une des tables... et en cas de jointures multiples...)


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] PHP & MySQL > insérer résultat d'une requête dans un tableau
    Par Mousshaker dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/07/2014, 17h20
  2. Réponses: 26
    Dernier message: 01/07/2006, 13h14
  3. [SGBD] [Problème insertion variable php/mysql]
    Par vincedjs dans le forum Installation
    Réponses: 20
    Dernier message: 08/02/2006, 16h41
  4. Réponses: 9
    Dernier message: 05/01/2006, 12h24
  5. [SGBD] afficher infos issues de php/mysql dans html
    Par php_de_travers dans le forum Requêtes
    Réponses: 11
    Dernier message: 22/10/2005, 00h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo