Voir aussi
Dans la même rubrique :
Javascript : n’oubliez pas Mac OS !
Positionnement fixe... même avec Internet Explorer !
Quand JavaScript est désactivé... 2/2
Conseils pour débuter un site web
Menu dépliant pour les rubriques
Quand JavaScript est désactivé... 1/2
Contrôler l’accès d’une partie du site avec .htaccess
Proposer plusieurs styles pour votre site
Réaliser un formulaire de contact (4/4)
Réaliser un formulaire de contact (3/4)
Réaliser un formulaire de contact (2/4)
Réaliser un formulaire de contact (1/4)
Belles icônes pas chères !
Comment faire migrer son site ?
La trousse du webmasterDu même auteur :
Un serveur dédié pour les nuls
Réaliser un formulaire de contact (5/4)
Information et désinformation en santé
Stratégie Internet
Soigner en ligne, un art impossible ?
Le web structuré et sa présentationMême indexation :
Technique Web
Quiz en PHP 2/3
Créer un forum à l’aide de phpBB
Syndication, comment s’y retrouver
Un Editeur RSS pour votre site 1/2
Un serveur dédié pour les nuls
Belles icônes pas chères !
Réaliser un formulaire de contact (3/4)
Quiz en PHP 3/3
Tri et Histogramme
Quand JavaScript est désactivé... 1/2
La Netiquette des forums
Menu dépliant pour les rubriques
Page contact en PHP 2/3
Javascript : n’oubliez pas Mac OS !
Page Erreur 404 en PHP
Menu de navigation sans JavaScript
Installer un script PHP pour les nuls
Comment faire migrer son site ?
Proposer plusieurs styles pour votre site
Soigner en ligne, un art impossible ?
Publication Spip : forme et typographie
Positionnement fixe... même avec Internet Explorer !
Quand JavaScript est désactivé... 2/2
Editer plusieurs fichiers de syndication 3/3
Un lecteur RSS pour votre site 1/2
Editer plusieurs fichiers de syndication 2/3
Réaliser un formulaire de contact (1/4)
Mise en place d’un forum : une décision qui doit être mûrement réfléchie
Un Editeur RSS pour votre site 2/2
xhtml - 4 : Les entités
Analyser les réponses à une liste de questions
Le web structuré et sa présentation
Editer plusieurs fichiers de syndication 1/3
MARST - Le Moteur Automatisé de Recherche en Santé au Travail
Un lecteur RSS pour votre site 2/2
Créer une liste de QCM
Contrôler l’accès d’une partie du site avec .htaccess
Conseils pour débuter un site web
Gestion d’une rubrique... en attendant SPIP
Etablir un questionnaire statistique en ligne
Initiation au xhtml - 2
Page contact en PHP 1/3
Page contact en PHP 3/3
Utilisation de la classe easyRSS
Initiation au xhtml - 1
Initiation au xhtml - 3 : Rappel sur les pointeurs internet (URI/URL)
Réaliser un formulaire de contact (4/4)
Quiz en PHP 1/3
Réaliser un formulaire de contact (2/4)
Qualité, centres d’intérêt et motivations des participants aux forums médicaux.
La syndication de contenu RSS
Ecrire ce qu’on veut dans SPIP
Lire nos fichiers de syndication
Afficher un fil RSS/Atom sur votre site 1/3
Astuce pour les images fréquemment utilisées
Afficher un fil RSS/Atom sur votre site 2/3
Afficher un fil RSS/Atom sur votre site 3/3
Lecteur RSS/Atom pour votre site 1/2
Lecteur RSS/Atom pour votre site 2/2
Lecture des caractères spéciaux et d’éléments d’un fil RSS/Atom
Syndication pour phpBB
Editez vos flux avec Fil_LE 1/2
Editez vos flux avec Fil_LE 2/2
Création à distance d’un fichier de syndication
Exécuter un Javascript dans une page SPIP
Abandonnons RSS 0.91 !
Des fils RSS 1.0, RSS 2.0 et Atom 1.0 pour votre site SPIP
Accueil
Boite à Outils
Réaliser un formulaire de contact (5/4)
Avoir des données, c’est bien. Les recevoir par mail dès qu’elle sont entrées, c’est mieux. Mais la panacée c’est tout de même la persistance des données.
Il y a deux manières courantes de stocker les données sur Internet : le fichier et la base de donnée.
Nous allons d’abord compléter notre formulaire php pour permettre un stockage dans un fichier texte, puis nous aborderons plus en détail le stockage dans une base de donnée.
Nous avons vu arriver les données dans des variables post dans l’ article précédent.
Ajoutons simplement en bas du fichier précédent ces quelques lignes :
/* enregistrer les coordonnées de l'envoi dans un fichier texte (chmod 755) dans un répertoire admin que l'on protégera avec un fichier .htacces */
/* on définit la date et l'heure de l'entree */
$datedujour = date('d/m/y/H:i:s');
/* on définit le nom et le lieu du fichier qui sera créé pour stocker les infos */
$filename="./admin/monfichier.txt";
/*on écrit dans le fichier les infos, séparées par une pipe (|) et on termine la ligne par un retour à la ligne */
$fl=fopen($filename,"a+");
fwrite($fl,"''$datedujour'|'$nom'|'$prenom'|'$email'|'$sujet'|'$texte'|\n\r");
/* on ferme le fichier */
fclose($fl);
Simple non ? il vous suffira de lire le fichier dans votre navigateur, c’est un fichier texte. Vous ne savez pas créer un fichier htaccess ? C’est là. ou encore mieux : là.
Le stockage en fichier texte est généralement suffisant pour des données de faible taille (quelques méga octets), au delà il faut un système de gestion de base de données.
Habituellement, votre fournisseur d’accès Internet vous a donné les coordonnées de votre serveur mysql.
Bien souvent, le serveur mysql est hébergé sur le même ordinateur que le serveur web et son nom est alors "localhost". C’est par exemple le cas si vous utilisez easyphp sur votre windowsette ou si vous avez installé mysql sur votre mac ou votre station linux préférée.
Votre hébergeur vous aura donné également un nom d’utilisateur et un mot de passe pour accéder à cette base.
Avec easyphp c’est "" et "" : soit rien
ce qui n’est pas forcément la meilleur sécurité sur une machine windows déjà bien défaillante de ce point de vue, si vous avez installé vous même votre serveur c’est vous qui avez donné les noms des bases, d’utilisateur et le mot de passe.
PhpMyadmin, mon ami
Un serveur mysql, c’est un petit programme qui fonctionne en tâche de fond et que l’on interroge avec des requêtes cabalistiques en ligne de commande. Comme beaucoup d’entre nous ne sont pas doués pour les langues et que nous adorons cliquer partout, mère nature (en l’occurence rebaptisée Olivier Mueller pour l’occasion) a mis au point le programme phpmyadmin qui répond justement à ce besoin. La quasi totalité des hébergeurs qui proposent un serveur mysql proposent également d’y accéder via ce programme et c’est tout de suite plus sympathique !
Les utilisateurs mac lui préféreront peut être une application autonome comme CocoaMysql
Connectez vous donc au serveur en question par le web à l’adresse Internet que vous a donné votre hébergeur.
Créons
Arrivés à notre base de données si vide nous ne pouvons que nous réjouir de tout ce que nous allons pouvoir lui faire faire.
Il existe un champ marqué "créer une nouvelle table sur la base votrenomdebase", ça tombe bien : il nous le faut.
Mettez : formulaire_contact, le nombre de champs dont vous aurez besoin (pour notre exemple : 5) et validez.
Une nouvelle page s’offre à vous avec 5 champs (le nombre dépend de ce que vous avez spécifié) non encore paramétrés.
Faisons cela tout de suite :
La première ce sera nom, VARCHAR, 255, not null.
La suivante prenom, VARCHAR, 255, not null
Puis email, VARCHAR, 255, not null
Puis sujet, VARCHAR, 100, not null
Puis texte, TEXT, not null
Et validez ! La table est créée dans votre base de données. Toutes les cases sont donc faites et vous leur avez donné des caractéristiques : VARCHAR c’est une variable de caractère et 255 c’est sa taille maximum, TEXT, c’est un texte... le not null signifie juste que ces champs DOIVENT être remplis : ça tombe bien notre script vérifiait justement que tout était rempli.
Connectons nous à la base ainsi créée
<?php
$dbhost = "localhost";
$dbuser ="votrenomutilisateur";
$dbpass="votremotdepasse";
/* Le '@' indique a l'interpreteur Php de ne pas afficher d'erreur s'il y a lieu. */ @mysql_connect($dbhost,$dbuser,$dbpass) or die("La Connexion a échouée"); echo "la connexion a réussie";
mysql_close();
?>
Enregistrons tout cela dans un fichier php comme : test.php.
Nous avons indiqué les paramètres de connection à la place de ceux indiqués et en lançant le fichier dans notre navigateur, nous savons si la connection a réussi : si le message de réussite s’affiche c’est ok, on passe à la suite sinon...vérifier les données : elles ne sont pas bonnes.
Allez hop : on rentre des données dans la base !
Jusque là, nous nous connectons au serveur..mais pas à la base !
Modifions un peu le script précédent :
<?php
$dbhost = "localhost";
$dbuser ="votrenomutilisateur";
$dbpass="votremotdepasse";
$dbbase="votrenomdebase";
@mysql_connect($dbhost,$dbuser,$dbpass) or die("La Connexion a échouée");
/* On se connecte à la base ou on envoie un message d'erreur */
@mysql_select_db($dbbase) or die("La Base $dbbase n'existe pas");
/* On sélectionne tout les champs de la table formulaire_contact créée plus haut */
$requete = mysql_query("SELECT * FROM formulaire_contact");
/* on récupère TOUT (*) dans la table formulaire_contact et on le met dans une variable */
$resultat = mysql_numrows($requete);
/* on affiche le résultat dans la page web */
echo "Il y a $resultat enregistrements dans votre table";
/* on referme notre connection mysql */
mysql_close();
?>
Facile hein ?
Comment ça ça ne vous suffit pas ? Alors placez ces lignes avant le mysql_close() ;
/* Tant qu'il y a un enregistrement on l'affiche. */
while($resultat != $i) {
/* On récupère la valeur des champs pour la $i ème ligne*/
$nom = mysql_result($requete,$i,"nom");
$prenom = mysql_result($requete,$i,"prenom");
$email = mysql_result($requete,$i,"email");
/* On affiche à l'écran les valeurs */
echo "Nom: $nom ; Prenom: $prenom; e-mail : $email <br/>";
/* On saute une ligne */
$i++;
}
Vous voilà avec l’affichage de ce qu’il y a dans la base
mais euh..comment ça il n’y a rien dedans ?
Evidemment, vous avez mis la charrue avant les boeufs : vous visitez votre base mais...vous ne l’avez pas remplis ! Comment ça c’est ma faute ? Bon ok...allons y.
Entrer des données à partir du formulaire !
Bon, alors c’est toujours la même chose : on se connecte, on envoie les données dans la base et on ferme la base.
<?php
$dbhost = "localhost";
$dbuser ="votrenomutilisateur";
$dbpass="votremotdepasse";
$dbbase="votrenomdebase";
@mysql_connect($dbhost,$dbuser,$dbpass) or die("La Connexion a échouée"); @mysql_select_db($dbbase) or die("La Base $dbbase n'existe pas");
/* On écrit dans la base les variables récupérées du formulaire*/
$enregistrement = "INSERT INTO formulaire_contact (nom,prenom,email,sujet,texte) VALUES ('$nom','$prenom','$email','$sujet',$texte)";
mysql_query($enregistrement);
mysql_close();
?>
Et voilà, tout est inscrit, allez : maintenant refaites votre requête vue au dessus car cette fois la base n’est plus vide 
On peut faire mieux ?
Oui, sans problème. D’abord sortons les données de connection des scripts comme ça on va pouvoir les utiliser sans les réécrire à chaque fois.
Remplacez :
$dbhost = "localhost";
$dbuser ="votrenomutilisateur";
$dbpass="votremotdepasse";
$dbbase="votrenomdebase";
par :
include ("maconfig_sql.php");
et évidemment vous créez un fichier maconfig_sql.php où vous mettez $dbhost etc.
Quoi de mieux ?
Vous voulez modifier des infos dans votre base peut-être ? Alors ça s’écrit comme ça :
mysql_query("UPDATE formulaire_contact SET prenom='John' WHERE email='john@lennon.com'");
print "La Base de données à été mise à jour.";
Voilà, vous avez dit à votre serveur mysql de chercher dans la table "formulaire_contact" l’email john@lennon.com et dans cette ligne de remplacer le prénom par John.
Tout récupérer ? Vous êtes durs avec moi...
$requete = mysql_query("SELECT * FROM formulaire_contact");
/* On entre tout les résultats dans un tableau.*/
while ($tabl_resultat = mysql_fetch_array($requete))
{
/* On affiche à l'écran les valeurs */
echo "Nom : $tabl_resultat[nom] ; Prenom : $tabl_resultat[prenom] ; e-mail : $tabl_resultat[email] ; Sujet : $tabl_resultat[sujetl] ; Texte : $tabl_resultat[texte] ; <br/>";
}
Et voilà, c’est fini pour ce petit apprentissage. Pour aller plus loin, il va vous falloir faire briller vos méninges avec la lecture des liens suivants :
Mysql avec Nexen
Php avec Nexen
Bonne lecture !
bonjour et encore merci pour ces explications qui me permettent petit à petit d’avancer. Problème : le fichier texte(monfichier.txt renommé formcontact.txt) est toujours vide Comme je n’ai pas eu de réponse pour le formulaire de philippe auriol (je n’ai jamais reçu les données envoyées par le formulaire...) j’ai choisi d’opter pour le formulaire d’alain sichel en php. Ok ça tourne. J’ai voulu aller plus loin en stockant ces données dans un fichier texte avant d’aborder la question de la base de données. Problème : le fichier texte est toujours vide, peut être ai je mis le code au mauvais endroit ? où doit il être mis exactement ? voici un bout de mon code : else mail($destinataire,$Titre,$Sujet,$message,"From : $vEmail") ; echo "
Votre message :
" ; echo "
a bien été envoyé. Nous vous remercions et vous répondons prochainement.
\n" ;
?>
<?php
/* Code pour envoyer données dans un fichier texte */
/* on définit la date et l'heure de l'entree */
$datedujour=date('d/m/y/H:i:s');
/* on définit le nom et le lieu du fichier qui sera créé pour stocker les infos */
$filename="./secret/formcontact.txt";
/*on écrit dans le fichier les infos, séparées par une pipe (|) et on termine la ligne par un retour à la ligne */
$fl=fopen($filename,"a+");
fwrite($fl,"'$datedujour'|'$Nom'|'$Prenom'|'$Email'|'$Sujet'|'$Message'|\n\r");
/* on ferme le fichier */
fclose($fl);
?>
merci pour votre réponse hubert
Bonjour,
en principe vous avez les fichiers à télécharger en fin d’article : c’est le mê^mê qui se modifie peu à peu.
Le code est segmenté pour permettre de se l’approprier car il existe des tonnes de formulaires clef en main y compris un d’Alain Sichel sur le site des mmt 
Cordialement
Bonjour,
Je travaille sur un serveur Linux, n’arrive pas à me faire envoyer les données dans ma base via le simple INSERT INTO et le script du formulaire_contact. Reçois toujours une insertion vide.
Pouvez-vous me dire où est l’erreur ?
excellent tutorial ! merci beaucoup... mais je remarque qu’en 1/4 il y avait des boutons "radios", que sont ils devenus en 5/4.
Je cherche a écrire le resultat de case à cocher dans un fichier texte...
Bonjour,
un bouton radio renvoie : true ou false (coché ou pas coché), il suffit donc de voir si ton champ est "true" ou pas dans le résultat de php.
S’il est true tu convertis ça en ce que tu veux pour mysql ou ton fichier texte (classiquement c’est 1 ou 0).
a+
Bonjour,
ah ben non ce n’est pas possible : sinon j’aurais juste écrit "télécharger un formulaire contact" au lieu de "réaliser un formulaire de contact".
Le but est de pouvoir avoir toutes les étapes du processus, de pouvoir les comprendre, pour ainsi modifier le résultat final.
Moralité : si on aime les histoires, il vaut mieux apprendre à lire plutôt que d’attendre qu’on vous en lise une autre.
Bonjour et merci,
J’avoue que je me suis aussi amusé à les écrire car pourquoi faire sérieusement quelque chose que l’on peut faire en s’amusant ?
J’espère qu’à cinquante ans, ça m’amuser toujours de rire de tout et de que je trouverai toujours des personnes de bonne compagnie pour rire avec moi.
Amicalement
Bonjour, Je voudrais savoir s’il y à moyen de faire une récuperation des données dans une page avec un tableaux excel ? D’avance merci.
PS : en gros je voudrais faire un formulaire avec des données numérique qui serais traiter par le fichier xml et renvoyer le total du calcul sur la page de l’utilisateur....
De mysql vers excel : aller dans export avec phpMyAdmin et cliquer CVS Excel
De excel vers mysql : exporter en cvs, dans phpMyAdmin sélectionner la table, aller en bas de la page "importer à partir d’un fichier" sélectionner le fichier et...prier.
A noter que j’ai eut quelques soucis d’imports dans ce dernier cas à cause des retour à la ligne des fichiers textes dont il existe trois variantes \n , \n\r et \r. CocoaMysql et ses options fines d’importation m’ont bien aidé dans ce cas là.
Bonsoir, Je me suis mal exprimer, je voudrais faire un formulaire d’encodage, les données du formulaire s’inscrive dans une base qui renvoie automatiquement un total sur la page de l’utilisateur, mais également les données encoder dans un autre fichier et cela automatiquement.
Exemple il encode 1+2+7 et la base renvoie automatiquement le total de 10, mais aussi l’encodage soit 1+2+7 + le total sur une autre page (dans un tableaux par exemple)
D’avance merci.
Bonjour, Alors d’accord bravo pour ce tuto Pour faire un formulaire ok pour la base ok mais comment faire en sorte que le formulaire écrive ds la base je ne comprend pas
D’avance merci
Bonjour, J’ai relue plusieur fois, mais je ne trouve pas comment dire au formulaire d’écrire les données dans la base ????
Merci d’avance