Affichage d'un formulaire de modification

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 août 2005, 17:39

comment indiques-tu que tu veux le 1er, le deuxième ?

Eléphant du PHP | 179 Messages

18 août 2005, 17:42

J'ai un premier script avec menu déroulant où je sélectionne la société que je veux modifier.
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 août 2005, 17:51

reposte le code que tu as maintenant parceque j'ai du mal à suivre 8-[

Eléphant du PHP | 179 Messages

18 août 2005, 17:59

Voici le formulaire qui sert à sélectionner la société à modifier:
<h3>Choisir la société à modifier :</h3>

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

<!--Sélection de l'identifiant-->
	<select name="IdSociete">
		<option value="">
<?php 

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

//Sélection de l'enregistrement//
	$requete = "SELECT * FROM societes ORDER BY NomSociete";
	$result = mysql_query($requete);

//Tant qu'il y a des enregistrements, parcourir la sélection//
while($val = mysql_fetch_array($result))
	{
	print ('<option value='.$val["IdSociete"].'>');
	print ($val["NomSociete"]." ");	
	}
mysql_close($lien);	
?>
	</select>

<input type="submit" value="Afficher">

</form>
Voici le formulaire qui affiche les données concernant la société pour les modifier:
<?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
			LEFT OUTER 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');

$nbResultats = mysql_num_rows($result);
	echo '<b>Il y a '.$nbResultats.' résultat(s) dans la base</b><br><br>';

//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>

<input type="submit" value="Modifier">
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 08:56

tu sélectionnes une société, tu récupères son identifiant grâce à ça :
$IdSociete = $_POST['IdSociete']; 
mais ta requête SQL ne l'utilise pas, est-ce normal ?

Eléphant du PHP | 179 Messages

19 août 2005, 09:09

Oui j'ai bien tenté mais ça ne fonctionne pas avec.

Ma requete:
$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite,
			s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			FROM societes s
			LEFT OUTER JOIN groupes g ON s.RefGroupe=g.IdGroupe
			WHERE IdSociete='".IdSociete."'";
Le résultat:
Notice: Use of undefined constant IdSociete - assumed 'IdSociete' in c:\program files\easyphp1-8\www\sinbad\admin\societes\b_societes_mod2.php on line 23

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 ,etc.
Et apparamment, il ne reconnaît tellement rien que j'ai:
Il y a 0 résultat(s) dans la base
Ce doit être toujour un problème de requête. Peut-être est-ce la requête de mon premier script qui n'est plus en adéquation avec celle du second? Ou bien ça n'a rien à voir puisque les deux scripts ont des objectifs différents?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 09:11

rien de tout ça, il manque juste un $ devant IdSociete :)

Eléphant du PHP | 179 Messages

19 août 2005, 09:15

:-" On n'a rien vu.

Il y a un mieux:
Il y a 1 résultat(s) dans la base
Normalement j'en ai trois.
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 09:17

et bien n'est-ce pas le résultat attendu ? si tu sélectionnes 1 société, tu récupères 1 identifiant, donc 1 seul résultat dans la base non ?

édition : j'avais pas vu la fin de ton message
lorsque tu exécutes ta requête dans phpMyAdmin tu as 3 résultats ?
si je comprend bien tu as 3 groupes pour cette société ?

Eléphant du PHP | 179 Messages

19 août 2005, 09:35

Non non! C'est toi qui a raison! Ca fonctionne! C'est logique mais j'étais tellement obnubilée par mes trois enregistrements que je n'ai pas pensé que je n'en sélectionne qu'un seul :roll:

:agenouille: :agenouille: Merci !

Comme je te le disais hier, je voudrais savoir comment on récupère les items choisis dans une liste déroulant tout en mettant à disposition les autres items pour modifier le choix. Je cherche un exemple concret mais je n'en ai pas trouvé. J'ai essayé avec elseif mais ça ne fonctionne pas.

Mon objectif est de récupérer le groupe que j'avais sélectionné. Par exemple, la société "Dialog" se voit attribuer le groupe "Thomson". Et puis finalement, elle est rachetée par le groupe "Barbapapa". Je voudrais que ça s'affiche sur l'item choisi précédemment (Thomson) mais que je puisse avoir accès aux autres groupes pour la modification.

Tout ce que je sais, c'est qu'il y a une histoire de "selected" dans l'histoire...

#-o
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 09:45

oui, "selected" sert à positionner la liste déroulante sur une valeur précise

en l'occurence il suffit de positionner la liste des groupes sur celui qui correspond à celui de la société

un exemple bateau pour le principe :
<select name="age">
<?php
$valeurChoisie = 24;
for ($i=7; $i<=77; $i++) {
	if ($i == $valeurChoisie) {
		echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
	} else {
		echo '<option value="'.$i.'">'.$i.'</option>';
	}
}
?>
</select>
dans ce là, la liste contiendra des valeurs de 7 à 77, mais sera positionnée sur la valeur 24 ;)

essaye de partir de là pour l'appliquer à ton projet

Eléphant du PHP | 179 Messages

19 août 2005, 10:00

Mais dans ce cas précis, la liste déroulante doit être générée par la base (puisque la liste est générée par les enregistrements de la table groupes). Précédemment j'avais fait comme ça: en ouvrant à nouveau la base puis en la refermant. En fait je voudrais éviter de l'ouvrir et la fermer de multiples fois et mettre à profit la jointure.
Nom du groupe : 
	<select name="IdGroupe">
		<?php
		print('<option value="">');
		while ($val=mysql_fetch_array($result))
			{
			print ('<option value='.$val2["IdGroupe"]);
	       	if ($val2["IdGroupe"] == $val["RefGroupe"])
	       		{
				print ('selected');
				}
			print ('>'.$val2["NomGroupe"]."\n");
			}
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 10:08

que la liste soit générée par la base de données ne change rien au principe

par contre, si tu utilises ta requête avec jointure, tu n'auras que le ou les groupes qui correspondent à la société... pas tous
sauf effectivement avec ta jointure externe qui va peut-être tout prendre mais bon...

donc fais-en une autre pour lister simplement les groupes, tu peux te permettre d'avoir plusieurs requêtes dans une même page ça ne ralentira pas des masses, et ce sera beaucoup plus clair pour toi ;)

Eléphant du PHP | 179 Messages

19 août 2005, 10:27

Voilà j'ai donc repris ce que j'avais fait précédemment:
Nom du groupe :
<select name="IdGroupe">
<option value="">
<?php
//Connection à la base
$lien = mysql_connect("localhost","admin","JPLsin05");
mysql_select_db("sinbad", $lien);

//Selection des champs dans la table groupe//
	$requete2="SELECT * FROM groupes";

	$result2=mysql_query($requete2);
		while ($val2=mysql_fetch_array($result2)){
		print ('<option value='.$val2["IdGroupe"]);
	       	if ($val2["IdGroupe"]) {
			print (' selected');
		}
		print ('>'.$val2["NomGroupe"]."\n");
	}
	mysql_close($lien);
	?>
</option>
</select>
Maintenant si je veux avoir la sélection de l'item choisi, je dois adapter ce que tu m'a dit:
<select name="IdGroupe">
Ca, ça va encore :lol:
$valeurChoisie = 24;
La valeur choisie diffère d'un enregistrement à l'autre. Je dois créer une variable à la place du "24"?
for ($i=7; $i<=77; $i++) {
Pareil, je ne connais pas à l'avance le nombre d'enregistrements que j'aurai dans ma table groupes, donc dans ma liste déroulante.

En fait j'ai du mal à comprendre comment faire à partir de variables non définies à l'avance.
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 10:43

je reprend mon exemple avec des commentaires pour t'aider à adapter :
$requete1 = ""; // sélection des infos de la société choisie
$requete2 = ""; // sélection des tous les groupes existants
<select name="age">
<?php
$valeurChoisie = 24; // cette valeur sera l'id du groupe attribué à la société et récupéré par la requête 1
for ($i=7; $i<=77; $i++) { // cette boucle sera celle qui listera les infos, un mysql_fetch_array par exemple à partir de la requête 2
    if ($i == $valeurChoisie) { // si l'identifiant du groupe courant, est égal à celui des infos de la société, alors on positionne la liste dessus
        echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
    } else {
        echo '<option value="'.$i.'">'.$i.'</option>';
    }
}
?>
</select>
est-ce plus clair comme ça ?