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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 : 59
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    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 averti
    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
    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 confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    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 averti
    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
    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 confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    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 !

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