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 :

insertion valeurs input select dans BDD


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 24
    Points
    24
    Par défaut insertion valeurs input select dans BDD
    Bonsoir, voici mon problèmeje précise que je débute en PHP, merci de votre indulgence)



    Un étudiant a la possibilité de choisir plusieurs matières, qui sont ensuites stockées en base.

    Par la suite, le professeur qui correspond à une ou plusieurs de ces matières choisies, peut donner son avis sur ces choix.

    Un tableau avec nometudiant,prenometudiant,choix de la matiere, et un menu déroulant (avis favorable/defavorable) s'affiche pour le professeur.

    J'arrive à récuperer les différents avis du prof pour les différentes matières choisies par UN élève, mais au moment de l'insertion en base, seul un avis et insérer pour toutes les matières choisies(avis favorable pour tous, ou l'inverse).



    Voici mon code:


    Page qui affiche le tableau:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
      while( $result = mysql_fetch_object( $requete ) )
      {
      ?>
     
     
     
    	  <table border="1" align="center">
    			<tr valign="middle" align="center">
     
    				<td width="400"><?php echo "$result->NomEtud"?> </td>  
    				<td width="400"><?php echo "$result->PrenomEtud"?> </td> 
    				<td width="400"><?php echo "$result->filieres"?> </td>
     
    				<td width="100">
    				<form method="post" action="validationavis2.php">
    				<select name="Avis[]" >
    				<option name="Avis[]" value="Très Favorable">Très Favorable</option>
    				<option name="Avis[]" value="Favorable">Favorable</option>
    				<option name="Avis[]" value="Défavorable">Défavorable</option>
    				<option name="Avis[]" value="Sans Opinion">Sans Opinion</option>
    				</select>
    				<input type="hidden" name="NomEtud" value="<?php echo($NomEtud) ;?>"/>
    				<input type="hidden" name="PrenomEtud" value="<?php echo($PrenomEtud) ;?>"/>
    				<input type="hidden" name="id" value="<?php echo($id) ;?>"/>
    				<input type="hidden" name="filieres" value="<?php echo($filieres) ;?>"/>
    				<input type="hidden" name="idvoeux[]" value="<?php echo($idvoeux) ;?>"/>      
     
     
     
      </table>
     
     
      <?php
      }//fin if 
     
     
      ?>
      <br><br><br>
    <center><input type="submit" name="submit"></button></center>
    </form>

    Page qui est censée inserer en base l'avis du prof par matière choisie par 1 etudiant:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    <?php
      //connection au serveur
      $cnx = mysql_connect( "localhost", "toto", "test" ) ;
     
      //sélection de la base de données:
      $db  = mysql_select_db( "orientation" ) ;
     
      //récupération des valeurs des champs:
     
     
     
     
     
      //nom de la matiere:
     $Avis = $_POST['Avis'] ;
      $NomEtud  = $_POST['NomEtud'] ;
     $PrenomEtud  = $_POST['PrenomEtud'] ;
      $id  = $_POST['id'] ;
      $filieres  = $_POST['filieres'] ;
        $idvoeux  = $_POST['idvoeux'] ;
      //effectif total:
     
     
     
      //création de la requête SQL:
     
     
    	for ($i=0;$i<sizeof($Avis);$i++){    
        echo $Avis[$i]; 
     
     
     
    $sql="UPDATE  voeux inner join choixfilieres on voeux.filieres=choixfilieres.filieresprof
    SET AVIS='".$Avis[$i]."'
    WHERE id='" . $id. "' 
     
    ";
     
     
      //exécution de la requête SQL:
      $requete = mysql_query($sql) or die( mysql_error() ) ;
     
     }
     
      //affichage des résultats, pour savoir si la modification a marchée:
      if($requete)
      {
        ?> <br><br> <center> <?php echo("La modification a &eacute;t&eacute; correctement effectu&eacute;e") ; 
     
    	    //echo $NomEtud;
    	     //echo $PrenomEtud;
    	    //echo $Avis;
    	   // echo $_SESSION['nomprof'];
    	    //echo $filieres ;
     
     
    	     ?> </center>
      <?php 
      }
      else
      {
       ?> <br><br> <center> <?php echo("La modification a &eacute;chou&eacute;e") ; ?> </center>
     <?php
      }
     
     
    ?>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    la 1re étape pour bien comprendre ce qui se passe est d'afficher les contenu des différentes variables pour vérifier ce qu'elle contiennent.
    dans votre cas commencez par afficher ce qui se trouve dans $_POST

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonne Année,

    Pour ma part, je pense que la TOUTE PREMIERE ETAPE est de bien REFLECHIR à une BONNE CONCEPTION des tables en Bdd.

    Là, on ne sait pas grand chose de la structure des tables... ni comment sont stockés les choix.


    Au minimum, il faut :

    1- table T_ETUDIANTS
    • id_etudiant (AUTO-INCREMENT)
    • nom_etudiant
    • prenom_etudiant
    • ... (autres infos concernant uniquement l'etudiant)

    2- table T_MATIERES
    • id_matiere (AUTO-INCREMENT)
    • nom_matiere

    3- table T_PROFS
    • id_prof (AUTO-INCREMENT)
    • nom_prof
    • prenom_prof
    • ...(autres infos concernant uniquement le prof)

    4- table T_AVIS
    • id_avis (AUTO-INCREMENT)
    • nom_avis (favorable, défavorable,......)


    Maintenant les choix de matières. Il faut une table de LIAISON, dans laquelle :on ne stocke QUE les id
    5- table T_ETUDIANTS_MATIERES
    • id_etudiant_matiere (AUTO-INCREMENT, facultatif ici)
    • id_etudiant
    • id_matiere


    Dans un 2ème temps, on veut stocker les avis des prof.

    1er CAS : UN SEUL prof donne son avis (par choix de matières), on peut les ajouter dans cette table T_ETUDIANTS_MATIERES.
    Ce qui donne :
    5b- table T_ETUDIANTS_MATIERES
    • id_etudiant_matiere (AUTO-INCREMENT, facultatif)
    • id_etudiant
    • id_matiere
    • id_prof
    • id_avis


    2ème CAS : Si PLUSIEURS profs peuvent donner un avis (sur un même choix de matières), alors il faut envisager une AUTRE table de liaison :
    5c- table T_ETUDIANTS_MATIERES
    • id_etudiant_matiere (AUTO-INCREMENT) (qui devient ici NECESSAIRE)
    • id_etudiant
    • id_matiere

    6c- table T_PROFS_AVIS_MATIERES
    • id_prof_avis_matiere (AUTO-INCREMENT, facultatif)
    • id_prof
    • id_avis
    • id_etudiant_matiere (qui devient ici NECESSAIRE)


    N.B. A priori, tu es dans le 1er CAS.
    Le 2ème est donné à titre d'exemple.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Et puisque tu débutes... autant le faire BIEN !

    l'API mysql_ est OBSOLÈTE depuis belle lurette !!
    Il faut faut plus l'utiliser ! (elle est supprimée de PHP7)

    Aujourd'hui, on utilise PDO



    N.B. Les balises HTML <center> (entre autres) sont aussi obsolètes...
    Il faudrait penser à lire des tutos plus récents....

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par mathieu Voir le message
    ... commencez par afficher ce qui se trouve dans $_POST
    Merci pour ta réponse, je l'ai déjà fait à la ligne 29-30.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for ($i=0;$i<sizeof($Avis);$i++){    
        echo $Avis[$i];
    Et comme expliqué dans la description de mon problème, il affiche correctement les différents avis . ce n'est qu'au moment de l'insertion en base, qu'il ne prend que la dernière valeur.
    Il doit falloir faire une boucle à mon avis, mais je tourne en rond.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Merci jreaux62 et Bonne Année à toi aussi!
    Tu as 100% raison, je reste sur les quelques notions de PHP que j'ai acquises il y a quelques années. Pas évident de me mettre au PDO, mais je vais y penser sérieusement.

    Concernant ma BDD,
    j'ai une table voeux avec: NomEtud,PrenomEtud,ClasseEtud,filieres,idEtud,idvoeux(cle primaire)
    une autre table choixfilieres avec idProf,NomProf,PrenomProf,ClasseProf

    Au final, pour mon problème, j'arrive à récuperer correctement les valeurs des avis provenant des differents input select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for ($i=0;$i<sizeof($Avis);$i++){***
    ****echo $Avis[$i];
    les avis selectionnées s'affichent correctement,
    mais pour l'insertion en base, c'est la dernière valeur qui s'insère, pour tous les avis..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql="UPDATE  voeux inner join choixfilieres on voeux.filieres=choixfilieres.filieresprof
    SET AVIS='".$Avis[$i]."'
    WHERE id='" . $id. "' 
     
    ";
    avec le inner join, je ne veux mettre à jour que les matières concernées par le prof, et selectionnées par l'eleve. Un prof de maths ne donnera pas son avis sur une matière sur laquelle il n'est pas affecté, type francais et histoire

  7. #7
    Invité
    Invité(e)
    Par défaut
    Regarde le code HTML généré.

    Tu verras que les balises form sont mal placées, et que tu ne différencies pas les différentes lignes.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    J'ai beau chercher je ne vois pas comment faire...

Discussions similaires

  1. Insertion d'un champ select dans BDD et erreur dans un formulaire.
    Par mitsukk1992 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 04/12/2014, 12h03
  2. Afficher une valeur de select dans SQLplus
    Par Haage dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 17/09/2008, 15h57
  3. Réponses: 9
    Dernier message: 27/05/2008, 13h44
  4. Réponses: 13
    Dernier message: 27/08/2007, 12h16
  5. [MySQL] Affichage de valeurs par selection dans une table
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 16/12/2005, 17h04

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