Modifier les infos dans une table , phpmysql

Résolu/Fermé
cinderela Messages postés 52 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 20 février 2008 - 4 août 2007 à 11:49
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 - 8 août 2007 à 22:18
Bonjour, j'ai un petit problème. J'ai fait un formulaire d'extrait les infos de la base de données. Je voulais modifier les infors dans les lignes de la table qui correspond à la clé primaire sélectionnée. Je ne sais pas si je dois faire double requête: 1. supprimer les données existées 2. faire un update
ou bien faire qu'une seule instruction de UPDATE. J'ai essayé de faire tous les 2 cas mais ça marche pas. Je ne sais pas où j'ai fait l'erreur.

quelqu'un peut m'aider?
Merci d'avance

voici les code

mod_four.php

<?php
// vérifier les données dans la formulaire
foreach ($_POST as $data) {
if (empty($data)){
print('<center>Un (ou plusieurs) champs est vide! Veuillez tous les remplir.</center>');
exit();
} else {
echo "bien joué! ";
}
}

//vérifie le nom, adresse etc...
$nom = $_POST['nom'];
$adresse = $_POST['adresse'];
$tel = $_POST['tel'];
$fax = $_POST['fax'];
$remarque = $_POST['remarque'];
$four_id = $_POST['four_id'];

//connecter à la bd
$connexion = mysql_connect("localhost", "root", "")
or die ("connexion au serveur impossible.");
mysql_select_db('gestion_stock', $connexion);
//vérifier les données dans la base de données
$query1 = "SELECT * FROM tblfour WHERE four_ID = '".$four_id."'";
$result1 = mysql_query($query1);
$a = 0;
while ($liste = mysql_fetch_row($result1)){
if ($four_id == $liste[0]){
echo 'Les infos sont enregistrées. Vous serez redirigé dans 2 secondes. Si vous ne voulez pas attendre,
cliquez sur ce <a href="four.php">lien</a>.';
$query = "UPDATE tblfour SET nom='".$nom."', adresse='".$adresse."',
tel='".$tel."', fax='".$fax."', remarque='".$remarque."' WHERE four_ID = '".$four_id."'";
echo $query;
$result = mysql_query($query);
}
}

?>

four_mod.php

<form name="modification_four" method="post" action="mod_four.php">
<?php

$connexion = mysql_connect("localhost", "root", "")
or die ("connexion au serveur impossible.");
$db = mysql_select_db('gestion_stock', $connexion);
// selectionner toutes les fours présentés dans la tblfour
$query = "SELECT nom, adresse, tel, fax, remarque, four_ID FROM tblfour ORDER BY nom";
$result = mysql_query($query) or die ('Erreur. La requête ne peut pas être effectuée.
L\'erreur retournée est : '.mysql_error());
?>

<TABLE BORDER='1'>
<TR><TH>Nom</TH><TH>Adresse</TH><TH>Téléphone</TH><TH>Fax</TH><TH>Remarque</TH><TH>Sélection</TH><TH>Enregistrer modifs</TH></TR>
<?php
while ($ligne = mysql_fetch_row($result))
{
$nom = $ligne[0];
$adresse = $ligne[1];
$tel = $ligne[2];
$fax = $ligne[3];
$remarque = $ligne[4];
$four_id = $ligne[5];
?>
<TR><TD><input type="text" name="nom" size="15"value="<?php echo $nom; ?>"></TD>
<TD><input type="text" name="adresse" size="15" value="<?php echo $adresse; ?>"></TD>
<TD><input type="text" name="tel" size="15" value="<?php echo $tel; ?>"></TD>
<TD><input type="text" name="fax" size="15" value="<?php echo $fax; ?>"></TD>
<TD><input type="text" name="remarque" size="15" value="<?php echo $remarque; ?>"></TD>
<TD align="center"><input type="text" name="four_id" value="<?php echo $four_id; ?>"></TD>

<TD align="center"><input type="submit" name="Enregistrer" value="OK"></TD></TR>
<?php
} ?>
</TABLE>

</form>
A voir également:

3 réponses

Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
5 août 2007 à 03:04
Salut, je crains ne pas pouvoir répondre à la question mais tant que j'ai lu un peu le code j'aimerais simplement te signaler que lors de l'utilisation de guillemets en PHP, le fait d'insérer des noms de variables à l'intérieur indique à l'interpréteur de retrourner leurs valeurs, donc c'est inutile de concaténer comme tu le fais.

Au lieu de faire :
$query1 = "SELECT * FROM tblfour WHERE four_ID = '".$four_id."'";

Tu pourrais faire :
$query1 = "SELECT * FROM tblfour WHERE four_ID = '$four_id'";

Pareil pour ta query update, tu peux simplifier de cette façon :
$query = "UPDATE tblfour SET nom='$nom', adresse='$adresse', tel='$tel', fax='$fax', remarque='$remarque' WHERE four_ID = '$four_id'";

Sinon ça ne sert à rien d'utiliser des " et de simples ' suffiront, ce qui indiquera à l'interpréteur PHP de ne pas analyser la chaine à l'intérieur (à l'exception d'un éventuel caractère d'échappement si je ne dis pas de bêtises) afin d'accélerer les traitements.

Et tant qu'on y est je ne comprends pas pourquoi tu affiches le message comme quoi les infos sont enregistrées avant même d'exécuter la requête Update (ce serait plutôt l'inverse).

Ah tiens, finalement j'ai une petite idée sur la question : Assure toi-bien que tous tes champs en DB soient au format texte (char, varchar, text,...) parce que d'après ce que je lis de ton code c'est ce que je sous-entends.

Sinon y'a un truc qui m'inquiète aussi quand tu fais :
if ($four_id == $liste[0])

=> On est bien d'accord que le premier champ retourné dans ta requête "select *" plus haut est bien celui du "four_id"... Franchement, un conseil, je te déconseille d'utiliser les positions de champ (ici 0, donc le premier) si tu ne précises pas explicitement l'ordre dans ton select (ici tu as utilisé le *). Dans ce cas je préfère encore que tu cites $liste['four_ID'] en ayant bien pris soin de faire un fetch_array plutôt qu'un fetch_row.

Avec ça tu devrais peut-être avoir plus d'objectivité pour trouver ton erreur. Supprimer et mettre à jour sont deux choses différentes.
0
cinderela Messages postés 52 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 20 février 2008
6 août 2007 à 09:41
salut,

Je suis trop null, j'ai fait tout comme tu disais mais il affiche que :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\1erpage\mod_four.php on line 27

je ne sais pas que dois-je faire.

et voilà ce que j'ai corrigé


mod_four.php

<?php
// vérifier les données dans la formulaire
foreach ($_POST as $data) {
if (empty($data)){
print('<center>Un (ou plusieurs) champs est vide! Veuillez tous les remplir.</center>');
exit();
} else {
echo "bien joué! ";
}
}

//vérifie le nom, adresse etc...
$nom = $_POST['nom'];
$adresse = $_POST['adresse'];
$tel = $_POST['tel'];
$fax = $_POST['fax'];
$remarque = $_POST['remarque'];
$four_id = $_POST['four_id'];

//connecter à la bd
$connexion = mysql_connect("localhost", "root", "")
or die ("connexion au serveur impossible.");
mysql_select_db('gestion_stock', $connexion);
//vérifier les données dans la base de données
$query1 = "SELECT four_ID, nom, adresse, tel, fax, remarque FROM tblfour WHERE four_ID = '$four_id'";
$result1 = mysql_query($query1);
while ($liste['four_ID'] = mysql_fetch_array($result1)){
if ($four_id == $liste['four_ID']){

$query = "UPDATE tblfour SET nom='$nom', adresse='$adresse',
tel='$tel', fax='$fax', remarque='$remarque' WHERE four_ID = '$four_id'";
echo 'Les infos sont enregistrées. Vous serez redirigé dans 2 secondes. Si vous ne voulez pas attendre,
cliquez sur ce <a href="four.php">lien</a>.';
echo $query;
$result = mysql_query($query);
}
}

?>
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
6 août 2007 à 22:24
Salut, l'erreur

"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource"

Signifie que l'argument fourni à la fonction n'est pas une ressource valable. En gros, la requête SQL dans $query1 a échoué. Vérifie que tes champs existent bien en base de données et que le champ four_id est de type texte.
0
cinderela Messages postés 52 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 20 février 2008
7 août 2007 à 09:00
Salut Poso,

oui les champs sont bien existés et le champ four_id est de type int
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
7 août 2007 à 21:24
"le champ four_id est de type int"

Salut,

Si tu relis bien mon histoire, je te disais donc que j' m'attendais à ce que le champ four_ID soit de type caractère. Or tu viens de m'apprendre qu'il est de type entier.

Ce qui fait que dans le bout de requête :

WHERE four_ID = '$four_id'

Tu compares l'entier four_ID (les majuscules/minuscules peuvent avoir de l'importance) avec du texte, soit le résultat de ta variable $four_id en texte (puisque tu as placé des apostrophes). Pour comparer un entier avec un entier (chose plus probable) tu dois enlever les apostrophes, sinon c'est logique que la requête coince. ;-)
0
cinderela Messages postés 52 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 20 février 2008
8 août 2007 à 10:55
Bonjour Posotaz,

J'ai compris maintenant. Grâce à toi et à tout le monde dans le forum, j'ai pu trouver le chemin.

Voilà les codes réalisés :-), c' est un des solutions pour ceux qui voulaient faire un formulaire semblant à la mienne:

four_mod.php

<?php

	$connexion = mysql_connect("localhost", "root", "")
	or die ("connexion au serveur impossible.");
	$db = mysql_select_db('gestion_stock', $connexion);
	// selectionner toutes les fours présentés dans la tblfour
	$query = "SELECT nom, adresse, tel, fax, remarque, four_ID FROM tblfour ORDER BY nom";
	$result = mysql_query($query) or die ('Erreur. La requ&ecirc;te ne peut pas &ecirc;tre effectu&eacute;e. 
	L\'erreur retourn&eacute;e est : '.mysql_error());
?>

	<TABLE BORDER='1'>
	<TR><TH>Nom</TH><TH>Adresse</TH><TH>T&eacute;l&eacute;phone</TH><TH>Fax</TH><TH>Remarque</TH><TH>S&eacute;lection</TH><TH>Enregistrer modifs</TH></TR>
<?php
	while ($ligne = mysql_fetch_row($result))
		{
			$nom = $ligne[0];
			$adresse = $ligne[1];
			$tel = $ligne[2];
			$fax = $ligne[3];
			$remarque = $ligne[4];
			$four_id = $ligne[5];
?>
<form name="mod_four"     method="post" action="mod_four.php">
	<TR><TD><input type="text" name="nom" size="15"value="<?php echo $nom; ?>"></TD>
		<TD><input type="text" name="adresse" size="15" value="<?php echo $adresse; ?>"></TD>
		<TD><input type="text" name="tel" size="15" value="<?php echo $tel; ?>"></TD>
		<TD><input type="text" name="fax" size="15" value="<?php echo $fax; ?>"></TD>
		<TD><input type="text" name="remarque" size="15" value="<?php echo $remarque; ?>"></TD>
		<TD align="center"><input type="text" name="four_id" value="<?php echo $four_id; ?>"></TD>

		<TD align="center"><input type="submit" name="Enregistrer" value="OK"></TD></TR>
</form>
<?php
	 } ?>	
	</TABLE>




mod_four.php

<?php 
// vérifier les données dans la formulaire 
foreach ($_POST as $data) { 
if (empty($data)){ 
print('<center>Un (ou plusieurs) champs est vide! Veuillez tous les remplir ceux qui vous doivent.</center>'); 
exit(); 
} 
} 

//vérifie le nom, adresse etc... 
$nom = $_POST['nom']; 
$adresse = $_POST['adresse']; 
$tel = $_POST['tel']; 
$fax = $_POST['fax']; 
$remarque = $_POST['remarque']; 
$four_id = $_POST['four_id']; 

//connecter à la bd 
$connexion = mysql_connect("localhost", "root", "") 
or die ("connexion au serveur impossible."); 
mysql_select_db('gestion_stock', $connexion); 
//vérifier les données dans la base de données 

$query = "UPDATE tblfour SET nom='".$nom."', adresse='".$adresse."', 
		tel='".$tel."', fax='".$fax."', remarque='".$remarque."' WHERE four_ID='".$four_id."'"; 
$result = mysql_query($query);

if ($result) { echo 'Les donn&eacute;es de four <b><I>'.$nom.'</I></b> ont &eacute;t&eacute; bien modifi&eacute;es: <br><br>';
	$query1 = "SELECT nom, adresse, tel, fax, remarque, four_ID FROM tblfour ORDER BY nom";
	$result1 = mysql_query($query1) or die ('Erreur. La requ&ecirc;te ne peut pas &ecirc;tre effectu&eacute;e. 
	L\'erreur retourn&eacute;e est : '.mysql_error());
	echo "\n<TABLE BORDER='1'>\n 
		<TR><TH>Nom</TH><TH>Adresse</TH><TH>T&eacute;l&eacute;phone</TH><TH>Fax</TH><TH>Remaque</TH></TR>\n";
	while ($ligne = mysql_fetch_row($result1))
		{
			$nom = $ligne[0];
			$adresse = $ligne[1];
			$tel = $ligne[2];
			$fax = $ligne[3];
			$remarque = $ligne[4];
			echo '
				<TR><TD>'.$nom.'</TD>
				<TD>'.$adresse.'</TD>
				<TD>'.$tel.'</TD>
				<TD>'.$fax.'</TD>
				<TD>'.$remarque.'</TD></TR>';
		}
	echo "\n</TABLE>";
	echo "<br>
	Modifier un autre, <a href='four_mod.php'>clique ici</a><br>";
			}
print_r($_POST);

?> 



Voilà, c'est résolu!
Merci à tous,
Cinderela
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225 > cinderela Messages postés 52 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 20 février 2008
8 août 2007 à 22:18
Content que tu aies résolu le problème, ce n'était pas évident mais tu t'es bien accroché, bravo et merci d'être revenu donner des nouvelles. ;-)
0