éditer et sauvegarder

Eléphanteau du PHP | 33 Messages

04 mars 2006, 02:03

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

Mammouth du PHP | 19672 Messages

04 mars 2006, 09:20

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 33 Messages

04 mars 2006, 13:40

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

Eléphanteau du PHP | 33 Messages

04 mars 2006, 14:27

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> 

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 14:29

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>

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 33 Messages

04 mars 2006, 14:40

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 14:51

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 33 Messages

04 mars 2006, 15:19

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:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 15:37

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 33 Messages

04 mars 2006, 15:47

oki je vient de comprendre le code :D

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 15:58

tout à fait, pour la forme voilà la doc pour UPDATE

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 33 Messages

04 mars 2006, 16:40

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

Mammouth du PHP | 19672 Messages

04 mars 2006, 16:49

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

05 mars 2006, 16:38

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 ^^"

Mammouth du PHP | 19672 Messages

05 mars 2006, 17:30

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: