UPDATE TABLE MYSQL !

WRInaute discret
Bonjour à tous,

J'ai déjà cherché sur le site d'autre sujets identique mais aucun ne réponds bien à mon prblème.

J'ai une page d'affichage d'enregistrement et une page de mise à jour. La page d'affichage fonctionne bien.

La page de mise à jour par contre pose problème car elle ne prends pas en compte mes modifications que j'effectue dans le formulaire.

Voici mes deux pages.

page affichage :

Code:
<?php

include_once 'fonctions.php';
	
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
		  <link rel="stylesheet" type="text/css" href="styles_club.css" />
          <title>Accueil</title>
          </head>
          <body>
		  <?php
		  
		connexion_DB('bd_club');
		$res = mysql_query('SELECT * FROM jour');
		print '<form method="POST" action="check.php">';

$cpt=0;
while($row = mysql_fetch_array($res))
{
$cpt++;
$id_jour=$row['id_jour'];
$num=$row['num'];
$nom=$row['nom'];

print "<input type='hidden' name='IDJour' size='1' value='$id_jour'></input>";
print "<input type='text' name='numJour'".$cpt." size='1' value='$num'></input>";


echo "<br />";
 }
echo "<br />";
print '<div align="center"><input type="submit" name="envoie" VALUE="Confirmer la validation du traitement"></div>';
print '</form>';

mysql_close();
?>
		  </body>
		  
		  
		  </html>

page de mise à jour :

Code:
<?php

   
include_once 'fonctions.php';




if(isset($_POST['numJour']))      

$numJour=$_POST['numJour'];
else      $num="";
echo $num[15];

connexion_DB('bd_club');


for($i=1; $i<31;$i++){

$ZeVar='numJour'.$i;
$sql = "UPDATE jour SET num = '".$ZeVar."' WHERE id_jour = '$i'";
echo "<br/>".$sql;

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
}

header("Location:http://127.0.0.1/absence/index.php?page=02");
	



	
		
?>

Edit HawkEye: mise en forme BBcode [ code] + [/code]


D'avance merci. J'attends vos suggestions.

John
 
WRInaute accro
Je crois que tu devrais commencer par bien formater ton code source, du style :
Code:
if(condition){
action;
}else{
autreaction;
}
on comprendra mieux..
As tu vu que tu recupere une valeur dans une variable $numjour et que si elle n'est pas remplie tu met $num vide.. quel rapport?
Un peu de précision serait les bienvenue...
 
WRInaute accro
Pour commencer,

Code:
$sql = "UPDATE `jour` SET `num` = '$ZeVar' WHERE `id_jour` = '$i'";

--> fais un
Code:
<?php echo $sql; ?>
pour vérifier la query.
 
WRInaute discret
Voici quelque commentaires afin que de voir plus clair:


page affichage enregistrements :

Code:
//connexion BDD
 		  
connexion_DB('bd_club');

// REQUETE SQL 
$res = mysql_query('SELECT * FROM jour');
print '<form method="POST" action="check.php">';

//boucle 

$cpt=0;
while($row = mysql_fetch_array($res))
{
$cpt++;
$id_jour=$row['id_jour'];
$num=$row['num'];
$nom=$row['nom'];

//affichage enregistrements

print "<input type='hidden' name='IDJour' size='1' value='$id_jour'></input>";
print "<input type='text' name= numJour".$cpt." size='1' value='$num'></input>";


echo "<br />";
 }
echo "<br />";
print '<div align="center"><input type="submit" name="envoie" VALUE="Confirmer la validation du traitement"></div>';
print '</form>';

mysql_close();


page de mise à jour:
Code:
include_once 'fonctions.php';




if(isset($_POST['numJour']))      

$numJour=$_POST['numJour'];

//fonction connexion BDD
connexion_DB('bd_club');

//boucle 

for($i=1; $i<10;$i++){

$ZeVar='numJour'.$i;

//instruction SQL UPDATE des champs

$sql = "UPDATE jour SET num = '".$ZeVar."' WHERE id_jour = '$i'";
echo $sql;

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
}

//redirection

header("Location:http://127.0.0.1/absence/index.php?page=02");
[/code]
 
WRInaute discret
Voici ce qu'il m'affiche pour ma requête SQL


Code:
UPDATE jour SET num = 'numJour1' WHERE id_jour = '1'UPDATE jour SET num = 'numJour2' WHERE id_jour = '2'UPDATE jour SET num = 'numJour3' WHERE id_jour = '3'UPDATE jour SET num = 'numJour4' WHERE id_jour = '4'UPDATE jour SET num = 'numJour5' WHERE id_jour = '5'UPDATE jour SET num = 'numJour6' WHERE id_jour = '6'UPDATE jour SET num = 'numJour7' WHERE id_jour = '7'UPDATE jour SET num = 'numJour8' WHERE id_jour = '8'UPDATE jour SET num = 'numJour9' WHERE id_jour = '9'
 
WRInaute impliqué
Les requetes sont bonnes, qu'est ce qui ne va pas ?
Si tu regardes dans ta table jour avec phpMyAdmin qu'as tu ?
 
WRInaute discret
Salut,

merci pour ta réponse.

Sur la page de mon formulaire, quand je modifie un champ et que je clique sur le bouton de validation, il me remplace tous les champs par 0.

Je cherche depuis super longtemps et personne ne parvient à m'aider. Je ne suis peut être pas clair.
 
WRInaute passionné
C'est ici ton problème :

$ZeVar='numJour'.$i;

Avec ça, tu ne récupères nullement la valeur du POST.
Enfin, ce n'est pas exactement là ton problème.

La valeur récupérée doit se trouver avec $$ZeVar (si j'ai bien compris ce que tu souhaites même si ton code n'a pas l'air de faire cela lol).

Edit : il te met 0 car c'est un champ de type int (ou numérique)
 
WRInaute passionné
Un vieux bout de code que j'utilisais :
Code:
	//Pour tous les champs
	for($i=0; $i <= $nbchamps; $i++){
		$num = "numJour".($i+1);
		$valeurdupost = $_POST[$num];
		$listedesposts[$i] = $valeurdupost;
	}
Tu récupères ainsi tes valeurs dans un tableau et hop tu en fais ce que tu veux.
 
WRInaute impliqué
Robinson a raison tu modifies juste
Code:
$sql = "UPDATE jour SET num = '".$ZeVar."' WHERE id_jour = '$i'";
par
Code:
$sql = "UPDATE jour SET num = '".$$ZeVar."' WHERE id_jour = '$i'";

Le double $$ est très très important dans ton cas car il s'agit bien de récupérer la valeur pointée par $ZeVar

A+
 
WRInaute discret
Voilà j'ai essayé en changeant par $$ZeVar mais ça ne règle pas le problème. Voici ce qu'il me marque comme erreur :

Code:
Notice: Undefined variable: numJour1 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '1'
Notice: Undefined variable: numJour2 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '2'
Notice: Undefined variable: numJour3 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '3'
Notice: Undefined variable: numJour4 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '4'
Notice: Undefined variable: numJour5 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '5'
Notice: Undefined variable: numJour6 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '6'
Notice: Undefined variable: numJour7 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '7'
Notice: Undefined variable: numJour8 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '8'
Notice: Undefined variable: numJour9 in D:\SEERYX\absence\check.php on line 28

UPDATE jour SET num = '' WHERE id_jour = '9'
 
WRInaute impliqué
Alors la piste de Robinson
$sql = "UPDATE jour SET num = '".$_POST[$ZeVar]."' WHERE id_jour = '$i'";
 
WRInaute discret
Il me met Undefined index à la place de undefined variable:

Code:
la variable numJour existe
Notice: Undefined index: numJour1 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '1'
Notice: Undefined index: numJour2 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '2'
Notice: Undefined index: numJour3 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '3'
Notice: Undefined index: numJour4 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '4'
Notice: Undefined index: numJour5 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '5'
Notice: Undefined index: numJour6 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '6'
Notice: Undefined index: numJour7 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '7'
Notice: Undefined index: numJour8 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '8'
Notice: Undefined index: numJour9 in D:\SEERYX\absence\check.php on line 27

UPDATE jour SET num = '' WHERE id_jour = '9'
 
WRInaute discret
ok ça marche. Merci beaucoup à vous deux.

Maintenant j'ai une autre question. Au point de vue sécurité, avez-vous des conseils (real escape strring, html specialchars .....) ?

john
 
WRInaute impliqué
Bon je viens de faire un petit test mais sans la base :
un fichier test.php avec dedans :
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans nom</title>
</head>
<?php
print '<form method="POST" action="check.php">';
print "<input type='hidden' name='IDJour' size='1' value='1'></input>";
print "<input type='text' name='numJour1' size='1' value='laval1'></input>";
print "<input type='text' name='numJour2' size='1' value='laval2'></input>";
print "<input type='text' name='numJour3' size='1' value='laval3'></input>";
echo "<br />";
print '<div align="center"><input type="submit" name="envoie" VALUE="Confirmer la validation du traitement"></div>';
print '</form>';


?>
<body>
</body>
</html>

Un fichier check.php avec dedans :
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans nom</title>
</head>
<?php
for($i=1; $i<3;$i++){
	$ZeVar='numJour'.$i;
	$sql = "UPDATE jour SET num = '".$$ZeVar."' WHERE id_jour = '$i'";
	echo "<br/>".$sql;
	$sql = "UPDATE jour SET num = '".$_POST[$ZeVar]."' WHERE id_jour = '$i'";
	echo "<br/>".$sql;
} 


?>
<body>
</body>
</html>

Et le résultat me donne :

UPDATE jour SET num = 'laval1' WHERE id_jour = '1'
UPDATE jour SET num = 'laval1' WHERE id_jour = '1'
UPDATE jour SET num = 'laval2' WHERE id_jour = '2'
UPDATE jour SET num = 'laval2' WHERE id_jour = '2'


Que ce soit avec $$ZeVar ou $_POST[$ZeVar] je n'ai pas d'erreur d'exe et bien mes valeurs.

Essai de repartir sur ces bases et d'ajouter mysql ensuite.

A+
 
WRInaute impliqué
Je viens de penser as tu vérifier le source de ta page juste avant d'envoyer ton formulaire voir si tu a bien les lignes correctement :
<input type='text' name= numJour".$cpt." size='1' value='$num'>

transformées en
<input type='text' name= numJour1 size='1' value='ssss' />

au passage je viens aussi de voir que tu avais des </input> qui ne servent à rien.
 
Discussions similaires
Haut