Page 1 sur 4

Affichage d'un formulaire de modification

Posté : 18 août 2005, 14:11
par Elisa
Bonjour à tous,

Je voudrais afficher des données enregistrées en vue de les modifier. A l'origine, j'ai trois scripts:

- Mon premier script consiste en un menu déroulant où je choisis la société que je veux modifier.
- Mon second doit afficher les données enregistrées pour les modifier.
- Il renvoie vers un troisième qui effectue et confirme la modification.
Actuellement rien ne s'affiche et aucune erreur n'est détectée. Je pense que mon problème est lié à une mauvaise imbrication du HTML et du PHP. Voici mon second script:
<?php
//Récupération de l'identifiant de l'enregistrement//
$IdSociete = $_POST['IdSociete'];
?>

<!--Formulaire-->
<form action="b_societes_mod3.php" method="post">

<!--Champ caché à transmettre-->
<input type="hidden" name="IdSociete" value="<? echo $IdSociete; ?>">

<?php
//Connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans les tables "societes" et "groupes"//
	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
	FROM societes s
	INNER JOIN groupes g ON s.RefGroupe=g.IdGroupe
	ORDER BY NomSociete";

//Résultat de la requête
	$result=mysql_query($requete)or die(mysql_error());
	$val=mysql_fetch_array($result)or die(mysql_error());

//Fermeture de la base//
mysql_close($lien);
?>

<table>

<tr>
	<td><h4>Société : </h4></td>
	<td><?php echo '<input type="text" name="NomSociete" size=60 value="'.$val["NomSociete"].'">';?></td>
</tr>

<tr>
	<td><h4>Autre nom : </h4></td>
	<td><?php echo '<input type="text" name="AutreNomSociete" size=60 value="'.$val["AutreNomSociete"].'">';?></td>
</tr>

<tr>
	<td><h4>Nom du groupe : </h4></td>
	<td></td>
</tr>

<tr>
	<td><h4>Spécialité de la société :</h4></td>
	<td><select name="Specialite">
		<option value="Editeur">Editeur</option>
		<option value="Diffuseur-Distributeur">Diffuseur-Distributeur</option>
		<option value="Producteur">Producteur</option>
	</select></td>
</tr>

<tr>
	<td><h4>Présentation : </h4></td>
	<td><textarea name="Presentation" rows="8" cols="45"><? echo $Presentation;?></textarea></td>
</tr>

<? $InfCompl = mysql_result($result,0,'InfCompl');?>
<tr>
	<td><h4>Informations complémentaires : </h4></td>
	<td><textarea name="InfCompl" rows="8" cols="45"><? echo $InfCompl;?></textarea></td>
</tr>

<tr>
	<td><h4>Pays d'origine : </h4></td>
	<td><?php echo '<input type="text" name="PaysOrigine" value="'.$val["PaysOrigine"].'">';?></td>
</tr>

<tr>
	<td><h4>Coordonnées : </h4></td>
</tr>

<? $Adresse = mysql_result($result,0,'Adresse');?>
<tr>
	<td>Adresse :</td>
	<td><textarea name="Adresse" rows="8" cols="45"><? echo $Adresse;?></textarea></td>
</tr>

<tr>
	<td>Téléphone : </td>
	<td><?php echo '<input type="text" name="Tel" value="'.$val["Tel"].'">';?></td>
</tr>

<tr>
	<td>Fax :</td>
	<td><?php echo '<input type="text" name="Fax" value="'.$val["Fax"].'">';?></td>
</tr>

<tr>
	<td><h4>Site de la société : </h4></td>
	<td><?php echo '<input type="text" name="SiteSociete" size=60 value="'.$val["SiteSociete"].'">';?></td>
</tr>

<tr>
	<td><h4>Représentant en France : </h4></td>
	<td><?php echo '<input type="text" name="NomReprFr" size=60 value="'.$val["NomReprFr"].'">';?></td>
</tr>

<tr>
	<td><h4>Coordonnées du représentant en France : </h4></td>
</tr>

<?php $AdresseReprFr = mysql_result($result,0,'AdresseReprFr');?>
<tr>
	<td>Adresse : </td>
	<td><textarea name="AdresseReprFr" rows="8" cols="45"><? echo $AdresseReprFr;?></textarea></td>
</tr>

<tr>
	<td>Téléphone :</td>
	<td><?php echo '<input type="text" name="TelReprFr" value="'.$val["TelReprFr"].'">';?></td>
</tr>

<tr>
	<td>Fax : </td>
	<td><?php echo '<input type="text" name="FaxReprFr" value="'.$val["FaxReprFr"].'">';?></td>
</tr>

</table>

<br><br><center><input type="submit" value="Modifier"></center>

</form>

Posté : 18 août 2005, 14:41
par ouckileou
pourquoi utilises tu mysql_fetch_array et en même temps mysql_result ?

tu es sûre que ta requête renvoie un résultat ?

Posté : 18 août 2005, 15:01
par Elisa
En fait j'ai repris un script qui fonctionnait mais dont l'optimisation laissait à désirer.

En fonction de ce que tu m'as appris (les jointures et ses subtilités :love5: ) , j'ai modifié la requête originelle.

Mais il ne s'agit plus uniquement de l'affichage de données, puisqu'il faut afficher sous forme de formulaire et permettre la saisie. Là je m'emmêle les pinceaux et je ne sais pas trop comment m'y prendre. Je sens bien qu'il y a des incohérences, mais je ne sais pas par quoi les remplacer.

Posté : 18 août 2005, 15:08
par ouckileou
alors commence déjà par afficher tes données brutes de pomme :
avec juste des <br />

tu rajouteras le formulaire ensuite, ce sera du bête HTML ;)

Posté : 18 août 2005, 15:17
par Elisa
Voilà j'ai repris juste ça. Mais apparamment même ce bout là ne fonctionne pas: j'ai une magnifique page blanche. Le souci peut-il venir de la requête alors qu'elle fonctionne bien pour un affichage classique?
<?php
//Récupération de l'identifiant de l'enregistrement//
$IdSociete = $_POST['IdSociete'];
?>

<!--Formulaire-->
<form action="b_societes_mod3.php" method="post">

<!--Champ caché à transmettre-->
<input type="hidden" name="IdSociete" value="<? echo $IdSociete; ?>">

<?php
//Connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans les tables "societes" et "groupes"//
	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite,
			s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			FROM societes s
			INNER JOIN groupes g ON s.RefGroupe=g.IdGroupe
			ORDER BY NomSociete";

//Résultat de la requête
	$result=mysql_query($requete)or die(mysql_error());
	$val=mysql_fetch_array($result)or die(mysql_error());

//Fermeture de la base//
mysql_close($lien);
?>

<?php echo '<input type="text" name="NomSociete" size=60 value="'.$val["NomSociete"].'">';?>

Posté : 18 août 2005, 15:20
par ouckileou
si tu n'as pas d'erreur c'est que ta requête fonctionne

si tu regardes dans le code source HTML généré qu'est-ce que ça donne ?

Posté : 18 août 2005, 15:22
par Elisa
Si j'enlève l'array et que je remplace value="'.$val["NomSociete"].'">';
par $NomSociete, ça m'oblige à récupérer la donnée en POST. Est-ce que je ne peux pas simplifier ça?

Posté : 18 août 2005, 15:24
par ouckileou
Si j'enlève l'array et que je remplace value="'.$val["NomSociete"].'">';
par $NomSociete, ça m'oblige à récupérer la donnée en POST. Est-ce que je ne peux pas simplifier ça?
heu... je ne vois pas bien le rapport
normalement si tu veux récupérer une valeur dans la Bdd et l'afficher dans un champ texte il n'y a pas de problème, la vérité est ailleurs

Posté : 18 août 2005, 15:33
par Elisa
Désolée: nos messages se sont croisés. Manifestement le problème c'est la ligne:
$val=mysql_fetch_array($result)
J'ai tenté de la supprimer puis de remplacer la ligne
<?php echo '<input type="text" name="NomSociete" size=60 value="'.$val["NomSociete"].'">';?>
par la ligne
<?php echo '<input type="text" name="NomSociete" size=60 value="'.$val["NomSociete"].'">';?>
Là j'ai le cadre du formulaire qui s'affiche. Mais il m'affiche un message d'erreur :
Notice: Undefined variable: NomSociete in c:\program files\easyphp1-8\www\sinbad\admin\societes\b_societes_mod2.php on line 33
Bref il ne reconnaît pas ma variable. Alors j'ai tenté en ajoutant:
$NomSociete = $_POST['NomSociete'];
mais le résultat est encore pire.

Posté : 18 août 2005, 15:37
par ouckileou
non mais le code que tu as posté devrait fonctionner

essaye ta requête dans phpMyAdmin et vérifie déjà les valeurs renvoyées

ensuite, enlève le HTML du champ texte et affiche la tout simplement dans la page

Posté : 18 août 2005, 16:19
par Elisa
J'ai remis un peu au propre (j'ai enlevé les éléments du tableau. J'ai quand même gardé les éléments du formulaire). J'ai unifié les valeurs du tableau (faudrait que je révise mes cours, je crois que je n'ai pas tout compris). Ca me donne les formulaires (ô miracle) mais ça m'affiche cette erreur:
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 3 in c:\program files\easyphp1-8\www\sinbad\admin\societes\b_societes_mod2.php on line 28


Et là ça m'inquiète car j'ai l'impression que ça concerne ma base (pourvu que ça ne soit pas ça [-o< )

Voici le code tel qu'il se présente maintenant:
<?php
//Récupération de l'identifiant de l'enregistrement//
$IdSociete = $_POST['IdSociete'];
?>

<!--Formulaire-->
<form action="b_societes_mod3.php" method="post">

<!--Champ caché à transmettre-->
<input type="hidden" name="IdSociete" value="<? echo $IdSociete; ?>">

<?php
//Connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans les tables "societes" et "groupes"//
	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite,
			s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			FROM societes s
			INNER JOIN groupes g ON s.RefGroupe=g.IdGroupe";

//Résultat de la requête
	$result=mysql_query($requete)or die(mysql_error());

$IdSociete = mysql_result($result,0,'IdSociete');
$NomSociete = mysql_result($result,0,'NomSociete');
$AutreNomSociete = mysql_result($result,0,'AutreNomSociete');
$NomGroupe = mysql_result($result,0,'NomGroupe');
$Specialite = mysql_result($result,0,'Specialite');
$Presentation = mysql_result($result,0,'Presentation');
$InfCompl = mysql_result($result,0,'InfCompl');
$PaysOrigine = mysql_result($result,0,'PaysOrigine ');
$Adresse = mysql_result($result,0,'Adresse');
$Tel = mysql_result($result,0,'Tel');
$Fax = mysql_result($result,0,'Fax');
$SiteSociete = mysql_result($result,0,'SiteSociete');
$NomReprFr = mysql_result($result,0,'NomReprFr');
$AdresseReprFr = mysql_result($result,0,'AdresseReprFr');
$TelReprFr = mysql_result($result,0,'TelReprFr');
$FaxReprFr = mysql_result($result,0,'FaxReprFr');

//Fermeture de la base//
mysql_close($lien);
?>

<?php echo '<input type="text" name="NomSociete" size=60 value="'.$NomSociete.'">';?><br>

<?php echo '<input type="text" name="AutreNomSociete" size=60 value="'.$AutreNomSociete.'">';?><br>

<select name="Specialite">
		<option value="Editeur">Editeur</option>
		<option value="Diffuseur-Distributeur">Diffuseur-Distributeur</option>
		<option value="Producteur">Producteur</option>
	</select><br>

<textarea name="Presentation" rows="8" cols="45"><? echo $Presentation;?></textarea><br>

<textarea name="InfCompl" rows="8" cols="45"><? echo $InfCompl;?></textarea><br>

<?php echo '<input type="text" name="PaysOrigine" value="'.$PaysOrigine.'">';?><br>

<textarea name="Adresse" rows="8" cols="45"><? echo $Adresse;?></textarea>
<br>
<?php echo '<input type="text" name="Tel" value="'.$Tel.'">';?><br>

<?php echo '<input type="text" name="Fax" value="'.$Fax.'">';?><br>

<?php echo '<input type="text" name="SiteSociete" size=60 value="'.$SiteSociete.'">';?><br>

<?php echo '<input type="text" name="NomReprFr" size=60 value="'.$NomReprFr.'">';?><br>

<textarea name="AdresseReprFr" rows="8" cols="45"><? echo $AdresseReprFr;?></textarea><br>

<?php echo '<input type="text" name="TelReprFr" value="'.$TelReprFr.'">';?><br>

<?php echo '<input type="text" name="FaxReprFr" value="'.$FaxReprFr.'">';?><br>

Posté : 18 août 2005, 16:22
par ouckileou
pas de panique c'est juste qu'il dit qu'il n'a pas de ligne 0 de résultats

donc encore une fois : es-tu sûre que ta requête te renvoie des résultats, l'as-tu testé dans phpMyAdmin ?

utilises mysql_num_rows par exemple pour ne faire tes traitements que si tu as récupéré des lignes de résultat

Posté : 18 août 2005, 16:41
par Elisa
Oui je teste systématiquement sous PHP myadmin.

Ceci dit avec la fonction mysql_num_rows il ne me trouvait aucun résultat. Donc le problème se situait dans ma requête.

Je crois que j'ai compris le souci. \:D/ C'est le même que tout à l'heure. La requête ne devait pas contenir INNER JOIN mais LEFT OUTER JOIN.

Maintenant que j'y ai passé une après-midi entière, ça me servira de leçon...

J 'ai deux menus déroulants dans mon script. Je voudrais qu'ils s'affichent sur le dernier choix qui a été fait. Comment dois-je faire? Jusqu'à présent il me met toujours sur le choix par défaut.

Posté : 18 août 2005, 16:57
par ouckileou
J 'ai deux menus déroulants dans mon script. Je voudrais qu'ils s'affichent sur le dernier choix qui a été fait. Comment dois-je faire? Jusqu'à présent il me met toujours sur le choix par défaut.
essaye une petite recherche sur le forum avec genre "liste", "positionner", "défaut" tu devrais vite trouver des choses ;)

Posté : 18 août 2005, 17:29
par Elisa
Bon apparamment je ne suis pas sortie d'affaire. Si je sélectionne le premier enregistrement, il m'affiche le premier enregistrement. Si je sélectionner le second ou le troisième, il m'affiche toujours le premier enregistrement. là, je n'ai plus d'idée... :cry: