Update que le dernier champ de la table

Résolu/Fermé
Pit - 31 mai 2013 à 15:01
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 5 juin 2013 à 15:27
Bonjour,

J'ai une probleme avec ma fonction update qui update uniquement la derniere ligne de ma table ...

<form method="post" action="ajouthoraire.php" enctype="multipart/form-data">
	<input type="hidden" value="<?php echo $idhoraire ;?>" name="idhoraire"/>
	<center><h4>Horaire Magasin :</h4></center>
				<?php
					include('connect.php');
					try{
					$cnx = new PDO(DSN, LOGIN, PASSWORD, $options);
					$sql = "SELECT * FROM horaire";
					$res = $cnx->query($sql);
					echo "<table><tr>\n<th><center>Jour</center></th>\n<th><center>Matin</center></th>\n<th><center>Aprem-midi</center></th></tr>";	
					while ($ligne = $res->fetch()){
					
					echo "<input type='hidden' value='".$ligne['idhoraire']."' name='idhoraire'/>
					<tr>\n<td><center>".$ligne['jour']."</center></td>\n
					<td><center>
					<input type='text' value='".$ligne['heuredebutmat']."' name='heuredebutmat'/>
					<input type='text' value='".$ligne['heurefinmat']."' name='heurefinmat'/></center>\n</td>\n
					<td><center>
					<input type='text' value='".$ligne['heuredebutap']."' name='heuredebutap'/> 
					<input type='text' value='".$ligne['heurefinap']."' name='heurefinap'/></center></td></tr>";}		
										echo "</table>";}
										catch(PDOException $e){
						die("Echec : ".$e->getMessage()); 
					}
				?>

<?php
		include('connect.php');
		$heuredebutmat=$_POST['heuredebutmat'];	
		$heurefinmat=$_POST['heurefinmat'];	
		$heuredebutap=$_POST['heuredebutap'];	
		$heurefinap=$_POST['heurefinap'];
		$idhoraire=$_POST['idhoraire'];		
		
		if(($heuredebutmat != "" && $heurefinmat != "" && $heuredebutap != "" && $heurefinap != "")){
		try{	
		$cnx = new PDO(DSN, LOGIN, PASSWORD, $options);
		$sql = "UPDATE horaire SET heuredebutmat='$heuredebutmat', heurefinmat='$heurefinmat', 
		heuredebutap='$heuredebutap', heurefinap='$heurefinap' WHERE idhoraire='$idhoraire'";
		echo"$idhoraire";
		$cnx->exec($sql);
		$cnx=null;
		echo 'Enregistrement du(des) nouvel(aux) horaire(s)  effectués !<br />';}
		catch(PDOException $e){
		die("Echec : ".$e->getMessage()); }}			
		else{
			echo 'Erreur : Vous devez remplir tout les champs.';}
	?>

Merci d'avance ^^
A voir également:

2 réponses

JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
31 mai 2013 à 22:38
Salut,

La question n'est pas "pourquoi il UPDATE le dernier tuple ?", mais plutôt "pourquoi il update qu'un seul tuple ?".

En tout cas, si "idhoraire" est une clé primaire, alors c'est normale qu'il y ait qu'un seul tuple visé.
C'est comme si que tu demandait au SGBD "modifie le(les) tuple(s) dont l'idhoraire est égale a 5 (par exemple)", puisque l'idhoraire est une clé primaire, donc chacune de ses valeurs n'existent qu'une seule fois, donc le "5" existe qu'une seule fois dans la table, alors forcement il n'y aura qu'un seul tuple édité par ta requête.

Maintenant si tu voulait faire autre chose, alors soit ta conception contient des erreurs, soit tu t'es trompé de champs a mettre dans le WHERE de ta requête.
0
J'voulais qu'il update ma table ligne par ligne
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 4/06/2013 à 00:27
Oui, mais ça dépend de ce que tu va mettre dans le WHERE.

... WHERE champs_de_type_cle_primaire = valeur
Dans ce cas, seulement une seule ligne au plus va être modifiée.


... WHERE champs_de_type_unique = valeur
Dans ce cas, c'est la même chose.


... WHERE champs_normal = valeur
Dans ce cas, zéro ou plusieurs lignes peuvent être modifiées.
0
Donc enfaite je dois faire plusieurs update ? Un pour chaque changement, par exemple SELECT champ1 FROM table1 WHERE champ1 = $nouvelle valeur ,
0
Il me change tout les champs d'une colonne de ma table MAIS il m'est toujours la meme valeur.
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 5/06/2013 à 15:27
Si chaque ligne est mis a jour d'une valeur différente, alors oui, plusieurs update doivent être utilisés, sinon, si c'est la même valeur, alors il suffit de faire :
... WHERE ... AND ... AND ...

Tu dis qu'il mets toujours la même valeur, peut être que c'est parce que tu ne change pas le contenu des tes variables.
0