Le formulaire va jouer en fait deux rôles : l'ajout d'une nouvelle News ou bien la modification d'une News existante que l'on sélectionne dans la table des titres affichée.
Voici ta page essai.php qui affiche les News existants. Je l'appelle : afficherNews.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>Afficher News</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 * from news Order By date_news DESC ");
?>
<html>
<body>
<table>
<?php
while ($result && $row=mysql_fetch_array($result))
{
$id = $row['id'];
$titre= stripslashes($row['titre']);
//titre affiché avec lien pour faciliter la gestion de cette News (le lien appelle la page: gererNews.php et lui passe l'action MettreAjour et l'id)
echo "<tr><td><a href=\"gererNews.php?action=MettreAjour&id=". $id . "\" title=\"Cliquez pour modifier\">" . $titre . "</a></td></tr> ";
}
mysql_close($Flag1);
?>
</table>
<br>
<br>
<A HREF="index.html">retour</A> <br>
</body>
</html>
Sur chaque titre le lien hypertexte, une fois cliqué, renvoie vers la page gererNews.php et lui passe 2 paramètres : action=MettreAjour et id=l'id de la News à modifier. Cette page doit donc afficher les données de la News indiquée par l'id dans les zones de saisie du formulaire pour permettre leur modification.Mais on a dit que ce formulaire "gererNews.php" doit jouer aussi le rôle d'ajout d'une nouvelle News. Pour réaliser ce double rôle on va donc remplir les zones de saisie en cas de modification et les laisser vides en cas d'ajout. En ajoutant 2 boutons submit : Modifier et Ajouter, le formulaire peut envoyer à chaque fois une de ces actions pour permettre au programme de savoir s'il doit exécuter une requête d'ajout (INSERT) ou de modification (UPDATE).
Voici une proposition de cette conception de la page : gererNews.php
<!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>Gérer News</title>
<style type="text/css">
<!--
body,td,th {
color: #000;
}
body {
background-color: #9CF;
}
-->
</style></head>
<body>
<?php
//Détection des paramètres GET ou POST
if (isset ($_GET['action'])) $action = $_GET['action']; //si action envoyée par l'url via un appel externe
if (isset ($_POST['action'])) $action = $_POST['action']; //si action envoyée par le formulaire (prioritaire)
if (isset ($_GET['id'])) $id = $_GET['id']; //si id envoyé par l'url via un appel externe
if (isset ($_POST['id'])) $id = $_POST['id']; //si id envoyé par le formulaire (prioritaire)
//Détecter s'il s'agit d'un appel interne de modification d'une News modifiée par le formulaire (POST)
if (isset ($action) && isset ($id) && $action=='Modifier'){
// Modifier les données de la News dans la base
//========connection==========
$Flag1=mysql_connect("localhost","root","");
$Flag2=mysql_select_db("test");
//==========UPdate_news=========
$titre= addslashes($_POST['titre']);
$texte = addslashes($_POST['texte']);
$date_news = $_POST['date_news'];
if (mysql_query( 'UPdate news SET titre="'. $titre . '", texte ="'. $texte . '", date_news="'. $date_news . '" WHERE id=' . $id ))
{
echo 'Modification effectuée';
}
else { echo 'Modification non effectuée'; }
mysql_close($Flag1);
}
//Détecter s'il s'agit d'un appel interne d'ajout d'une nouvelle News envoyé par le formulaire (POST)
if (isset ($action) && $action=='Ajouter'){
// Ajouter les données de la News dans la base
//========connection==========
$Flag1=mysql_connect("localhost","root","");
$Flag2=mysql_select_db("test");
//==========INSERT=========
// id auto-incrémenté
$titre= addslashes($_POST['titre']);
$texte = addslashes($_POST['texte']);
$date_news = $_POST['date_news'];
if (mysql_query( 'INSERT INTO news (titre, texte, date_news) VALUES ("'. $titre . '", "'. $texte . '", "'. $date_news . '")' ))
{
echo 'Ajout effectué';
}
else { echo 'Ajout non effectué'; }
mysql_close($Flag1);
}
//Détecter s'il s'agit d'un appel interne de suppression d'une News existante envoyé par le formulaire (POST)
if (isset ($action) && isset ($id) && $action=='Supprimer'){
// Supprimer la News dans la base
//========connection==========
$Flag1=mysql_connect("localhost","root","");
$Flag2=mysql_select_db("test");
//==========DELETE=========
$titre= addslashes($_POST['titre']);
$texte = addslashes($_POST['texte']);
$date_news = $_POST['date_news'];
if (mysql_query( 'DELETE FROM news WHERE id='. $id ))
{
echo 'Suppression effectuée';
}
else { echo 'Suppression non effectuée'; }
mysql_close($Flag1);
}
//Détecter s'il s'agit d'un appel externe (URL: GET) de modification d'une New (dans ce cas on reçoit une action=MettreAjour et un id d'une News)
if (isset ($action) && isset ($id) && $action=='MettreAjour'){
// trouver les données de la News à mettre à jour
//========connection==========
$Flag1=mysql_connect("localhost","root","");
$Flag2=mysql_select_db("test");
//==========selection=========
$result=mysql_query( 'SELECT * FROM news WHERE id=' . $id );
if ($result && $row=mysql_fetch_array($result))
{
$id = $row['id'];
$titre= stripslashes($row['titre']);
$texte = stripslashes($row['texte']);
$date_news = $row['date_news'];
}
else { echo 'Le titre que vous cherchez n\'existe pas'; exit(); } //Sortie
mysql_close($Flag1);
}
?>
<form method="post" enctype="multipart/form-data">
<p>Titre : <br /><input type="text" name="titre" <?php if (isset($titre)) echo 'value="'.htmlspecialchars(stripslashes($titre)).'"'; ?> /></p>
<p>date : <br /><input type="text" name="date_news" <?php if (isset($date_news)) echo 'value="'. ($date_news).'"'; ?> /></p>
<p>Texte : <br /><textarea name="texte"><?php if (isset($texte)) echo htmlspecialchars(stripslashes($texte)); ?></textarea></p>
<?php
// afficher l'id caché pour les cas de modification et suppression
if (isset ($id)) {
echo '<input type="hidden" name="id" value="' . $id . '" />';
}
?>
<input name="action" type="submit" value="Ajouter" />
<input name="action" type="submit" value="Modifier" />
<input name="action" type="submit" value="Supprimer" />
<input type="button" value="Afficher News" onclick="window.location.href='afficherNews.php'" />
</form>
</body>
</html>
Voilà, donc en tout on a 2 pages : gererNews.php et afficherNews.phpA+