Page 1 sur 4

données-->tableau-->liens-->chargement

Posté : 12 mai 2005, 10:18
par renatane
Salut,

J'affiche les données d'une table en vrac sur une page.
Jaimerai afficher les 4 champs ( pour chacun des enregistrements de cette table dans un tableau.
Je voudrai aussi que chacune des lignes de ce tableau soit un lien vers une page formulaire.
Et pour finir, je voudrai que ce formulaire soit chargé avec l'enregistrement selectionné dans le tableau.

Comment faire?
merci

Posté : 12 mai 2005, 10:35
par zeus
Un truc un peu comme ça
<html>
  <head>
    <title>Affichage</title>
  </head>
  <body>
    <table>
<?php
 $connection = mysql_connect($host, $user, $pwd);
 mysql_select_db($db);

$str_requete = "SELECT * FROM maTable";
$o_result = mysql_query($str_requete);

while ($a_result = mysql_fetch_array($o_result, MYSQL_ASSOC)) {
  echo "<tr>";
  echo "<td><a href='monFormualire.php?id=".$a_result["nomColonne1"]."'>".$a_result["nomColone1"]."</a></td>";
  echo "<td><a href='monFormualire.php?id=".$a_result["nomColonne1"]."'>".$a_result["nomColone2"]."</a></td>";
  echo "<td><a href='monFormualire.php?id=".$a_result["nomColonne1"]."'>".$a_result["nomColone3"]."</a></td>";
  echo "<td><a href='monFormualire.php?id=".$a_result["nomColonne1"]."'>".$a_result["nomColone4"]."</a></td>";
  echo "</tr>";
}

?>
    </table>
  </body>
</html>
Et dans ton formulaire,
<html>
  <head>
    <title>formulaire</title>
  </head>
  <body>
    <form action=".." method="..">
<?php
if (!isset($_GET["id"])) {
  //traitement d'erreur
}

 $connection = mysql_connect($host, $user, $pwd);
 mysql_select_db($db);

$str_requete = "SELECT * FROM maTable WHERE nomColonne1=".$_GET["id"];
$o_result = mysql_query($str_requete);
$a_result = mysql_fetch_array($o_result, MYSQL_ASSOC)
?>
      <input type=".." name=".." value="<?= $a_result["nomColonne1"]?>">
      <input type=".." name=".." value="<?= $a_result["nomColonne2"]?>">
      <input type=".." name=".." value="<?= $a_result["nomColonne3"]?>">
      <input type=".." name=".." value="<?= $a_result["nomColonne4"]?>">
    </form>
  </body>
</html>

Posté : 12 mai 2005, 11:15
par Invité

Code : Tout sélectionner

while ($a_result = mysql_fetch_array($o_result, MYSQL_ASSOC)) {
c koi MYSQL_ASSOC, ca sert a koi?

Posté : 12 mai 2005, 11:24
par zeus
le dernier argument de mysql_fetch_array() permet de définir les index de ton tableau :

MYSQL_NUM met des numeros
MYSQL_ASSOC utilise les noms des champs

exemple
$requete = "SELECT nom, prenom, age FROM client";
$o_result = mysql_query($str_requete);
$a_result = mysql_fetch_array($o_result, MYSQL_NUM);

$nom = $a_result[0];
$prenom = $a_result[0];
$age = $a_result[0];
$requete = "SELECT nom, prenom, age FROM client";
$o_result = mysql_query($str_requete);
$a_result = mysql_fetch_array($o_result, MYSQL_ASSOC);

$nom = $a_result["nom"];
$prenom = $a_result["prenom"];
$age = $a_result["age"];
Je prefere utiliser la 2nd parce si tu modifie ta requete par celle-ci :
"SELECT id, nom, prenom, age FROM client", dans la 1ere solution tu doit changer les numeros pourqu'ils soient correspondant alors que le 2nd code fonctionnera quand même

Posté : 12 mai 2005, 11:32
par renatane
ok, merci beaucoup.

Posté : 12 mai 2005, 15:07
par renatane
y'a un truc que je ne saisi pas tout a fait.

ma page 1, (mon formulaire) permet l'enregistrement dans la base qui est affcihé en page 2.

Mais now, en consultant la page 2, on peut reprendre un formulaire pour le modifier.

Mon soucis c'est qu'en utilisant ta methode pour la page 1, je ne pourrait plus l'obtenir vierge.

Posté : 12 mai 2005, 15:14
par zeus
Sisi, au lieu de faire un traitement d'erreur si l'id n'est pas passé en paramètre, tu initialise tes champs à vide, sinon tu lesrempli avec l'enregistrement correspondant.

Ensuite, si tu veut un formulaire vierge, tu appelle la page sans paramètre et si tu veux le modifier, tu passe l'id de l'enregistrement à modifier
<html>
  <head>
    <title>formulaire</title>
  </head>
  <body>
    <form action=".." method="..">
<?php
if (!isset($_GET["id"])) {
  $connection = mysql_connect($host, $user, $pwd);
  mysql_select_db($db);

  $str_requete = "SELECT * FROM maTable WHERE  nomColonne1=".$_GET["id"];
  $o_result = mysql_query($str_requete);
  $a_result = mysql_fetch_array($o_result, MYSQL_ASSOC)

  $var1 = $a_result["nomColonne1"];
  $var2 = $a_result["nomColonne2"];
  $var3 = $a_result["nomColonne3"];
  $var4 = $a_result["nomColonne4"];
} else {
  $var1 = "";
  $var2 = "";
  $var3 = "";
  $var4 = "";
}


?>
      <input type=".." name=".." value="<?= $var1?>">
      <input type=".." name=".." value="<?= $var2?>">
      <input type=".." name=".." value="<?= $var3?>">
      <input type=".." name=".." value="<?= $var4?>">
    </form>
  </body>
</html>  

Posté : 12 mai 2005, 15:35
par Invité
et d'où il vient cet id? Moi je l'utilise pas, j'ai bien un id_truc, mais il ne me sert que de clé, je ne l'utilise jamais.
Ca se fait tout seul? ou j'ai encore rien compris?

Posté : 12 mai 2005, 15:43
par zeus
Ce que j'appelle id, c'est le truc qui va te permettre de retrouver la ligne dans la base de données.

Je l'ai appellé id parce que dans le formulaire, c'est le nom du paramètrre
<a href='monFormualire.php?id=".$a_result["nomColonne1"]."'> 
Exemple

structure de ta base :
numero
nom,
prenom

Tu va définir le numero comme identifiant pour pouvoir définir cet enregistrement de manière unique dans la base

Mais du moment que dans une colonne, tu es sûr qu'il n'y a pas 2 fois la même valeur, tu peut l'utiliser comme identifiant. Par exemple, tu ne peut utiliser la colonne "nom" parce qu'il est possible que le même nom apparraisse plusieurs fois !!!

Posté : 12 mai 2005, 15:57
par Invité
ok, donc c mon id_truc.
merci, je vais essayer de clarifier tout ca parce que ca reste qd assez confus?
merci bcp pour ta patience.

Posté : 12 mai 2005, 15:59
par zeus
Si tu veux, donne moi la structure de ta bdd et j'essayerais de t'expliquer tout ça de manière plus simple et plus précise !!!

Posté : 12 mai 2005, 16:33
par renatane
Ca, c'est ma table brouillon:

id_brouillon int(11) Non auto_increment
service varchar(30) Non
titre varchar(150) Non
article text Non
date text Non
destinataire varchar(50) Non

j'ai un formulaire sur la page rediger.php qui me permet, en cliquant sur enregistrer, de stocker les données dans cette table.

voici rediger.php
<html>
<body>
<center><h2>Rédiger une notes de syntheses</h2></center><br><br>

<A HREF="index.php"> retour a l\'index </A><br><br>

<?php
$bdd = "synthese";

$host = "localhost";
$user = "renatane";
$pass = "esteban";

mysql_connect($host, $user, $pass)
or die("Connexion à la base impossible");

mysql_select_db("$bdd")
or die("Ouverture base impossible");

$rq = "SELECT DISTINCT nom_service FROM service ORDER BY nom_service";
$result = mysql_query($rq)
or die ("Exécution de la requête service impossible");
//DISTINCT permet d'afficher qu'une fois les données

echo "<form action='enregistrer.php' method='post'>
 Service :
<select name='nom_service'>\n<br>";

while ($liste=mysql_fetch_array($result))
{
extract($liste);
echo "<option value='$nom_service'>$nom_service\n";
}
echo " </select>\n";
echo "<br><br>";

echo " Titre :";
echo "<INPUT type=text name='titre' SIZE='60' MAXLENGTH='200'><BR>\n";
echo "<br> ";

echo " Article :<BR><br>";
echo " <TEXTAREA name='article' cols='100' rows='10' height=100% width=100% WRAP=virtual>";
echo " </TEXTAREA>";

echo "<table cols='2' rows='2' border='0' width=100% >    ";
echo " <tr><td>";


$rq = "SELECT DISTINCT instance.jour, instance.mois, instance.annee FROM instance ORDER BY id_instance";
$result = mysql_query($rq)
or die ("Exécution de la requête instance impossible : ".mysql_error());
//DISTINCT permet d'afficher qu'une fois les données

echo " Proposé pour l instance du: 
<select name='date'>\n<br>";


while ($list=mysql_fetch_array($result))
{
extract($list);
$date=$list['jour']." ".$list['mois']." ".$list['annee'];
echo "<option value='$date'>$date</option>\n";
}
echo "</select>\n";
echo "<br>";

//Construction de la requete
$nature="SELECT DISTINCT instance.type, instance.limite 
FROM instance
where instance.jour=". $list['jour'] ."
and instance.mois=". $list['mois'] ."
and instance.annee= ". $list['annee'];
//On execute la requete sur la base de données afin de récuperer les données
$res = mysql_query($nature)
or die("Exécution de la requête nature impossible : ".mysql_error()); 

//On place les données récupérées dans un tableau (obligatoire)
$lis=mysql_fetch_array($res);

//On affiche ces données
echo "Nature : ".$lis['type'];  
echo "<br>";

//On affiche ces données
echo "Date limite de remise des dossiers : ".$lis['limite'];  
echo "<br>";


echo "</td> ";

echo "<td>Destinataire : <INPUT TYPE=text NAME='destinataire' SIZE='30' MAXLENGTH='50'><A HREF='annuaire.php'> consulter 
l annuaire </A><br><BR> ";
mysql_close();

echo "</td> ";
echo "</tr> ";

echo " <tr colspan='2'><td>";
echo " <INPUT TYPE='button' name= 'valider' VALUE='Valider' OnClick='window.open('confirmation.php','pop1','height=200, width=400, top=100, left=100,toolbar=no, menubar=yes, location=no, resizable=yes, scrollbars=no, status=no');'>";

echo "<INPUT TYPE='submit' name ='enregistrer' VALUE='Enregistrer'> ";
echo "<INPUT TYPE='reset' VALUE='Annuler'></td></tr> ";

echo "<br><br><br>";

echo"</table></form>";

?>


</body>
</html>
  	  
j'ai une page brouillon, qui affcihe dans un tableau les articles deja enregistrés.

voici brouillon.php:
<html>
<A HREF="index.php"> retour a l\'index </A><br><br>
<table border="2">
<?php


$bdd = "synthese";
$host = "localhost";
$user = "renatane";
$pass = "esteban";
mysql_connect($host,$user,$pass)
or die("erreur de connexion au serveur $host");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

 $req_brouillon=mysql_query("select * from brouillon");

while ($a_result = mysql_fetch_array($req_brouillon, MYSQL_ASSOC)) { 
  echo "<tr>"; 
  echo "<td><a href='rediger.php?id_brouillon=".$a_result["service"]."'>".$a_result["service"]."</a></td>"; 
  echo "<td><a href='rediger.php?id_brouillon=".$a_result["titre"]."'>".$a_result["titre"]."</a></td>"; 
  echo "<td><a href='rediger.php?id_brouillon=".$a_result["date"]."'>".$a_result["date"]."</a></td>"; 
  echo "<td><a href='rediger.php?id_brouillon=".$a_result["destinataire"]."'>".$a_result["destinataire"]."</a></td>"; 
  echo "</tr>"; 
} 
 
?> 
    </table>

</html>
et donc, j'aimerai qu'en cliquant sur un brouillon dans la page brouillon, la page rediger s'affcihe mais avec les champs du form remplis, tel qu'ils l'etaient lorsque l'utilisateur a enregistrer son form. Ainsi il peu le modifier et soit le réenregistrer, soit l'envoyé.[/php]

Posté : 12 mai 2005, 16:36
par Invité
a noter: plusieurs problèmes subsistent sur rediger.php notamment l'envoye du mail via confirmation.php, ou encore l'affchage de type et limite, n'y fait pas attention.

Posté : 12 mai 2005, 17:01
par zeus
Ce que tu appelles id_brouillon, c'est un champ qui te permet de retrouver une ligne dans ta table

Il faut que le lien que tu fait dans ton tableau contienne ce paramêtre si tu veux que ton formulaire soit capable de remplir les champs avec les données de la ligne de ta table!!!
<html>
	<head>
		<title>brouillon.php</title>
	</head>
	<body>
		<A HREF="index.php"> retour a l\'index </A><br><br>
		<table border="2">
<?php
$bdd = "synthese";
$host = "localhost";
$user = "renatane";
$pass = "esteban";
mysql_connect($host,$user,$pass)
or die("erreur de connexion au serveur $host");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

$req_brouillon=mysql_query("select * from brouillon");

while ($a_result = mysql_fetch_array($req_brouillon, MYSQL_ASSOC)) {
  echo "<tr>";
  echo "<td><a href='rediger.php?id=".$a_result["id_brouillon"]."'>".$a_result["service"]."</a></td>";
  echo "<td><a href='rediger.php?id=".$a_result["id_brouillon"]."'>".$a_result["titre"]."</a></td>";
  echo "<td><a href='rediger.php?id=".$a_result["id_brouillon"]."'>".$a_result["date"]."</a></td>";
  echo "<td><a href='rediger.php?id=".$a_result["id_brouillon"]."'>".$a_result["destinataire"]."</a></td>";
  echo "</tr>";
}

?>
    	</table>
	</body>
</html>
(Je me suis permis de réparer les erreurs de normes)

Ensuite, sur ton formulaire, il faut que tu récupère cet identifiant (id) et que tu intérroge la base de manière à récupérer la ligne que tu veut modifier !!!

Compris ??

Posté : 13 mai 2005, 11:55
par Invité
merci beaucoup,
J'ai compris le principe. Theoriquement ca va. Pratiquement, c'est autre chose.
merci