Page 1 sur 3

Formulaire avec données modifiables

Posté : 15 mars 2011, 11:01
par Nesdonal
Bonjour, je suis nouveau sur le forum,..suis super-débutant, et j'epère que ce post est à la bonne place.
Voilà,
je travaille sous Wampserver2.1.
j'ai créé une Bdd (test) dans laquelle j'ai une table (news) qui contient juste 3 champs (4 avec l'index n°auto) Titre/date/news.
-j'ai une page "ajout.php" dans laquelle il y a le formulaire et le submit.
-une page "traitement_ajout.php" qui est le script php pour ajout à la base.
-une page "essai.php" qui est une requete sql et l'affichage sur le "titre".
Jusque là tout fonctionne bien.
mais je souhaiterais savoir s'il est possible de pouvoir sélectionner un titre affiché dans cette page (par dbl_click ou autre) et ré ouvrir la page "ajout.php" (ou une autre page) que cette page soit remplie des données correspondantes à la référence sélectionnée, et pouvoir les modifier (bouton modif ou submit).
je ne trouve pas comment sélectionner une données sur une page..(est-ce possible) et lui affecter une action
Merci pour vos conseils.
je joint ci-dessous le code de ma page "essai.php"
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Exemple d'utilisation de CSS externe</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" media="screen" type="text/css" title="tab" href="tab.css" />
   </head>
   <?php
//========connection==========
 $Flag1=mysql_connect("localhost","root","");
 $Flag2=mysql_select_db("test");
//==========selection=========
 $result=mysql_query( "select titre from news ");
 ?>

<html>
<body>
<table>
   <?php
      while ($row=mysql_fetch_array($result)) 
         {
          $titre= stripslashes($row['titre']);

echo "<tr><td> ".$titre." </td><td> ";
         }
mysql_close($Flag1); 
?>
</table>
<br>
<br>
<A HREF="index.html">retour</A> <br>
</body>
</html>

Re: Formulaire avec données modifiables

Posté : 15 mars 2011, 13:32
par moogli
salut,

lorsque tu affiche les titres utilise un lien dessus en passant l'id dans l'url :
<?php
$result=mysql_query( "select id,titre from news ");
while ($row=mysql_fetch_array($result)){
    $titre= stripslashes($row['titre']);
   echo '<tr><td><a href="ajout.php?id='.$row['id'].'" title="cliquer pour modifier">'.$titre.'</a></td><td>';
}
mysql_close($Flag1);

//ajout.php
if (isset ($_GET['id'])){
    // requete sql pour récupérer les valeurs de la news en paramètre
    // le résultat dans un tableau qui s'appele $value
}
else {
    //pas d'id donc on créer une news
    $value = array();
}
?>
lorsque tu affiche le champs ajoute un test pour savoir si tu doit utiliser un "value"
par exemple
<input type="texte" name="titre" 
<?php
if (isset($value['titre'])) echo 'value="'.htmlspecialchars($value['titre']).'" ;
?>
/>
ça te permet d'avoir un formulaire pour ajout / modif ;)
bien entendu il te faut ajouter l'id dans le formulaire lors d'une modif et utiliser le test sur l’existence du champ id pour la validation du formulaire (update ou insert).

@+

Re: Formulaire avec données modifiables

Posté : 15 mars 2011, 16:33
par Nesdonal
Bonjour et merci pour l'aide que tu me propose.....ça à l'air de convenir parfaitement à ce qui me fait besoin !!
seulement comme je suis débutant ++...
je plante un peu / beaucoup.!!!...ce n'est pas clair..

donc.
j'ai bien créé une page "test.php" avec le script que tu m'a envoyé,
auquel j'ai rajouté le script de connexion et SQL.
lorsque je lance ma page ,connexion réussie...
mais après ...je sèche..
si tu voulais bien détailler plus ton aide...stp...
comment fait-on pour passer une Id dans une url..?

je te remercie par avance

Re: Formulaire avec données modifiables

Posté : 15 mars 2011, 17:12
par moogli
le passage de la clef primaire (souvent appelé ID mais c'est loin d'être obligatoire ;) ) est fait le liens lors de l'affichage
echo '<tr><td><a href="ajout.php?id='.$row['id'].'" title="cliquer pour modifier">'.$titre.'</a></td><td>';
lorsque dans une url tu un ? et derriere des choses du genre truc=machin c'est une info que l'on passe au script.
il s'agit la d'une des deux méthodes pour passer des infos à un script (la seconde tu la connais sans le savoir c'est post, que tu retrouve surement dans tes formulaires ;)).

donc ajout.php?id=142 te fournit dans le script ajout.php une variable (pour être précis un index du tableau $_GET dans lequel tu va retrouver toutes les infos passée dans l'url, pour en passer plusieurs met un & en séparation, ou & suivant la conf du serveur ça peut être autre chose mais c'est le plus "standard").
donc dans ce code, j'ai ajouter dans la requete 'id' (en supposant que la clef primaire s'appel ainsi) afin de pouvoir la passer dans l'url.
Pourquoi id ?
simplement parce qu'un chiffre c'est beaucoup simple à "balader" qu'un texte. Ça évite, par exemple, les problème d'encodage, d'unicité etc. avec la clef primaire tu peut pas te planter :)
test.php
<?php
$result=mysql_query( "select id,titre from news ");
//parcourt des résultats comme tu sais déjà le faire
while ($row=mysql_fetch_array($result)){
    $titre= stripslashes($row['titre']);// ça j'ai laisser mais c'est pas terrible car pas portable, cela m'indique aussi que les magic_quote sont activéet c'est pas bon. 
// ici avec la concaténation on créer l'url avec la valeur de l'id
   echo '<tr><td><a href="ajout.php?id='.$row['id'].'" title="cliquer pour modifier">'.$titre.'</a></td><tr>';
}
mysql_close($Flag1);
pour avoir plus d'info sur les liens en html (balise a) => http://fr.selfhtml.org/html/liens/definir.htm#exemples
//ajout.php
if (isset ($_GET['id'])){ // permet de savoir si on a id= dans l'url
/*
 requete sql pour récupérer les valeurs de la news en paramètre
utilise la clause where de sql pour cela
  le résultat dans un tableau qui s'appele $value c'est le résultat d'un mysql_fetch_assoc / array
je te laisse faire la requete, si soucis reviens avec le code qui te pose problème ;)
*/
}
else {
    //pas d'id donc on créer une news 
    $value = array();
}
// affichage normal + test pour pré remplir le formulaire
?>
Je t'invite a consulter les docs des fonctions que tu ne connais pas (en cliquant dessus :) )

essai de faire la page d'affichage des liens.
essai de modifier (après sauvegarde de la page d'origine :) ) la page de validation du formulaire (ajout.php) afin d'y inclure la modification d'une news.

une fois que tous cela est fait est que ça fonctionne on reparle de la validation formulaire si tu ne trouve pas :)
ci ça ne fonctionne pas, montre nous le code que tu utilise (si c'est en ligne pourquoi pas une lien vers le formulaire que l'on puisse voir le code source html ;)) que l'on vois où cela peu poser problème.

@+

Re: Formulaire avec données modifiables

Posté : 15 mars 2011, 22:52
par Nesdonal
Bonsoir..
bon après quelques réflexions...
Voici le code de ma page initiale 'list.php'
qui fonctionne bien, affiche la liste des noms enregistrés,
la sélection se fait bien et le transfert id se fait bien par l’URL.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Exemple d'utilisation de CSS externe</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" media="screen" type="text/css" title="tab" href="tab.css" />
   </head>
  <?php
//========connection==========
 $Flag1=mysql_connect("localhost","root","");
 $Flag2=mysql_select_db("test");
//==========selection=========

?>
<table>
<?php

$result=mysql_query( "select id,titre from news ");
//parcourt des résultats comme tu sais déjà le faire
while ($row=mysql_fetch_array($result)){
    $titre= stripslashes($row['titre']);// ça j'ai laisser mais c'est pas terrible car pas portable, cela m'indique aussi que les magic_quote sont activéet c'est pas bon. 
// ici avec la concaténation on créer l'url avec la valeur de l'id
   echo '<tr><td><a href="ajout.php?id='.$row['id'].'" title="cliquer pour modifier">'.$titre.'</a></td><tr>';
}
mysql_close($Flag1);
?>
jusque là tout va bien,…mais..
voici le code de la page ‘ajout.php’
je crois que j’ai bien réussi la requète SQL, puisque j’ai un résultat qui correspond bien à l’enregistrement sélectionné dans la page ‘list.php’. par contre ..je n’arrive pas à faire un affichage tabe..mais je verrais plus tard !!
Par contre, la suite laisse à désirer, puisque dès l’affichage terminé, j’ai : 'enregistrement ajouté !'
Et je sèche pour la fonction ajouter, ou modifier
Pour la fonction ajouter, je pense que je peux faire une page ‘ajout.php’ qui appelle une page script php. (ça je sais faire !!)
Mais pour la modification….Help..please
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Réception de paramètres dans l'URL</title>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   </head>
   <body><body><table>
   
 <?php
  
  //ajout.php
if (isset ($_GET['id'])){ // permet de savoir si on a id= dans l'url


//========connection==========
 $Flag1=mysql_connect("localhost","root","");
 $Flag2=mysql_select_db("test");
//==========selection=========

 $result=mysql_query( "select titre,date,text from news where id = ($_GET[id])");



      while ($row=mysql_fetch_array($result)) 
         {
          $titre= stripslashes($row['titre']);
          $date= stripslashes($row['date']);
          $text= stripslashes($row['text']);

  
echo "<tr><td> ".$titre." </td><td> ".$date." </td><td> ".$text." </td</tr> ";

         }
mysql_close($Flag1); 

echo 'enregistrement ajouté !';
// Deconnexion de la base de donnees


}
else {
    //pas d'id donc on créer une news 
    $value = array();
}
// affichage normal + test pour pré remplir le formulaire
?>


</table>  
</body>
</html>


Re: Formulaire avec données modifiables

Posté : 16 mars 2011, 15:16
par Nesdonal
:oops: Encore un petit coup de pouce..pour un débutant qu patauge.. :oops:
svp

Re: Formulaire avec données modifiables

Posté : 16 mars 2011, 15:38
par moogli
quel est le formulaire d'origine d'ajout.php ?

Re: Formulaire avec données modifiables

Posté : 16 mars 2011, 17:58
par Nesdonal
Bonjour,
j'ai créé un formulaire qui s'apelle "form_ajout.php" dont voiçi le script ci-dessous.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<style type="text/css">
<!--
body,td,th {
	color: #000;
}
body {
	background-color: #9CF;
}
-->
</style></head>

<body>

<form action="add.php" method="post" enctype="multipart/form-data">
  <p>Titre : <br />
    <input type="text" name="titren1"/>
  </p>
	<p>Date : <br /><input type="text" name="daten1" />
  <p>Texte : <br /><input type="text" name="texte1" />
	<p>
      <input name="valider" type="submit" value="Valider" />
</form>
</body>
</html>
et ce formulaire appelle le script "add.php" dont voiçi le code ci-dessous.
<?php 

if (isset ($_POST['valider']))

	$titre = $_POST['titren1'];
	$date  = $_POST['daten1'];
	$texte  = $_POST['texte1'];
		
	// Si l'un des champs est vide, lancer une erreur
	if (empty ($titre) || empty($date) || empty($texte))
		$info = 'Veuillez renseigner tous les champs';
	else
	
if(!mysql_connect('localhost','root')) 
{ 
Echo'Connection Impossible'; 
exit(); 
} 
else 
{     
Echo'Connexion au serveur réussie    <br>';

} 

try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
    
$req = $bdd->prepare('INSERT INTO news(titre, date, text) VALUES(:titre, :date, :texte)');
$req->execute(array(
	'titre' => $titre,
	'date' => $date,
	'texte' => $texte,
	));

echo 'enregistrement ajouté !';
// Deconnexion de la base de donnees
mysql_close();

}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
 ?> 
ça fonctionne,
j'ai bien accès (via ma page "index.php") à l'ajout (par formulaire) dans ma base, j'ai bien accés, grace à toi, à une liste de sélection de mes enregistrements (toujours via "index.php),je peux sélectionner un enrgistrement qui affiche tous les champs dans "ajout.php".
Mais suis toujours en panne pour modifier l'enregistrement sélectionné.
Finalement je ne sais pas si j'avais bien compris ce que tu me proposais, c'était ajout et modif sur une seule et meme page..?
En fait ce qui me fait besoin c'est que la modification soit possible dès l'ouverture de la page "ajout.php" après sélection dans la liste.

Re: Formulaire avec données modifiables

Posté : 16 mars 2011, 18:51
par moogli
oui oui un seul formulaire pour les deux ;)

mais bien sur tu peux faire une page ajout et une modif si tu t'y retrouve mieux, c'ets même conseiller si tu hésite ;)

avec ton formulaire html et un peu de php tu peux pré remplir le formulaire avec la news voulu afin de préparer lamodification
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<style type="text/css">
<!--
body,td,th {
        color: #000;
}
body {
        background-color: #9CF;
}
-->
</style></head>

<body>
<?php
//ajout.php
if (isset ($_GET['id'])){ // permet de savoir si on a id= dans l'url
$sql = 'select id, titre, text from news where id=:id';
// requete préparée avec pdo au final tu met les données dans un tableau qui s'appelle $value
}
else {
    //pas d'id donc on créer une news
    $value = array();
}
// affichage normal + test pour pré remplir le formulaire
?>
?>
<form action="add.php" method="post" enctype="multipart/form-data">
  <p>Titre : <br />
    <input type="text" name="titren1" <?php if (isset($value['titre'])) echo 'value="'.htmlspecialchars($value['titre']).'"'; ?> />
  </p>
        <p>Date : <br /><input type="text" name="daten1" <?php if (isset($value['date'])) echo 'value="'.htmlspecialchars($value['date']).'"'; ?> />
  <p>Texte : <br /><textarea name="texte1"><?php if (isset($value['titre'])) echo htmlspecialchars($value['titre']); ?></textarea>
        <p>
		<?php 
			if (isset ($_GET['id']) && isset($value['id']){
				echo '<input type="hidden" name="id" value="'.htmlspecialchars($value['id']).'" />';
			}
		?>
      <input name="valider" type="submit" value="Valider" />
</form>
</body>
</html>
donc si l'onarrive sur cette page avec un ?id=xxx on va pré remplir le formulaire et ajouter un champde type hidden (caché) qui va permettre de savoir que l'on vient d'un formulaire de modification.

dans la page de validation

j'ai viré la partie avec le mysql_connect / mysql_close inutile si tu utilise PDO ;)
<?php
if ( isset($_POST['valider']) && isset($_POST['titren1']) && isset($_POST['daten1']) && isset($_POST['texte1'])){
	/* on vérifie que les champs existe */
	$titre = $_POST['titren1'];
	$date  = $_POST['daten1'];
	$texte  = $_POST['texte1'];
		   
	// Si l'un des champs est vide, lancer une erreur
	if (empty ($titre) || empty($date) || empty($texte))
			$info = 'Veuillez renseigner tous les champs';
	else{
		/* Est ce que l'on a un champ id dans le formulaire et est ce que c'est un chiffre ?*/
		if (isset($_POST['id']) && is_numeric($_POST['id'])) {
		// il s'agit d'une mise a jour on prépare les données et la requete en conséquence
			$data = array(
					'titre' => $titre,
					'date' => $date,
					'texte' => $texte,
					'id' => $_POST['id'],
					);
			$sql = 'UPDATE news set titre=:titre, date=:date, texte=:texte where id=:id';
		}
		else {
			// nouvelle news
			$data = array(
					'titre' => $titre,
					'date' => $date,
					'texte' => $texte
					);
			$sql = 'INSERT INTO news(titre, date, text) VALUES(:titre, :date, :texte)';
		}
		try{
			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
			$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
			$req = $bdd->prepare($sql); // requete en fonction du choix ajout ou modif 
			$req->execute($data); // donnée en conséquence 
			echo 'enregistrement ajouté !';
			// Deconnexion de la base de donnees
		}
		catch(Exception $e){
				die('Erreur : '.$e->getMessage());
		}
	}
}
else {
	$erreur ='Au moins un des champs obligatoire est vide';
}
 ?> 
Avec ce code tu fait la vérification du formulaire d'ajout et celle de la modification en même temps (enfin sur la même page :))

voila comment tu peut faire avec ce que tu a déja fait :)

bon je t'ai laissé un peu de boulot dans la 1ère partie :)

@+

Re: Formulaire avec données modifiables

Posté : 16 mars 2011, 21:16
par Nesdonal
Je suis confus............je rame et me plante lamentablement..oui.. :?

j'ai fait la req préparée pdo avec tableau $value....enfin je crois que c'est ça.!!
mais alors ..pour la suite
si pas id créer new et affichage normal + test........!!!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<style type="text/css">
<!--
body,td,th {
        color: #000;
}
body {
        background-color: #9CF;
}
-->
</style></head>

<body>
<?php
//ajout.php
if (isset ($_GET['id'])){ // permet de savoir si on a id= dans l'url
//$sql = 'select id, titre, text from news where id=:id';
// requete préparée avec pdo au final tu met les données dans un tableau qui s'appelle $value

$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
    
$value = $bdd->prepare('select id, titre, text from news where id=:id');
$value->execute(array(
	'titre' => $titre,
	'date' => $date,
	'texte' => $texte,
	));
}

else 
{
    //pas d'id donc on créer une news
       $value = array(
         'titre' => $titre,
         'date' => $date,
        'texte' => $texte,
         );

}
// affichage normal + test pour pré remplir le formulaire

?>
<form action="add.php" method="post" enctype="multipart/form-data">
  <p>Titre : <br />
    <input type="text" name="titren1" <?php if (isset($value['titre'])) echo 'value="'.htmlspecialchars($value['titre']).'"'; ?> />
  </p>
        <p>Date : <br /><input type="text" name="daten1" <?php if (isset($value['date'])) echo 'value="'.htmlspecialchars($value['date']).'"'; ?> />
  <p>Texte : <br /><textarea name="texte1"><?php if (isset($value['titre'])) echo htmlspecialchars($value['titre']); ?></textarea>
        <p>
                <?php 
                        if (isset ($_GET['id']) && isset($value['id']){
                                echo '<input type="hidden" name="id" value="'.htmlspecialchars($value['id']).'" />';
                        }
						else{
                ?>
      <input name="valider" type="submit" value="Valider" />
</form>
</body>
</html>

Re: Formulaire avec données modifiables

Posté : 16 mars 2011, 23:02
par Nesdonal
j'ai besoin d'une précision,
dans ce schéma,
le "form_ajout.php"
-peut être lancé directement depuis ma page "index.php" il souvre vide, puisque pas d'id donc pour ajout. ça, ça fonctionne
-peut-être lancé depuis la selection dans 'list.php' et dans ce cas là, ouverture pré-rempli pour modif..
c'est bien ça..?

Re: Formulaire avec données modifiables

Posté : 17 mars 2011, 08:06
par Nesdonal
bonjour.
:evil: ...j'enrage... :evil:
je n'arrive à rien...
rien à faire,
je n'arrive pas à pré-remplir le formulaire à l'ouverture si sélection dans la liste avec une id non vide.!!!! :evil:

Re: Formulaire avec données modifiables

Posté : 17 mars 2011, 17:05
par moogli
heu je te suggère de revoir l'utilisation de PDO pour une requête préparée, c'est la que tu fait une bêtise ;)

Tu donne un tableau avec plein de paramètre alors que tu n'en a qu'un dans la requête :)


@+

Re: Formulaire avec données modifiables

Posté : 17 mars 2011, 21:08
par Nesdonal
Bonsoir........
et surtout merci pour ta patience....
après recherche et documentation....
est-ce que je suis sur la bonne voie..?
<?php
try 
{
	$dbh = new PDO('mysql:host=localhost;dbname=test', '', '');
	if (isset ($_GET['id']))
	{
$values = $dbh->prepare("SELECT id, titre,date,texte FROM news");  
if ($values->execute(array($_GET['id']))) 
		{  
while ($row = $values->fetch()) 
			{ 
		$id=$row->id;
 		$titre=$row->titre;
		$date=$row->date;
		$texte=$row->texte;
  
			}
		}
else {
    //pas d'id donc on créer une news
    $value = array();	
	}

} 

// affichage normal + test pour pré remplir le formulaire
?>

<form action="list.php" method="post" enctype="multipart/form-data">
  <p>Titre : <br />
    <input type="text" name="titre" <?php if (isset($value['titre'])) echo 'value="'.htmlspecialchars($value['titre']).'"'; ?> />
  </p>
        <p>Date : <br /><input type="texte" name="date" <?php if (isset($value['date'])) echo 'value="'.htmlspecialchars($value['date']).'"'; ?> />
		<p>Texte : <br /><textarea name="texte"><?php if (isset($value['titre'])) echo htmlspecialchars($value['titre']); ?></textarea>
        <p>
                <?php 
                        if (isset ($_GET['id']) && isset($value['id']){
                                echo '<input type="hidden" name="id" value="'.htmlspecialchars($value['id']).'" />';
                        }
                ?>
      <input name="valider" type="submit" value="Valider" />
</form>
Mais pour l'affichage..je sèche encore...

Re: Formulaire avec données modifiables

Posté : 17 mars 2011, 22:27
par moogli
$values = $dbh->prepare("SELECT id, titre,date,texte FROM news where id= :id");
if ($values->execute(array($_GET['id'])))