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

renatane
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 10:18

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 10:35

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>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 11:15

Code : Tout sélectionner

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 11:24

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

renatane
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 11:32

ok, merci beaucoup.

renatane
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 15:07

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 15:14

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>  
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 15:35

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?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 15:43

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 !!!
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 15:57

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 15:59

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 !!!
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

renatane
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 16:33

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]

Invité
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 16:36

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 17:01

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 ??
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

13 mai 2005, 11:55

merci beaucoup,
J'ai compris le principe. Theoriquement ca va. Pratiquement, c'est autre chose.
merci