Formulaire contact avec administration
Informations sur le tutorial
Bonjour.
Ce tutorial est donc un formulaire de contact avec administration.
Durant tout le tutorial, je mettrai des commentaires sur les codes et des explications en-dessous

.
Bonne chance à tous

.
-----
Nous voilà à la table MySQL

.
Donc, voici une table très simple:
Code MYSQL:CREATE TABLE `contact` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`pseudo` VARCHAR(255) NOT NULL,
`message` TEXT NOT NULL,
`email` VARCHAR(255) NOT NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
Ainsi, lorsqu'on traduit, cela donne:
Création de la table "contact" avec comme champ:
- Id de type int qui a pour valeur 11, et qui est en auto-increment.
- Pseudo de type varchar, qui a pour valeur 255.
- Message de type text.
- Email de type varcher, qui a pour valeur 255.
Voilà, rien de bien compliqué, une table des plus banales qui existent

!
-----
Nous voilà enfin au code PHP

.
Pour commencer, on va faire la page contact.php qui contiendra le formulaire et le traitement du formulaire.
Traitement du formulaire.Pour commencer, on traite les données et on les envoie dans la base de données.
Reprenons ce code, petit bout par petit bout :
On se connecte tout d'abord à la base de données.On définit plusieurs variables utiles.Code PHP: //On fait la requête SQL
mysql_query("INSERT INTO contact VALUES ('', '".$pseudo."', '".$message."', '".$email."')") or die (mysql_error ()); Enfin, on exécute la requête SQL.Passons maintenant au formulaire.Code (x)HTLM: <p><em>Vous êtes obligés de mettre votre e-mail avec votre message. Car si vous ne le mettez pas, et que vous avez posé une question, nous ne pourrons pas y répondre.</em></p>
<form action="contact.php" method="post">
<p>
Pseudo: <input class="case" type="text" name="pseudo" /><br/><br/>
Email: <input class="case" type="text" name="email" /><br/><br/>
Message: <br/>
<textarea class="textarea" name="message"></textarea><br/><br/>
<input class="bouton" type="submit" value="Valider" />
</p>
</form>
Je vais pas discuter trois heures sur ce formulaire, je pense que tout le monde le comprend

.
Maintenant il faut faire la page admin.php
Code PHP:<h2>Message de la rubrique contact</h2>
<?php
//Connexion à la base de données.
mysql_connect('host', 'username', 'password');
mysql_select_db('bdd_name');
$reponse = mysql_query("SELECT pseudo,message,email FROM contact ORDER BY id DESC LIMIT 0, 5") or die (mysql_error ());
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_assoc($reponse) )
{
?>
<p>
<u>Pseudo:</u> <?php echo $donnees['pseudo'] ;?> <br/> <u>E-mail:</u> <?php echo $donnees['email'] ;?> <br/> <u>Message:</u> <?php echo $donnees['message'] ;?>
</p><br />
<?php } ?> Les détails du code s:
On se connecte à la base de données.
Code PHP:$reponse = mysql_query("SELECT * FROM pseudo,message,email ORDER BY id DESC LIMIT 0, 5") or die (mysql_error ());
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_assoc($reponse) )
{
?>
<p>
<u>Pseudo:</u> <?php echo $donnees['pseudo'] ;?> <br/> <u>E-mail:</u> <?php echo $donnees['email'] ;?> <br/> <u>Message:</u> <?php echo $donnees['message'] ;?>
</p><br />
<?php } ?> On fait une boucle pour lister les données.
-----
Et oui, je vous ai prévu un petit bonus.
En prime comme quoi vous avez été gentils et que vous êtes vennus voir mon tutorial je vous ai fait une surprise.
Je vais améliorer l'administration en ajoutant un module pour répondre aux messages directement sur le site.
Pour commencer, rajouter ça dans le PHP dans la page admin.php juste après la requète SQL:
Code PHP:if(($_POST['message'] == true) && ($_POST['destinataire'] == true))
{
$destinataire = ''.$_POST['destinataire'].'';
$objet = "Réponse au message que vous avez laissé sur <Nom_Du_Site>";
$messageAdmin = ''.nl2br(htmlspecialchars(trim($_POST['message']))).'';
$from = 'From: <Votre_Email>';
mail($destinataire,$objet,$messageAdmin,$from);
echo'Votre message adressé à '.$destinataire.' a été correctement envoyé.';
} Donc on traite le formulaire que l'on a envoyé plutôt et on envoit un e-mail à la personne concernée.
Et maintenant, dans le mysql_fetch_assoc on met ça à la place:
Code PHP:<p>
<u>Pseudo:</u> <?php echo $donnees['pseudo'] ;?> <br/> <u>E-mail:</u> <?php echo $donnees['email'] ;?> <br/> <u>Message:</u> <?php echo $donnees['message'] ;?><br />
<br />
<b>Répondre à ce message:</b>
<form action="admin.php" method="post">
<u>Message:</u><br />
<textarea class="textarea" name="message"></textarea><br/>
<u>Destinataire:</u><br />
<input type="text" name="destinataire" value="<?php echo $donnees['email'] ;?>" />
<input class="bouton" type="submit" value="Valider" />
</form><br />
-----------------------------------------------<br />
</p> Et voilà.
-----
Bon voilà, au lieu de lister que les 5 derniers messages on va mettre une pagination.
Donc voilà le code complet de la page admin2.php:
Code PHP:<h2>Message de la rubrique contact</h2>
<?php
if(($_POST['message'] == true) && ($_POST['destinataire'] == true))
{
$destinataire = ''.$_POST['destinataire'].'';
$objet = "Réponse au message que vous avez laissé sur <Nom_Du_Site>";
$messageAdmin = ''.nl2br(htmlspecialchars(trim($_POST['message']))).'';
$from = 'From: <Votre_Email>';
mail($destinataire,$objet,$messageAdmin,$from);
echo'Votre message adressé à '.$destinataire.' a été correctement envoyé.';
}
//Connexion à la base de données.
mysql_connect('host', 'root', 'password');
mysql_select_db('bdd_name');
// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM contact');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i )
{
echo '<a href="admin.php?page=' . $i . '">' . $i . '</a> ';
}
if (isset($_GET['page']))
{
$page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On se met sur la page 1 (par défaut)
}
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
$reponse = mysql_query('SELECT pseudo,message,email FROM contact ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_assoc($reponse) )
{
?>
<p>
<u>Pseudo:</u> <?php echo $donnees['pseudo'] ;?> <br/> <u>E-mail:</u> <?php echo $donnees['email'] ;?> <br/> <u>Message:</u> <?php echo $donnees['message'] ;?><br />
<br />
<b>Répondre à ce message:</b>
<form action="admin.php" method="post">
<u>Message:</u><br />
<textarea class="textarea" name="message"></textarea><br/>
<u>Destinataire:</u><br />
<input type="text" name="destinataire" value="<?php echo $donnees['email'] ;?>" />
<input class="bouton" type="submit" value="Valider" />
</form><br />
-----------------------------------------------<br />
</p>
<?php }
mysql_close();
?> Le code par petits bouts:
Code PHP:if(($_POST['message'] == true) && ($_POST['destinataire'] == true))
{
$destinataire = ''.$_POST['destinataire'].'';
$objet = "Réponse au message que vous avez laissé sur <Nom_Du_Site>";
$messageAdmin = ''.nl2br(htmlspecialchars(trim($_POST['message']))).'';
$from = 'From: <Votre_Email>';
mail($destinataire,$objet,$messageAdmin,$from);
echo'Votre message adressé à '.$destinataire.' a été correctement envoyé.';
} Ca c'est l'envois de l'e-mail.La connexion à la BDDCode PHP:// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM contact');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i )
{
echo '<a href="admin.php?page=' . $i . '">' . $i . '</a> ';
}
if (isset($_GET['page']))
{
$page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On se met sur la page 1 (par défaut)
}
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
$reponse = mysql_query('SELECT pseudo,message,email FROM contact ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage); Le système de pagination.Code PHP:// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_assoc($reponse) )
{
?>
<p>
<u>Pseudo:</u> <?php echo $donnees['pseudo'] ;?> <br/> <u>E-mail:</u> <?php echo $donnees['email'] ;?> <br/> <u>Message:</u> <?php echo $donnees['message'] ;?><br />
<br />
<b>Répondre à ce message:</b>
<form action="admin.php" method="post">
<u>Message:</u><br />
<textarea class="textarea" name="message"></textarea><br/>
<u>Destinataire:</u><br />
<input type="text" name="destinataire" value="<?php echo $donnees['email'] ;?>" />
<input class="bouton" type="submit" value="Valider" />
</form><br />
-----------------------------------------------<br />
</p>
<?php } Le listage des données.On ferme la session MySQL et on ferme la balise PHP.
Et voilà

.
Moi mon choix est vite fait entre le système de pagination et le listage des 5 derniers messages !
Je choisis le système de pagination

!
Bon bas ce deuxième bonus est terminé j'espère qu'il vous sera très utile.
-----
Et voilà, ce tutorial est
enfin fini

.
Améliorer ce script Pour améliorer ce tuto vous pouvez:
- Intégrer un design avec de class et des id.
- Ajouter des options sur le formulaire.
- Envoyer un e-mail à l'administrateur lorsqu'un message est envoyé.
- Autres...
J'éspère que ce tuto vous a plu

.
Démonstration du script: Page contact.php
Cliquez iciPage admin.php
Cliquez iciEt la page admin2.php avec le deuxième bonus dessus:
Cliquez ici
15 commentaires
|
> Posté le : 26/06/2007 à 16h31 | Note :  |

Groupe : Membres
|
Bravo!! |
|
> Posté le : 26/06/2007 à 17h59 | Note :  |

Groupe : Admins
|
Y a juste un petit problème avec les lignes. Tu as juste oublié un nl2br() avant l'envoi des messages Sinon super ! Bravo |
|
> Posté le : 27/06/2007 à 17h35 | Note : Aucune |

Groupe : Membres
|
Merci.
Pour le nl2br, peux-tu le rajouter Elbi s'il te plait ? Merci . |
|
> Posté le : 28/06/2007 à 00h08 | Note :  |

Groupe : Membres
|
Très sympa, bravo. |
|
> Posté le : 15/07/2007 à 01h14 | Note : Aucune |

Groupe : Membres
|
Super c'est ce que je cherchais ! Merci beaucoup |
|
> Posté le : 17/07/2007 à 14h08 | Note : Aucune |

Groupe : Admins
|
Citation: Francky03 Merci. Pour le nl2br, peux-tu le rajouter Elbi s'il te plait ? Merci  .
Voilà Mais il faudrais maintenant que tu modifie ta démo avec les nouveaux codes |
|
> Posté le : 23/07/2007 à 01h01 | Note : Aucune |

Groupe : Membres
|
Bravo super tuto j'aime beaucoup |
|
> Posté le : 23/07/2007 à 01h02 | Note :  |

Groupe : Membres
|
oups j'allais oublié la note |
|
> Posté le : 08/08/2007 à 14h58 | Note :  |

Groupe : Membres
|
Bonjour,
cela fait quelques jours que j'ai décidé d'apprendre PHP et par la même occasion SQL, et je me suis dit qu'un formulaire de contact serait une bonne façon d'apprendre. Disons que la théorie me répulse au plus haut point, je préfère bien plus la pratique que je comprends.
Revenons-en à nos moutons. J'ai donc testé ton formulaire de contact, je me suis en partie basé dessus pour faire le mien, et quand vient l'étape de la pagination, un évènement étrange se produit : ma page "admin.php" contient "Page : 1111111111111111111111111111111". La liste de "1" se poursuit indéfiniment.
J'ai donc repris à zéro, en copiant/collant bêtement le contenu de ton tutoriel, la meilleure façon donc de voir si j'ai foiré quelque part, le même effet se produit.
Y aurait-il une erreur quelque part sur ce tuto ? Mon hébergeur emploie PHP5 et MySQL donc à ce niveau ça me semble correct.
Bref, si quelqu'un pouvait m'aider, ça serait bien sympa. J'aime pas rester sur une erreur et ça pourrait m'aider à comprendre pour éviter de reproduire la bourde à l'avenir.
Merci d'avance. |
|
> Posté le : 08/08/2007 à 15h44 | Note :  |

Groupe : Membres
|
C'est re-moi !
En cherchant ailleurs, on a fini par m'expliquer la cause du problème. L'instruction for provoque une boucle infinie (ça j'avais compris), provoquée par l'absence de "++". Donc, ton code doit être modifié de cette façon :
Code PHP: // Puis on fait une boucle pour écrire les liens vers chacune des pages echo 'Page : '; for ($i = 1 ; $i <= $nombreDePages ; $i++ ) { echo '<a href="admin.php?page=' . $i . '">' . $i . '</a> '; }
Très chouette tuto, du coup. Et je peux enfin reprendre le dev de ma propre version. |