Page 1 sur 2

éditer et sauvegarder

Posté : 04 mars 2006, 02:03
par Johnstyle
bonjour,

voila, j'ai creer un formulaire php qui creer des pages via mysql et qui marche parfaitement, maintenant, j'aimerait creer un nouveau formulaire qui permettrait d'éditer et/ou de supprimer ces pages.
mon premier formulaire est tout simple :
  • nom de la page
    titre de la page
    contenu de la page
pour creer le 2eme formulair, j'avais penser mettre une liste déroulante qui se mettrait a jour automatiquement, jusque là pas de probleme mais apres je n'ai aucune idée pour :
  • 1- que depuis cette liste déroulante (noms des pages) les infomations de la page soit renvoyer sur un formulaire
    2- que sur ce formulaire je puise l'éditer et resauvegarder par dessus
    3- qu'il y ai une case a cocher "supprimer" cette page
apres quelques heures de recherches en essayant diverse manière je n'ai toujour pas réussi je pense savoir a peut pres comment faire mais le probleme, etant novice de la programation php, je n'arrive pas a creer un code corect :(

si quelqu'un aurait une idée de comment faire :)

merci a vous

Posté : 04 mars 2006, 09:20
par Cyrano
Le principe général de fonctionnement est relativement simple.

Lorsque tu enregistres une page dans ta base de donnée, en principe, si tu as correctement conçu ta base, à chaque page correspond une clé primaire.

Pour sélectionner la page à mettre à jour, tu dois donc créer une liste dynamique comportant cette clé de façon à ce qu'en faisant une sélection tu ailles chercher directement le contenu correspondant.

Donc dans un premier temps, tu devras créer une requête listant les clés et les titres avec un code dans ce style:
<?php
$sql1 = "SELECT `page_id`, `page_nom` FROM `tbl_pages`";
// ...
/* ... code de connexion et d'exécution de la requête */
// ...
?>
<form id="form_maj_pages" action="maj_pages.php" method="post">
<select name="listepages" id="listepages" onchange="document.forms['form_maj_pages'].submit();">
<?php
while(($ligne = mysql_fetch_assoc($exec)) != false)
{
?>
  <option value="<?php echo($ligne['page_id']); ?>"><?php echo($ligne['page_nom']); ?></option>
<?php
}
?>
</select>
</form>
À partir de là, tu sélectionnes une page dans la liste, avec l'évènement onchange, le formulaire est automatiquement soumis et la page de mise à jour (que tu devras indiquer dans l'attribut action de la balise form) sera chargée.

Dans ta page de traitement, tu récupèreras l'identifiant de la page à modifier : c'est l'attribut value de ta balise option. À partir dlà, tu peux créer une requête SQL pour récupérer les informations propres à cet identifiant. Tu ajoutes ensuite le formulaire de modification et dans les éléments, tu ajoutes les valeurs récupérées. Très sommairement, ça donne ça :
<?php
$page_id = isset($_POST['listepages']) ? $_POST['listepages'] : null;
/* Au cas où on ouvrirait directement cette page, il n'y aura pas 
d'identifiant, donc on devra rediriger vers la page de sélection, sinon, 
on interroge la base et on affiche le formulaire */
if(!isset($page_id))
{
    /* Si l'identifiant n'xiste pas, on réexpédie vers la page listant les pages disponibles */
    header("Location: page_listemaj.php");
}
else
{
    $sql2 = "SELECT `page_nom`, `page_titre`, `page_contenu` ".
            "FROM tbl_pages ".
            "WHERE `page_id` = ". $page_id .";";
    // ...
    /* ... code de connexion et d'exécution de la requête */
    // ...
    if(($ligne = mysql_fetch_assoc($exec)) != false)
    {
?>
<form id="maj_page" action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
  <fieldset>
    <label>Nom de la page : <input name="nom_page" id="nom_page" value="<?php echo($ligne['page_nom']); ?>" /></label><br />
    <label>Titre de la page : <input name="titre_page" id="titre_page" value="<?php echo($ligne['page_titre']); ?>" /></label><br />
    <textarea name="contenu_page" id="contenu_page" rows="10" cols="50"><?php echo($ligne['page_contenu']); ?></textarea><br />
    <input type="submit" name="envoi_maj" id="envoi_maj" value="Mettre à jour" />
  </fieldset>
</form>
<?php
    }
}

?>
C'est très sommaire, à toi d'ajuster les détails.

Posté : 04 mars 2006, 13:40
par Johnstyle
un grand merci a toi !! :D


mais dsl, je suis vraiment pas doué :?

j'ai déja un souci avec la premiere partie lol


j'affiche corectement la liste déroulante mais ya rien dedant :(
et je n'arive po a trouver d'ou cela vient ..


<?php 
// ... 
/* ... code de connexion et d'exécution de la requête */ 
// ... 
	require_once("config.php");
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
	
$sql1 = "SELECT 'id', 'nom' FROM 'js_pages'"; 

?> 

<form id="form_maj_pages" action="epage.php" method="post"> 
<select name="listepages" id="listepages" onchange="document.forms['form_maj_pages'].submit();"> 

<?php 
while(($ligne = mysql_fetch_assoc($exec)) != false) 
{ 
?> 

  <option value="<?php echo($ligne['id']); ?>"><?php echo($ligne['nom']); ?></option> 
  
<?php 
} 
?> 
</select> 
</form>
merci

Posté : 04 mars 2006, 14:27
par Johnstyle
un grand merci a toi !! :D


mais dsl, je suis vraiment pas doué :?

j'ai déja un souci avec la premiere partie lol


j'affiche corectement la liste déroulante mais ya rien dedant :(
et je n'arive po a trouver d'ou cela vient ..


<?php 
// ... 
/* ... code de connexion et d'exécution de la requête */ 
// ... 
	require_once("config.php");
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
	
$sql1 = "SELECT 'id', 'nom' FROM 'js_pages'"; 

?> 

<form id="form_maj_pages" action="epage.php" method="post"> 
<select name="listepages" id="listepages" onchange="document.forms['form_maj_pages'].submit();"> 

<?php 
while(($ligne = mysql_fetch_assoc($exec)) != false) 
{ 
?> 

  <option value="<?php echo($ligne['id']); ?>"><?php echo($ligne['nom']); ?></option> 
  
<?php 
} 
?> 
</select> 
</form>
merci

c'est bon finalement je pense avoir trouver :D
  <?php 
// ... 
/* ... code de connexion et d'exécution de la requête */ 
// ... 
    require_once("config.php"); 
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
     
$sql = "SELECT id,nom FROM js_pages"; 
$exec = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

?> 

<form id="form_maj_pages" action="epage.php" method="post"> 
<select name="listepages" id="listepages" onchange="document.forms['form_maj_pages'].submit();"> 

<?php 
while(($ligne = mysql_fetch_assoc($exec)) != false) 
{ 
?> 

  <option value="<?php echo($ligne['id']); ?>"><?php echo($ligne['nom']); ?></option> 
   
<?php 
} 
mysql_close($db); 

?> 
</select> 
</form> 

Posté : 04 mars 2006, 14:29
par Truc
le problème vient de la requete ou plutot de son exécution qui n'existe pas => mysql_query(), de plus tu as des apostrophes normales ' et non inversées ` (qui ne sont pas obligatoires)

ajoute un message d'erreur pour verifier la bonne exécution des requetes:
$sql1 = "SELECT id, nom FROM js_pages";
$exec= mysql_query($sql1) or die(mysql_error())
EDIT: Bon ben voilà auto résolution =D>

Posté : 04 mars 2006, 14:40
par Johnstyle
merci :)

j'ai un autre souci :cry: , il ne manque pas grand chose lol

donc tout marche correctement c'est juste au moment ou je clique sur le bouton "mettre a jour" ça me dit ça :
Erreur SQL !
SELECT `nom`, `titre`, `contenu` FROM js_pages WHERE `id` = ;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


voici le code complet
<!-- 1ere partie -->

<?php 
// ... 
/* ... code de connexion et d'exécution de la requête */ 
// ... 
    require_once("config.php"); 
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
     
$sql = "SELECT id,nom FROM js_pages"; 
$exec = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

?> 

<form id="form_maj_pages" action="epage.php" method="post"> 
<select name="listepages" id="listepages" onchange="document.forms['form_maj_pages'].submit();"> 

<?php 
while(($ligne = mysql_fetch_assoc($exec)) != false) 
{ 
?> 

  <option value="<?php echo($ligne['id']); ?>"><?php echo($ligne['nom']); ?></option> 
   
<?php 
} 
mysql_close($db); 

?> 
</select> 
</form> 

<!-- 2eme partie -->


<?php 
$id = isset($_POST['listepages']) ? $_POST['listepages'] : null; 

    $sql2 = "SELECT `nom`, `titre`, `contenu` ". 
            "FROM js_pages ". 
            "WHERE `id` = ". $id .";"; 
    // ... 
    /* ... code de connexion et d'exécution de la requête */ 
    // ... 
	
	  require_once("config.php"); 
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
	
	$exec = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error()); 
	
    if(($ligne = mysql_fetch_assoc($exec)) != false) 
    { 
?> 
<form id="maj_page" action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post"> 
  <fieldset> 
    <label>Nom de la page : <input name="nom" id="nom" value="<?php echo($ligne['nom']); ?>" /></label><br /> 
    <label>Titre de la page : <input name="titre" id="titre" value="<?php echo($ligne['titre']); ?>" /></label><br /> 
    <textarea name="contenu" id="contenu" rows="10" cols="50"><?php echo($ligne['contenu']); ?></textarea><br /> 
    <input type="submit" name="envoi_maj" id="envoi_maj" value="Mettre à jour" /> 
  </fieldset> 
</form> 
<?php 
    } 
mysql_close($db); 

?> 

merci

Posté : 04 mars 2006, 14:51
par Truc
si tu regardes bien la requete générée, qui sera exécutée tu veras qu'il manque quelque chose à la fin:
SELECT `nom`, `titre`, `contenu` FROM js_pages WHERE `id` = .. ;
Lors du 1er chargement de la page la varaible POST associée à l'id n'existe pas donc d'apèrs cette ligne:
$id = isset($_POST['listepages']) ? $_POST['listepages'] : null;
$id est égal à null, donc erreur, il faut inclure le code de la 2nde partie dans un test:
$id = isset($_POST['listepages']) ? $_POST['listepages'] : null;

if($id)
{
   $sql2 =".....";
   //reste du code
}
tu peux aussi retirer cette ligne de la 2nde partie du code:
require_once("config.php"); 
car déjà appelé au début de page

Posté : 04 mars 2006, 15:19
par Johnstyle
merci ^^

je croi que je n'y arriverai pas :(

maintenant il n'y a plus de message d'ereur mais il ne se passe rien apres avoir cliquer sur "mettre a jour"




  <!-- 1ere partie -->

	  <?php 
// ... 
/* ... code de connexion et d'exécution de la requête */ 
// ... 
    require_once("config.php"); 
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
     
$sql = "SELECT id,nom FROM js_pages"; 
$exec = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

?> 

<form id="form_maj_pages" action="epage.php" method="post"> 
<select name="listepages" id="listepages" onchange="document.forms['form_maj_pages'].submit();"> 

<?php 
while(($ligne = mysql_fetch_assoc($exec)) != false) 
{ 
?> 

  <option value="<?php echo($ligne['id']); ?>"><?php echo($ligne['nom']); ?></option> 
   
<?php 
} 
mysql_close($db); 

?> 
</select> 
</form> 

<!-- 2eme partie -->


<?php 
$id = isset($_POST['listepages']) ? $_POST['listepages'] : null; 

if($id) 
{ 
    $sql2 = "SELECT `nom`, `titre`, `contenu` ". 
            "FROM js_pages ". 
            "WHERE `id` = ". $id .";"; 
			
    // ... 
    /* ... code de connexion et d'exécution de la requête */ 
    // ... 
	
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
	
	$exec = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error()); 
	
    if(($ligne = mysql_fetch_assoc($exec)) != false) 
    { 
?> 
<form id="maj_page" action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post"> 
  <fieldset> 
    <label>Nom de la page : <input name="nom" id="nom" value="<?php echo($ligne['nom']); ?>" /></label><br /> 
    <label>Titre de la page : <input name="titre" id="titre" value="<?php echo($ligne['titre']); ?>" /></label><br /> 
    <textarea name="contenu" id="contenu" rows="10" cols="50"><?php echo($ligne['contenu']); ?></textarea><br /> 
    <input type="submit" name="envoi_maj" id="envoi_maj" value="Mettre à jour" /> 
  </fieldset> 
</form> }
<?php 
    } 
mysql_close($db); 

?> 
en tout cas merci de votre patience :wink:

Posté : 04 mars 2006, 15:37
par Truc
eh bien c'est logique puisque tu ne demande plus rien au script apres la validation du formulaire de modification.

Tu peux t'inspirer de ce que tu as déja pour effectuer les opération apres la validation du formulaire, regarde aussi ce tuto

Dans l'action du formualire tu as $_SERVER['PHP_SELF'] ce qui implique que le traitement est sur la même page que le formulaire il faut donc effectuer un nouveau test de validation du formulaire avec l'opérateur ternaire (par exemple) sur un des champs du formulaire de modification et inclure le traitement à l'interieur de ce test.

Posté : 04 mars 2006, 15:47
par Johnstyle
oki je vient de comprendre le code :D

donc en gros maintenant il faut que j'utilise la fonction "update" ?

Posté : 04 mars 2006, 15:58
par Truc
tout à fait, pour la forme voilà la doc pour UPDATE

Posté : 04 mars 2006, 16:40
par Johnstyle
je suis vraiment désoler de vous embeté autant :? mais je n'y arive vraiment pas :cry:


 
	  <!-- 1ere partie -->

	  <?php 
// ... 
/* ... code de connexion et d'exécution de la requête */ 
// ... 
    require_once("config.php"); 
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
     
$sql = "SELECT id,nom FROM js_pages"; 
$exec = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

?> 

<form id="form_maj_pages" action="epage.php" method="post"> 
<select name="listepages" id="listepages" onchange="document.forms['form_maj_pages'].submit();"> 

<?php 
while(($ligne = mysql_fetch_assoc($exec)) != false) 
{ 
?> 

  <option value="<?php echo($ligne['id']); ?>"><?php echo($ligne['nom']); ?></option> 
   
<?php 
} 
mysql_close($db); 

?> 
</select> 
</form> 

<!-- 2eme partie -->


<?php 
$id = isset($_POST['listepages']) ? $_POST['listepages'] : null; 

if($id) 
{ 
    $sql2 = "SELECT `nom`, `titre`, `contenu` ". 
            "FROM js_pages ". 
            "WHERE `id` = ". $id .";"; 
			
    // ... 
    /* ... code de connexion et d'exécution de la requête */ 
    // ... 
	
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 
	
	$exec = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error()); 
	
    if(($ligne = mysql_fetch_assoc($exec)) != false) 
    { 
?> 
<form id="maj_page" action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post"> 
  <fieldset> 
    <label>Nom de la page : <input name="nom" id="nom" value="<?php echo($ligne['nom']); ?>" /></label><br /> 
    <label>Titre de la page : <input name="titre" id="titre" value="<?php echo($ligne['titre']); ?>" /></label><br /> 
    <textarea name="contenu" id="contenu" rows="10" cols="50"><?php echo($ligne['contenu']); ?></textarea><br /> 
    <input type="submit" name="envoi_maj" id="envoi_maj" value="Mettre à jour" /> 
  </fieldset> 
</form> 
<?php 
   
$sq2 = " UPDATE js_pages SET nom=$_POST['nom'], titre=$_POST['titre'], contenu=$_POST['contenu'] WHERE `id` = '. $id .'";
      $req = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());  
 
   
   
    } 
mysql_close($db); 

?> 
merci a vous

Posté : 04 mars 2006, 16:49
par Cyrano
Ta deuxième requête manque de propreté dans les oncaténations :
$sq2 = " UPDATE js_pages ".
       "SET nom= ". $_POST['nom'] .", 
            titre = ". $_POST['titre'] .", 
            contenu= ". $_POST['contenu'] ." ".
       "WHERE `id` = ". $id;
Pourquoi avais-tu (presque) correctement inséré l'identifiant mais pas les autres variables PHP ?

Posté : 05 mars 2006, 16:38
par Invité
Ta deuxième requête manque de propreté dans les oncaténations :
$sq2 = " UPDATE js_pages ".
       "SET nom= ". $_POST['nom'] .", 
            titre = ". $_POST['titre'] .", 
            contenu= ". $_POST['contenu'] ." ".
       "WHERE `id` = ". $id;
merci

Pourquoi avais-tu (presque) correctement inséré l'identifiant mais pas les autres variables PHP ?
sais pas en fait je me suis baser sur les lignes du dessus ^^"

Posté : 05 mars 2006, 17:30
par Cyrano
Je viens de réaliser que la requête que je t'ai proposé en correction va générér une erreur, correction:
$sq2 = " UPDATE js_pages ".
       "SET nom= '". $_POST['nom'] ."',
            titre = '". $_POST['titre'] ."',
            contenu= '". $_POST['contenu'] ."' ".
       "WHERE `id` = ". $id;
Les valeurs envoyées étant de type texte, il est nécessaire que dans la requête SQL générée elles soienentre apostrophes.