Comment rendre la page d'accueil dynamique?

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Nous allons voir comme faire pour écrire sur la page d'accueil directement depuis l'interface d'administration et par la même occasion rendre les méta tags dynamique ... c'est à dire, avoir la possibilité de modifier à souhait le titre, la description et le contenu de la page d'accueil.

Dans un premier il nous faut créer une table que l'on va nommer ACCUEIL et contiendra les champs id, titre, description et texte.
--
-- Structure de la table `ACCUEIL`
--
 
CREATE TABLE IF NOT EXISTS `ACCUEIL` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titre` text collate latin1_general_ci NOT NULL,
  `description` text collate latin1_general_ci NOT NULL,
  `texte` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
 
--
La table mis en place, nous intervenons maintenant dans le fichier index.php (celui qui se trouve à la racine du site) dans lequel nous allons créer notre requête au tout début du fichier : 
<?php
//On se connecte à la base de données 
include('connexion_bd.php'); 
 
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe"); 
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier connexion_bd.php.');
 
//On sélectionne les données
$index = mysql_query("SELECT titre,description,texte FROM ACCUEIL ORDER BY id ASC");
//On compte les données
$verification = mysql_num_rows($index);
//On boucle
while($accueil = mysql_fetch_array($index))
{
	$titre=$accueil['titre'];
	$description=$accueil['description'];
	$contenu=$accueil['texte'];
}
?>
Jusque là, rien de fantastique ^^ et vous remarquerez que l'on ne sélectionne pas d'identifiant (id) et c'est normal puisque l'enregistrement et les modifications à venir vont se fairent sur un seul et unique id. Ceci dit, nous modifions maintenant la balise <title>, la méta description et la balise H1 pour les rendrent dynamique : 
<title><?php 
if(isset($titre)){
	echo $titre;
}
?></title>
 
<meta name="Description" content="<?php 
if(isset($description))
{
echo $description;
}
?>" /> 
<h1><?php 
if(isset($titre)){
	echo $titre;
}
?></h1> 
 Puis on insère notre contenu : 
<?php 
//Si le titre ou la description sont vides, on informe par un message d'alerte
if(empty($verification))
{
	echo '<big style="color:red">Attention, le titre et/ou la description de la page  d\'accueil est vide!! Veuillez les remplir SVP.</big><br/>';
}
//On affiche le contenu
if(isset($contenu))
{
	echo $contenu;
}
?>
Bon, on peut faire directement un echo $contenu mais comme tout le monde ne connaît pas l'importance de saisir un titre et une description unique par page pour le référencement, on indique alors un bon gros message d'alerte sur la page .

Voila, on en a finit avec la page d'accueil et on passe maintenant à la création d'une nouvelle page dédié à l'enregistrement et à la gestion de la page d'accueil. On créé une nouvelle page à partir de notre fichier "gabarit.php" que l'on va nommer "admin-index.php" et qui sera enregistré dans le dossier admin. Pour info, ce fichier va ressembler de base au fichier "ajouter-page.php" sur le quelle on va supprimer tout ce qui concerne les catégories et l'adapter pour qu'il enregistre les données dans la bonne table "ACCUEIL".

Ce fichier doit :
  1. Enregistrer nos données.
  2. Modifier nos données.
  3. Ré afficher nos données si il y a un enregistrement.
  4. Nous alerter si le titre ou la description est vide.
En résumé, notre code pour l'enregistrement doit dabord vérifier si il y a quelque chose en BD. Si il n'y a rien, on enregistre (INSERT). Si il y a quelque chose, on modifie (UPDATE).
Pour la partie formulaire, c'est un peut la même chose. Si il y a quelque chose, on affiche nos données. Si il n'y a rien, bhaaa on affiche rien .

Le fichier admin-index.php dans son intégralité : 
<!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" lang="fr-fr">
 
<head>
 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>Gestion de la page d'accueil du site</title> 
<link href="../style.css" rel="stylesheet" type="text/css"/> 
<script type="text/javascript" src="../ckeditor/ckeditor.js"></script>    
</head>   
 
<body>   
<div id="moncadre">   
<?php include('menu.php');?>   
<div class="cadrecentrale">   
<h1>Gestion de la page d'accueil du site</h1>
<?php
// on se connecte à la base de données
include('../connexion_bd.php');
 
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier connexion_bd.php.');
//Traitement du formulaire
if(isset($_POST["Valider"]))
{
	$titre = htmlspecialchars(stripcslashes(trim($_POST["titre"])));
	$description = htmlspecialchars(stripcslashes($_POST["description"]));
	$contenu = stripcslashes($_POST["contenu"]);
 
	//Vérification du formulaire
	if(empty($titre)){
		$alerte0 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de titre.</div>';
	}
	else if(empty($description)){
		$alerte1 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de description.</div>';
	}
	//Si tout est ok
	else
	{
		//on vérifie si il y a un enregistrement
		$verif = mysql_query("SELECT * FROM ACCUEIL");
		//on voie si il y a quelque chose
		if(mysql_num_rows($verif) == 0)
		{
			//Si il n'y a rien, on enregistre les données
			$result = mysql_query("INSERT INTO ACCUEIL VALUES ( '', '".mysql_real_escape_string($titre)."', '".mysql_real_escape_string($description)."', '".mysql_real_escape_string($contenu)."' ) ");
			//Si il y a une erreur, on crie ^^
			if (!$result) {
				die('Requête invalide : ' . mysql_error());
			}
			else{
				//Si tout est ok, on informe le webmaster
				$message_ok = '<div class="erreur"><a name="ok"></a><b>Page enregistr&eacute;e avec succ&egrave;s!</b></div>';
			}
		}
		//Sinon si la 1ere requête retourne 0, c'est qu'il y a 1 enregistrement
		else if(mysql_num_rows($verif) == 1)
		{
			//On modifie les données de l'enregistrement
			$result = mysql_query("UPDATE ACCUEIL SET  titre='".mysql_real_escape_string($titre)."',  description='".mysql_real_escape_string($description)."', texte='".mysql_real_escape_string($contenu)."' WHERE id = 1");
			//Si il y a une erreur, on crie ^^
			if (!$result) {
				die('Requête invalide : ' . mysql_error());
			}
			else{
				//Si tout est ok, on informe le webmaster
				$message_ok = '<div class="erreur"><a name="ok"></a><b>Page enregistr&eacute;e avec succ&egrave;s!</b></div>';
			}
		}
		//On ferme else
	}
	//On ferme if(isset($_POST["Valider"]))
}
 
//On sélectionne les données pour les ré afficher dans le formulaire
$index = mysql_query("SELECT titre,description,texte FROM ACCUEIL WHERE id=1");
 
while($accueil = mysql_fetch_array($index))
{
	$titre=$accueil['titre'];
	$description=$accueil['description'];
	$contenu=$accueil['texte'];
}
?>
 
<?php 
if(isset($message_ok))
{
	echo $message_ok;
}
?>
<form action="#ok" method="post">
<?php 
if(isset($alerte0))
{
	echo $alerte0;
}
?>
<p>Titre de la page d'accueil:<br/>
<input name="titre" size="65" value="<?php 	
if(isset($titre) AND !empty($titre))
{
echo $titre;
} 
else if(!empty($_POST["titre"]))
{ 
echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES)); 
} ?>" type="text"/>
</p> 
<?php 
if(isset($alerte1))
{
	echo $alerte1;
}
?> 
<p>Description de la page d'accueil:<br/>
<textarea name="description" rows="10" cols="50" ><?php
if(isset($description) AND !empty($description))
{
	echo $description;
}
else if(!empty($_POST["description"])) 
{
	echo stripcslashes(htmlspecialchars($_POST["description"],ENT_QUOTES));
}
?></textarea></p>
<?php 
if(isset($alerte2))
{
	echo $alerte2;
}
?>
<p>Contenu de la page d'accueil:<br/> 
<textarea name="contenu" rows="10" cols="50" >
<?php 
if(isset($contenu) AND !empty($contenu)) 
{
	echo $contenu;
} 
else if(!empty($_POST["contenu"])) 
{ 
	echo stripcslashes(htmlspecialchars($_POST["contenu"],ENT_QUOTES)); 
} 
?>
</textarea> 
<script type="text/javascript"> 
CKEDITOR.replace( 'contenu' ); 
</script></p>   
<p> 
<input name="Valider" value="Valider" type="submit"/> 
<input name="Effacer" value="Effacer" type="reset"/> 
</p> 
</form>   
</div>   
<?php include('../footer.php');?>   
</div>   
</body>   
</html>
 
Petite explication concernant le formulaire :

Pour afficher le contenu de la table ACCUEIL dans le formulaire, on fait une simple requête comme vous le savez . On va juste voir rapidement comment on ré affiche les données pour bien comprendre la bête :  
<input name="titre" size="65" value="<?php 	
if(isset($titre) AND !empty($titre))
{
echo $titre;
} 
else if(!empty($_POST["titre"]))
{ 
echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES)); 
} ?>" type="text"/>
 
C'est très simple, dans un premier temps on vérifie si la variable existe et si elle contient quelque chose et si tel est le cas on l'affiche : 
if(isset($titre) AND !empty($titre))
{
echo $titre;
} 
Si la requête contient un gros "kedal", on ré affiche les données saisies par l'utilisateur (vous) au cas ou le formulaire plante ou génére une erreur (ce qui évite de tout ré écrire une seconde fois) :
else if(!empty($_POST["titre"])) {
echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES));
}
Voila, reste plus qu'à faire un simple lien depuis le fichier menu.php du dossier admin vers cette nouvelle page :
<li><a class="menu" title="Gestion page d'accueil" href="admin-index.php">Gestion page 
d'accueil</a></li>
THE END ^^...

Voir/déposer un commentaire (19) | Signaler un problème