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 :

UPDATE multiple avec un seul bouton d'envoi


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

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

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Points : 13
    Points
    13
    Par défaut UPDATE multiple avec un seul bouton d'envoi
    Bonjour,
    Si jenvoie un id il va sur la table note et recupere les notes de cet eleve comme il y a plusieurs matiere je veuxqu'avec un seul bouton d'envoie je puisse les mettre a jour en meme temps. J'ai essaye cette requette mais seul les modifications d'une matiere sont prises en compte.

    voici le code

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    <?php
     
    include('../includes/fonctions.inc.php');
     
    //Modification note
    		if(isset($_GET['ok']))
    	{
     
     
     
     
    		$sql="UPDATE note SET 
    		idelevenote='".$_GET['id_eleve']."', matierenote='".$_GET['matieren']."',
    		note1='".$_GET['note1']."', note2='".$_GET['note2']."',  note3='".$_GET['note3']."', compo1='".$_GET['compo1']."', semestre1=''
    		
    		WHERE idnote='".$_GET['id_note']."'  ";
     
    		if($result=mysql_query($sql))
    	{
    		echo "<script type=\"text/javascript\">
    		alert('note modifiee')</script>";
    		header('location:note.php');
    	}
    		else 
    	{
    		echo "<script type=\"text/javascript\">
    		alert('erreur verrifier vos parametre')</script>";
    	}	}
     
     
    //requête de recuperation
    if(isset($_GET['id']))
    $sql2 = mysql_query( "SELECT * FROM note WHERE idelevenote ='".$_GET['id']."' ");
     
    if(mysql_num_rows($sql2)==0)
        		{  echo "PAS DE NOTES DISPONIBLE";
    				header('location:noteInscription.php');
     
    			}		 
    	else
    	{
    	while($note=mysql_fetch_array($sql2)){
     
     
     
    ?>
     
    <html>
        <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<title>UPDATE-NOTE</title>
    	</head>
     
    <body>
     
    <form  method="GET" name="noteup" action="noteupdate.php">
    					<br /><br /><br />
    		<table align="center" width=500px>
    	<tr>
    		<td width=110px height=25px>id_note <br /><br /></td>
    		<td><input type="hidden" name="id_note" value="<?php echo $note['idnote']; ?>" />
    			<?php echo $note['idnote']; ?><br /><br />
    		</td>
    	</tr>	
    	<tr>
    		<td width=110px height=25px>id_eleve<br /><br /></td>
    		<td><input type="hidden" name="id_eleve" value="<?php echo $note['idelevenote']; ?>" />
    			<?php echo $note['idelevenote']; ?><br /><br />
    		</td>
    	</tr>
    <tr>
    		<td width=110px height=25px>matiere <br /><br /></td>
    		<td><input type="hidden" name="matieren" value="<?php echo $note['matierenote']; ?>" />
    			<?php echo $note['matierenote']; ?><br /><br />
    		</td>
    	</tr>		
    	<tr>
    		<td>
    		note1
    		</td>
    			<td>
    			<input type="text" name="note1" value="<?php echo $note['note1']; ?>" size=10 />
    			</td>
    	</tr>
    	<tr>
    		<td>
    			note2
    		</td>
    			<td>
    				<input type="text" name="note2" value="<?php echo $note['note2']; ?>" size=10 />
    			</td>
    	</tr>
    	<tr>
    			<td>
    			note3
    			</td>
    			<td>
    				<input type="text" name="note3" value="<?php echo $note['note3']; ?>" size=10 />
    			</td>
    	</tr>
    	<tr>
    		<td>
    		compo1
    		</td>
    			<td>
    			<input type="text" name="compo1" value="<?php echo $note['compo1']; ?>" size=10 />
    			</td>
    	</tr>
    	<tr>
    		<td width=110px height=25px>TRIM<br /><br /></td>
    		<td><input type="hidden" name="trim1" value="<?php echo $note['semestre1']; ?>" />
    			<?php echo $note['semestre1']; ?><br /><br />
    		</td>
    	</tr>
     
    	<?php }} ?>
    	<tr>
    		<td colspan="2" align="center"><br />
    		<input type="submit" name="ok" value="envoie">
    		</td>
    	</tr>
    			</table>
    </form>
     
    </body>
    </html>

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je vois déjà un problème évident :
    Tu place mal l'entrée de ta boucle.
    Regarde ton code source, ça doit être un beau bazar.
    tu veux autant d'input que de notes pour cet élève ?
    Place ton entrée de boucle après id_eleve et avant matiere. Mets bien sûr l'id note dans la boucle aussi.
    Au passage, il ne faut pas plusieurs fois le même nom a un input à l'intérieur de ta boucle, sinon, ça va bugger.
    Alors fais un code de ce genre au sein de ta boucle...
    PS : mets la css dans la css... c'est plus propre aussi.
    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
     
    $i=0;
    $update='';
    while($note=mysql_fetch_array($sql2)){
    	$update.='<tr>
           <td class="th">matiere </td>
           <td><input type="hidden" name="matiere_'.$i.'" value="'.$note['matierenote'].'" />'.$note['matierenote'].'</td>
    	</tr>';
    	$update.='<tr>
           <td class="th">Note 1 </td>
           <td><input name="note1_'.$i.'" value="'.$note['note1'].'" />'.$note['note1'].'</td>
    	</tr>';
     
            //etc etc
     
    	$i++;
    }
    echo $update;
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

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

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    exuse moi pour le retard une mechante grippe qui me fatigue,
    j'ai essaye avec mais je ca ne passe toujours pas
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
     
     
    <?php
    // Seul une ligne de note est modifier
    include('../includes/fonctions.inc.php');
    //Modification note
    		if(isset($_GET['ok']))
    	{
    	$idnote=$_GET['id_note'];
    	$ideleve=$_GET['id_eleve'];
    	$matiere=$_GET['matiere_note'];
    	$note1=$_GET['note1'];
    	$note2=$_GET['note2'];
    	$note3=$_GET['note3'];
    	$compo1=$_GET['compo1'];
     
    if(empty($compo1))
    		{
    		 $trim1=($note1 + $note2 + $note3) / 3;
    		}
    		 if(empty($note1))
    		{
    		 $trim1=($note2 + $note3 + $compo1) / 3;
    		}
    		 if(empty($note2))
    		{
    		 $trim1=($note1 + $note3 + $compo1) / 3;
    		}
    		 if(empty($note3))
    		{
    		 $trim1=($note1 + $note2 + $compo1) / 3;
    		}
    		 if(empty($note1) AND empty($compo1))
    		{
    		 $trim1=($note2 + $note3) / 2;
    		}
    		if(empty($note1) AND empty($note3))
    		{
    		 $trim1=($note2 + $compo1) / 2;
    		}
    		 if(empty($note1) AND empty($note2))
    		{
    		 $trim1=($note3 + $compo1) / 2;
    		}
    		if(empty($note1) AND empty($note2) AND empty($note3))
    		{
    		 $trim1=$compo1 ;
    		}
    		if(empty($note2) AND empty($note3) AND empty($compo1))
    		{
    		 $trim1=$note1;
    		}
    		if(empty($note1) AND empty($note3) AND empty($compo1))
    		{
    		 $trim1=$note2;
    		}
    		if(empty($note1) AND empty($note2) AND empty($compo1))
    		{
    		 $trim1=$note3;
    		}
    		else
    		{
    		 $trim1=($note1 + $note2 + $note3 + $compo1) / 4;
    		}
     
     
    		$sql="UPDATE note SET 
    		idelevenote='".$ideleve."', matierenote='".$matiere."',
    		note1='".$note1."', note2='".$note2."',  note3='".$note3."', 
    		compo1='".$compo1."', trim1='".$trim1."'
    		
    		WHERE idnote='".$idnote."'  ";
     
    		if($result=mysql_query($sql))
    	{
    		echo "<script type=\"text/javascript\">
    		alert('note modifiee')</script>";
    		header('location:note.php');
    	}
    		else 
    	{
    		echo "<script type=\"text/javascript\">
    		alert('erreur verrifier vos parametre')</script>";
    	}	}
     
     
    //requête de recuperation
    if(isset($_GET['id']))
    $sql2 = mysql_query( "SELECT * FROM note WHERE idelevenote ='".$_GET['id']."' ");
     
    if(mysql_num_rows($sql2)==0)
        		{  echo "PAS DE NOTES DISPONIBLE";
    				header('location:noteInscription.php');
     
    			}		 
    	else
    	{
    	while($note=mysql_fetch_array($sql2)){
     
     
     
    ?>
     
    <html>
        <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<title>UPDATE-NOTE</title>
    	</head>
     
    <body>
     
    <form  method="GET" name="noteup" action="noteUpdate.php">
    					<br /><br /><br />
    		<table align="center" width=500px>
    	<tr align=center>
    		<b> <td width=110px height=25px>id_note</td><td width=110px height=25px>Mat</td><td  height=25px>Matiere</td>
    		<td width=110px height=25px>note1</td><td width=110px height=25px>note2</td><td width=110px height=25px>note3</td>
    		<td width=110px height=25px>compo1</td><td width=110px height=25px>trim1</td>
    		</b>
    	</tr>
    	<tr align="center">
    		<td><input type="hidden" name="id_note" value="<?php echo $note['idnote']; ?>" />
    			<?php echo $note['idnote']; ?><br /><br />
    		</td>
    <?PHP	
     
    		$i=0;
    $update='';
    while($note=mysql_fetch_array($sql2)){
    	$update.='<tr>
           <td class="th">matiere </td>
           <td><input type="hidden" name="matiere_'.$i.'" value="'.$note['matierenote'].'" />'.$note['matierenote'].'</td>
    	</tr>';
    	$update.='<tr>
           <td class="th">Note 1 </td>
           <td><input name="note1_'.$i.'" value="'.$note['note1'].'" />'.$note['note1'].'</td>
    	</tr>'	
    	$update.='<tr>
           <td class="th">Note 2 </td>
           <td><input name="note2_'.$i.'" value="'.$note['note2'].'" />'.$note['note2'].'</td>
    	</tr>'	
    	$update.='<tr>
           <td class="th">Note 3 </td>
           <td><input name="note3_'.$i.'" value="'.$note['note3'].'" />'.$note['note3'].'</td>
    	</tr>'	
    	$update.='<tr>
           <td class="th">Compo1 </td>
           <td><input name="compo1_'.$i.'" value="'.$note['compo1'].'" />'.$note['compo1'].'</td>
    	</tr>'
     
     
    		$i++;
    }
    echo $update; }
    ?>
     
    		<td colspan="2" align="center">
    		<input type="submit" name="ok" value="envoie">
    		</td>
    	</tr>
    			</table>
    </form>
     
    </body>
    </html>

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Attention empty est positif avec les zéros ! L'élève sera bien content de voir que le zéro qu'il a eu en cours de géographie n'est pas compté dans sa moyenne trimestrielle…
    Moi j'utiliserais plutôt isset. Et je crois qu'on n'a pas d'autre choix que de vérifier explicitement que le champ a été rempli en vérifiant qu'il n'est pas strictement égal à la chaîne vide (*) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset($_GET['compo1']) AND $_GET['compo1'] !== '') {
      ...
    }
    Je dis bien strictement, avec le !==, pour éviter une conversion de type malheureuse : en comparaison non stricte, 0 == ''.

    (*) Edit: et il y a peut-être aussi un trim à déposer pas trop loin.

    De toute façon cette suite de if (empty()) me semble bien trop maladroite. Pourquoi ne pas utiliser le résultat de isset comme des nombres ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombreNotes = isset($compo1) + isset($note1) + isset($note2) + isset($note3);
    Tu saisis l'idée ?

    Autre chose, il vaut mieux convertir le type des notes. Les données de formulaires arrivent toujours comme chaînes. Là ça part dans ta BDD donc c'est pas grave, mais si tu veux faire des opérations avec dans ton code PHP, je te conseille de les convertir avec floatval ou quelque chose dans ce goût-là.

    Attention aussi aux injections SQL. Actuellement, tu envoies directement les données GET dans ta BDD. C'est mal. Une simple conversion avec floatval te permet déjà d'éliminer le code malicieux qui pourrait t'être envoyé.

    Quand tu renvoies au client les données issues de GET, le risque d'injection SQL se transforme en risque d'attaque XSS. En l'occurence $note['note1'] et consœurs proviennent de ta BDD, et comme tu n'as pas toujours protégé les données qui y ont été insérées, il se pourrait qu'elle contienne du code malicieux, par exemple un XSS snippet destiné à voler des données à tes visiteurs ou introduire des malwares sur leurs ordinateurs.

    Quant au mauvais placement du while signalé par Dendrite… Eh bien c'est pire, maintenant il y en a deux !

    Une dernière chose, que je rappelle souvent car apparemment les gens sont mal informés : quand il n'y a pas de variables ni de séquences d'échappement dans une chaîne, il faut préférer les guillemets simples. Non seulement c'est plus efficace pour l'interpréteur PHP, mais également, une fois qu'on a pris l'habitude, ça renforce la cohérence du code : quand on voit des guillemets simples on sait que la chaîne n'est pas censée contenir des variables, et réciproquement. En choisissant sciemment le type de guillemets, on exprime son intention sur le devenir de la chaîne. C'est plus rigoureux et ça ne demande que peu d'efforts.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

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

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Watilin au contraire j'ai un probleme de zero qui s'ajoute au case vide et qu'il compte quant au protection j'attendais d'abord de pour regler le probleme d'insersion et ensuite faire les autres verification vous constaterez que mon niveau n'est pas eleve, je vais refaire pour voir

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Voilà un petit test que j'ai fait hier avant de te répondre. Si ça peut te servir
    Code PHP : 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
    <!DOCTYPE html>
    <html lang=fr>
    <head>
       <meta charset=utf-8>
       <title>Les pièges de $_GET et isset</title>
    </head>
    <body>
     
    <?php
     
    $total = 0;
    foreach (['a', 'b', 'c', 'd'] as $var) {
       if (isset($_GET[$var]) && $_GET[$var] !== '') {
          $total++;
          $$var = floatval($_GET[$var]);
          ${"out_$var"} = $$var;
       } else {
          $$var = 0;
          ${"out_$var"} = '';
       }
    }
     
    ?>
     
    <form>
       <label>
          a = <input type=text name=a value=<?php echo $out_a; ?>>
       </label>
       <label>
          b = <input type=text name=b value=<?php echo $out_b; ?>>
       </label>
       <label>
          c = <input type=text name=c value=<?php echo $out_c; ?>>
       </label>
       <label>
          d = <input type=text name=d value=<?php echo $out_d; ?>>
       </label>
       <input type=submit>
    </form>
     
    <pre><?php
     
    echo "total = $total\n";
     
    if ($total > 0) {
       $moyenne = ($a + $b + $c + $d) / $total;
       echo "moyenne = $moyenne";
    } else {
       echo 'pas de valeurs pour une moyenne…';
    }
     
    ?></pre>
     
    </body>
    </html>

    Je résouds ton problème de « zéros qui apparaissent » en prenant des variables différentes pour le calcul ($a) et pour l’affichage ($out_a). Par défaut je donne la valeur 0 à $a et '' à $out_a.

    Note : j'utilise des variables dynamiques pour raccourcir le code. Ce n'est pas forcément une bonne façon de faire
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

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

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    En fait les 0 s'ajoute lors de l'insersion dans la bdd
    j'ai essayer avec ca
    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
     
     
    	if(isset($compo1) AND $compo1== '')
    		{
    		 $trim1=($note1 + $note2 + $note3) / 3;
    		}
        if(isset($note1) AND $note1== '')
    		{
    		 $trim1=($note2 + $note3 + $compo1) / 3;
    		}
    	if(isset($note2) AND $note2== '')
    		{
    		 $trim1=($note1 + $note3 + $compo1) / 3;
    		}
    	if(isset($note3) AND $note3== '')
    		{
    		 $trim1=($note1 + $note2 + $compo1) / 3;
    		}
       if((isset($note1) AND $note1== '') AND if(isset($compo1) AND $compo1== ''))
     
    		{
    		 $trim1=($note2 + $note3) / 2;
    		}
    	if((isset($note1) AND $note1== '') AND (isset($note3) AND $note3== ''))
    		{
    		 $trim1=($note2 + $compo1) / 2;
    		}
       if((isset($note1) AND $note1== '') AND (isset($note2) AND $note2== ''))
     
    		{
    		 $trim1=($note3 + $compo1) / 2;
    		}
    	if((isset($note1) AND $note1== '') AND (isset(note2) AND $note2== '') AND (isset(note3) AND note3==''))
    		{
    		 $trim1=$compo1 ;
     
    	 if((isset($note2) AND $note2== '') AND (isset($note3) AND $note3=='') AND (isset($compo1) AND $compo1== ''))
     
    		{
    		 $trim1=$note1;
    		}
        if((isset($note1) AND $note1== '') AND (isset($note3) AND $note3=='') AND (isset($compo1) AND $compo1== ''))
     
    		{
    		 $trim1=$note2;
    		}
    	 if((isset($note1) AND $note1== '') AND (isset(note2) AND $note2=='') AND (isset($compo1) AND $compo1== ''))
    		{
    		 $trim1=$note3;
    		}
    		else
    		{
    		 $trim1=($note1 + $note2 + $note3 + $compo1) / 4;
    		}
    avec la methode des variable dynamique une page blanche s'affiche
    pour l'insertion multiple avec un bouton d'envoi
    meme si c'est possible lors de l'insersion par exemple lorsque je selectionne un classe et une matiere il trouve le eleves de cette classe avec la matiere choisie et me permet de remplir d'bord toutes les notes et avec un seul submit de les inserer c'est pour faire un gain de temp c'est fastigieux de vouloir inserrer les notes eleve par eleve

  8. #8
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Oublie cette histoire de variables dynamiques, c'était une mauvaise idée. Voilà le même code avec la boucle foreach « dépliée » et sans les variables $out_a, $out_b, etc. :
    Code PHP : 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
    69
    70
    <!DOCTYPE html>
    <html lang=fr>
    <head>
       <meta charset=utf-8>
       <title>Les pièges de $_GET et isset</title>
    </head>
    <body>
     
    <?php
     
    $total = 0;
     
    if (isset($_GET['a']) && $_GET['a'] !== '') {
        $total++;
        $a = floatval($_GET['a']);
    } else {
        $a = 0;
    }
    if (isset($_GET['b']) && $_GET['b'] !== '') {
        $total++;
        $b = floatval($_GET['b']);
    } else {
        $b = 0;
    }
    if (isset($_GET['c']) && $_GET['c'] !== '') {
        $total++;
        $c = floatval($_GET['c']);
    } else {
        $c = 0;
    }
    if (isset($_GET['d']) && $_GET['d'] !== '') {
        $total++;
        $d = floatval($_GET['d']);
    } else {
        $d = 0;
    }
     
    ?>
     
    <form>
       <label>
          a = <input type=text name=a value="">
       </label>
       <label>
          b = <input type=text name=b value="">
       </label>
       <label>
          c = <input type=text name=c value="">
       </label>
       <label>
          d = <input type=text name=d value="">
       </label>
       <input type=submit>
    </form>
     
    <pre><?php
     
    echo "total = $total\n";
     
    if ($total > 0) {
       $moyenne = ($a + $b + $c + $d) / $total;
       echo "moyenne = $moyenne";
    } else {
       echo 'pas de valeurs pour une moyenne…';
    }
     
    ?></pre>
     
    </body>
    </html>

    Enregistre ce code en entier dans un fichier .php et teste-le sur ton serveur local. Dis-moi si ça ressemble au comportement que tu cherches.

    Tu me diras que je n'utilise pas directement les isset comme dans l'astuce que je t'ai donnée plus tôt (isset($a) + isset($b) + ...). En effet, mais les $total++ restent dans cet esprit.

    lorsque je selectionne un classe et une matiere il trouve le eleves de cette classe avec la matiere choisie
    Ça c'est facile, c'est une requête SQL assez simple.

    Ce qui va être un tout petit peu plus compliqué c'est de mettre à jour la <table> en fonction des colonnes choisies. Il faut savoir manipuler le DOM et être méthodique.

    Pour l'instant, commence par corriger ton code avec ce que Dendrite et moi t'avons indiqué ; ensuite, vérifie le code HTML produit (en affichant la page dans ton navigateur, fais Ctrl+U), et assure-toi qu'il est cohérent. Si c'est le cas, montre-nous le code PHP corrigé, et montre-nous le code HTML généré de la table.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

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

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    exuse pour le retard toujours souffrant
    watilin j'ai teste le code pour la moyenne c'est le comportement souhaite en plus il ya moins de ligne.
    j'ai essaye avec les requete de Dendrite mais ca ne passe toujours pas il ne modifie pas
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    <?php
     
    include('../includes/fonctions.inc.php');
     
    //Modification note
    		if(isset($_POST['ok']))
    	{
     
     
     
     
    		$sql="UPDATE note SET 
    		idelevenote='".$_POST['id_eleve']."', matierenote='".$_POST['matieren']."',
    		note1='".$_POST['note1']."', note2='".$_POST['note2']."',  note3='".$_POST['note3']."', compo1='".$_POST['compo1']."', trim1=''
     
    		WHERE idnote='".$_POST['id_note']."'  ";
     
    		if($result=mysql_query($sql))
    	{
    		echo "<script type=\"text/javascript\">
    		alert('note modifiee')</script>";
    		header('location:note.php');
    	}
    		else 
    	{
    		echo "<script type=\"text/javascript\">
    		alert('erreur verrifier vos parametre')</script>";
    	}	}
     
     
    //requête de recuperation
    if(isset($_POST['id']))
    $req = mysql_query( "SELECT * FROM note WHERE idelevenote ='".$_POST['id']."' ");
    $sql2 = mysql_query( "SELECT * FROM note WHERE idelevenote ='".$_POST['id']."' ");
     
    if(mysql_num_rows($sql2)==0)
        		{  echo "PAS DE NOTES DISPONIBLE";
    				header('location:noteInscription.php');
     
    			}		 
    	else
    	{
    	//while($note=mysql_fetch_array($sql2)){
     
     
     
    ?>
     
    <html>
        <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<title>UPDATE-NOTE</title>
    	</head>
     
    <body>
     
    <form  method="POST" name="noteup" action="developez.php">
    					<br /><br /><br />
    		<table align="center" width=500px>
     
    	<tr>
    		<td width=110px height=25px>id_eleve<br /><br /></td>
    		<td><input type="hidden" name="id_eleve" value="<?php echo $req['idelevenote']; ?>" />
    			<?php echo $req['idelevenote']; ?><br /><br />
    		</td>
    	</tr>
    <?php 
     
    	$i=0;
    $update='';
    while($note=mysql_fetch_array($sql2)){
    $update.='<tr>
           <td class="th">idnote</td>
           <td><input type="hidden" name="id_note_'.$i.'" value="'.$note['idnote'].'" />'.$note['idnote'].'</td>
    	</tr>';
    	$update.='<tr>
           <td class="th">matiere </td>
           <td><input type="hidden" name="matieren_'.$i.'" value="'.$note['matierenote'].'" />'.$note['matierenote'].'</td>
    	</tr>';
    $update.='<tr>
           <td class="th">Note 1 </td>
           <td><input name="note1_'.$i.'" value="'.$note['note1'].'" />'.$note['note1'].'</td>
    	</tr>';
     
     $update.='<tr>
           <td class="th">Note 2 </td>
           <td><input name="note2_'.$i.'" value="'.$note['note2'].'" />'.$note['note2'].'</td>
    	</tr>'; 
    $update.='<tr>
           <td class="th">Note 3 </td>
           <td><input name="note3_'.$i.'" value="'.$note['note3'].'" />'.$note['note3'].'</td>
    	</tr>';	
    $update.='<tr>
           <td class="th">compo 1 </td>
           <td><input name="compo1_'.$i.'" value="'.$note['compo1'].'" />'.$note['compo1'].'</td>
    	</tr>';
    $update.='<tr>
           <td class="th">trim1 </td>
           <td><input name="trim1_'.$i.'" value="'.$note['trim1'].'" />'.$note['trim1'].'</td>
    	</tr>'; 
    $update.='<tr>      
           <td><input type="submit" name="ok" value="Envoyer" /></td>
    	</tr>';
    	$i++;
    }
    echo $update;
     
    	//}
    	} ?>
    	<tr>
    		<td colspan="2" align="center"><br />
    		<input type="submit" name="ok" value="envoie">
    		</td>
    	</tr>
    			</table>
    </form>
     
    </body>
    </html>
    voici ce que j'obtient avec ctr u
    Code html : 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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <html>
        <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<title>UPDATE-NOTE</title>
    	</head>
     
    <body>
     
    <form  method="POST" name="noteup" action="developez.php">
    					<br /><br /><br />
    		<table align="center" width=500px>
     
    	<tr>
    		<td width=110px height=25px>id_eleve<br /><br /></td>
    		<td><input type="hidden" name="id_eleve" value="" />
    			<br /><br />
    		</td>
    	</tr>
    <tr>
           <td class="th">idnote</td>
           <td><input type="hidden" name="id_note_0" value="1" />1</td>
    	</tr><tr>
           <td class="th">matiere </td>
           <td><input type="hidden" name="matieren_0" value="Histoire-Geographie" />Histoire-Geographie</td>
    	</tr><tr>
           <td class="th">Note 1 </td>
           <td><input name="note1_0" value="11" />11</td>
    	</tr><tr>
           <td class="th">Note 2 </td>
           <td><input name="note2_0" value="11" />11</td>
    	</tr><tr>
           <td class="th">Note 3 </td>
           <td><input name="note3_0" value="12" />12</td>
    	</tr><tr>
           <td class="th">compo 1 </td>
           <td><input name="compo1_0" value="12" />12</td>
    	</tr><tr>
           <td class="th">trim1 </td>
           <td><input name="trim1_0" value="11.5" />11.5</td>
    	</tr><tr>
     
           <td><input type="submit" name="ok" value="Envoyer" /></td>
    	</tr><tr>
           <td class="th">idnote</td>
           <td><input type="hidden" name="id_note_1" value="3" />3</td>
    	</tr><tr>
           <td class="th">matiere </td>
           <td><input type="hidden" name="matieren_1" value="Mathematiques" />Mathematiques</td>
    	</tr><tr>
           <td class="th">Note 1 </td>
           <td><input name="note1_1" value="11" />11</td>
    	</tr><tr>
           <td class="th">Note 2 </td>
           <td><input name="note2_1" value="11" />11</td>
    	</tr><tr>
           <td class="th">Note 3 </td>
           <td><input name="note3_1" value="0" />0</td>
    	</tr><tr>
           <td class="th">compo 1 </td>
           <td><input name="compo1_1" value="11" />11</td>
    	</tr><tr>
           <td class="th">trim1 </td>
           <td><input name="trim1_1" value="8.25" />8.25</td>
    	</tr><tr>
     
           <td><input type="submit" name="ok" value="Envoyer" /></td>
    	</tr><tr>
           <td class="th">idnote</td>
           <td><input type="hidden" name="id_note_2" value="4" />4</td>
    	</tr><tr>
           <td class="th">matiere </td>
           <td><input type="hidden" name="matieren_2" value="SVT" />SVT</td>
    	</tr><tr>
           <td class="th">Note 1 </td>
           <td><input name="note1_2" value="11" />11</td>
    	</tr><tr>
           <td class="th">Note 2 </td>
           <td><input name="note2_2" value="12" />12</td>
    	</tr><tr>
           <td class="th">Note 3 </td>
           <td><input name="note3_2" value="13" />13</td>
    	</tr><tr>
           <td class="th">compo 1 </td>
           <td><input name="compo1_2" value="15" />15</td>
    	</tr><tr>
           <td class="th">trim1 </td>
           <td><input name="trim1_2" value="0" />0</td>
    	</tr><tr>
     
           <td><input type="submit" name="ok" value="Envoyer" /></td>
    	</tr>	<tr>
    		<td colspan="2" align="center"><br />
    		<input type="submit" name="ok" value="envoie">
    		</td>
    	</tr>
    			</table>
    </form>
     
    </body>
    </html>
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    J'ai repris un peu ton code PHP et j'y a mis quelques commentaires.

    Code PHP : 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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    <?php
     
    include('../includes/fonctions.inc.php');
     
    // Suggestion :
    //error_reporting(-1); // pour voir toutes les erreurs
     
    //Modification note
    if (isset($_POST['ok'])) {
      // var_dump($_POST); // voir toutes les données POST
      $sql = "UPDATE note SET
          idelevenote='{$_POST['id_eleve']}',
          matierenote='{$_POST['matieren']}',
          note1='{$_POST['note1']}',
          note2='{$_POST['note2']}',
          note3='{$_POST['note3']}',
          compo1='{$_POST['compo1']}',
          trim1=''
        WHERE idnote='{$_POST['id_note']}' "; // risque d'injection SQL
     
      if ($result = mysql_query($sql)) {
        // guillemets simples
        echo '<script type="text/javascript">
            alert("Note modifiée");
          </script>';
     
        // attention header mal placé, tu as un echo avant
        header('Location: note.php');
      } else {
        // encore guillemets simples
        echo '<script type="text/javascript">
            alert("Erreur, vérifiez vos paramètres");
          </script>';
      }
    }
     
    //requête de recuperation
    if (isset($_POST['id'])) // accolades ?
    $req = mysql_query("SELECT * FROM note WHERE idelevenote ='{$_POST['id']}' ");
    $sql2 = mysql_query("SELECT * FROM note WHERE idelevenote ='{$_POST['id']}' ");
     
    if (!mysql_num_rows($sql2)) {
      // guillemets simples
      echo 'Pas de notes disponibles';
     
      // encore un header mal placé
      header('Location: noteInscription.php');
     
    } else {
      //while ($note = mysql_fetch_array($sql2)) {
     
    ?><!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8" />
      <title>UPDATE-NOTE</title>
      <style>
     
      /* Un peu de CSS pour nettoyer le code HTML des attributs align,
         width, height, etc. */
      table {
        width: 500px;
        margin: auto;
        border-collapse: collapse;
      }
      th {
        width: 38.2%;
        text-align: right;
      }
      th, td {
        padding: 0.25ex 1ex;
      }
      tbody {
        border-top: solid 2px #666;
      }
      td[colspan=2] {
        text-align: right;
        padding: 1ex;
      }
     
      </style>
    </head>
     
    <body>
     
    <form method="POST" name="noteup" action="developez.php">
      <table>
        <thead>
          <tr>
            <th scope="col">id_eleve</th>
            <td>
              <input type="hidden" name="id_eleve" value="<?php echo $req['idelevenote']; ?>" />
              <?php echo $req['idelevenote']; ?>
            </td>
          </tr>
        </thead>
        <?php
     
        $i = 0;
        while ($note = mysql_fetch_array($sql2)) {
          // ici guillemets doubles car il y a des variables
          echo "<tbody>
              <tr>
                <th scope='row'>idnote</th>
                <td><input type='hidden' name='id_note_$i' value='{$note['idnote']}' />{$note['idnote']}</td>
              </tr>
              <tr>
                <th scope='row'>Matière</th>
                <td><input type='hidden' name='matieren_$i' value='{$note['matierenote']}' />{$note['matierenote']}</td>
              </tr>
              <tr>
                <th scope='row'>Note 1</th>
                <td><input name='note1_$i' value='{$note['note1']}' />{$note['note1']}</td>
              </tr>
              <tr>
                <th scope='row'>Note 2</th>
                <td><input name='note2_$i' value='{$note['note2']}' />{$note['note2']}</td>
              </tr>
              <tr>
                <th scope='row'>Note 3</th>
                <td><input name='note3_$i' value='{$note['note3']}' />{$note['note3']}</td>
              </tr>
              <tr>
                <th scope='row'>Compo 1</th>
                <td><input name='compo1_$i' value='{$note['compo1']}' />{$note['compo1']}</td>
              </tr>
              <tr>
                <th scope='row'>trim1</th>
                <td><input name='trim1_$i' value='{$note['trim1']}' />{$note['trim1']}</td>
              </tr>
              <tr>
                <td colspan='2'><input type='submit' name='ok' value='Envoyer' /></td>
              </tr>
            </tbody>";
          $i++;
        }
     
      //}
    } ?>
        <tbody>
          <tr>
            <td colspan="2">
              <input type="submit" name="ok" value="Tout envoyer">
            </td>
          </tr>
        </tbody>
      </table>
    </form>
     
    </body>
    </html>

    Tu as notamment un problème avec la fonction header. Comme son nom le laisse deviner, elle envoie un en-tête HTTP. Le protocole HTTP est fait de telle sorte que, une fois qu'une partie du corps est envoyé, on ne peut pas rajouter d'en-têtes.
    Si la directive output_buffering de ton PHP est activée, le corps ne sera pas envoyé, donc ça ne sert à rien d'envoyer un message car l'utilisateur ne le verra pas.
    Si output_bufering n'est pas activée, le header ne marchera pas.
    En plus, il faut interrompre l'exécution du code avec exit après avoir fait un en-tête location.

    Plus d'informations : header

    La requête UPDATE ne marche pas car elle utilise une donnée $_POST['matieren'] qui n'existe pas. En fait, aucune des valeurs que tu utilises dans la requête n'existe. Il manque les $i à chaque fois ; je pense que c'est ce que tu voulais faire avec ton while qui ne marchait pas.

    Tu peux résoudre facilement ce problème en groupant les données d'une seule matière dans un formulaire distinct. Donc tu fais un formulaire par matière, et les données des autres formulaires ne seront pas envoyées, comme dans ce petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <form>
      <input name="joyeux" readonly type=text value="Haha">
      <input type="submit">
    </form>
     
    <form>
      <input name="triste" readonly type=text value="Bouhouhou">
      <input type="submit">
    </form>
     
    <?php if (!empty($_GET)) {
      var_dump($_GET);
    } ?>
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

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

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    les header c'est juste pour avoir une redirection apres le bouton d'alerte
    je suis entrain de revoir le code jusqu'a present je n'obtients pas de modification

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

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

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    salut, finalement j'ai utiliser window.location.replace pour regle le probleme de redirection apres l'alerte mais jusqu'a present je n,arrive pas faire les modifications sur les notes, alors que eliminer tous les header

Discussions similaires

  1. [MySQL] insersion de plusieurs lignes avec un seul bouton d'envoi
    Par topvision dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/09/2014, 18h53
  2. Valider 2 conditions dans un formulaire avec un seul bouton soumit
    Par [root@127.0.0.1]~# dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/05/2008, 18h45
  3. action avec un seul bouton sur plusieurs MC différents
    Par cece2000 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 22/04/2008, 11h33
  4. UPDATE multiple avec jointure
    Par PyRoFlo dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/05/2006, 15h56

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