IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

PHP : Le tutoriel pour grands débutants pressés

Image non disponible

PHP : Le tutoriel pour grands débutants pressés

Date de publication : 17 janvier 2009


VI. PHP ETAPE 6
VI-1. Les bases de données : introduction
VI-1-a. A quoi ça sert ?
VI-1-b. Comment ça marche ?
VI-2. Alimenter sa base via PHP
VI-2-a. Présenter le formulaire
VI-2-b. Se connecter à notre base via PHP
VI-2-c. Pour travailler proprement (Généralités)
VI-2-d. Insérer des données dans notre base via PHP
VI-2-e. On récapitule le code ?
VI-3. TP6
VI-4. Correction du TP6


VI. PHP ETAPE 6


VI-1. Les bases de données : introduction


VI-1-a. A quoi ça sert ?

Pour rappel, le code HTML ne sert qu'à l'affichage.
Le code PHP sert à créer un html dynamique jusqu'à un certain point, en tout cas, PHP peut organiser à chaque chargement de votre page web le html de façon différente.

Cependant, PHP n'a pas le "pouvoir" de mémoriser des données entre deux chargements de page (en dehors de celles que vous transmettez à chaque fois d'une page web à l'autre, via un formulaire html !)...

Alors si vous voulez conserver sur la durée les données entrées par les visiteurs de votre site via votre formulaire, de façon automatique et sans plus vous occuper de rien, il va falloir encore intégrer de bonnes notions des bases de données.



VI-1-b. Comment ça marche ?

Cliquez sur l'icône de WampServer, puis cliquez sur phpMyAdmin.


Accès à phpMyAdmin

C'est le troisième et dernier lien que nous suivrons sur wampServer, après wwwdirectory (le code) et localhost (le test comme si on était sur le web).

C'est ici, sur phpMyAdmin, que vous allez gérer tout ce qui concerne les bases de données.

Une base de données, qui possède un nom, c'est l'ensemble des tables qui recensent vos données.
Une table, qui a un nom également, c'est une structure qui organise vos données de la façon citée en exemple ci-dessous.

Nous allons commencer par une base qui ne comporte qu'une seule table, pour faire simple.

Cliquez le bouton "Créer une base", nommez-la MaBase, puis cliquez "Créer".
Créez une nouvelle table "Utilisateurs" avec 5 champs...
Ils se découperont ainsi (ce qui nous intéresse surtout, c'est le type des champs)...


Nos 5 champs et leur type respectif
  • ID, qui est un INT (integer : entier), cochez AI (auto-incrémenté pour que phpMyAdmin gère ce champ tout seul)
  • pseudo qui est un VARCHAR (caractères dont le nombre varie), entrez 15 à taille/longueur (nombre maximum de carcactères autorisés)
  • sexe qui est un CHAR (caractères dont le nombre est fixe), entrez 1 à taille/longueur (nous mettrons simplement G ou F)
  • age qui est un INT, entrez 3 à taille (le nombre de chiffres). Pour un âge, c'est sympa de penser aux centenaires...
  • et enfin dateInscription (sélectionnez date)...
Ca y est ? Votre table est créée avec sa structure ?

Maintenant, on va la remplir "à la main", enfin, pour les 5 premières personnes.

A gauche dans votre arborescence, sélectionnez votre table 'inscriptions'.
Vous voyez la structure de votre table qui s'affiche... sous forme de tableau.
Cliquez 'Insérer' dans le menu du haut... Par défaut, phpMyAdmin vous donne un formulaire d'insertion deux entrées par deux entrées...

Laissez toujours le champ ID vide. On a dit qu'il se remplirait automatiquement.
Et remplissez ainsi vos 5 insertions :
Si les dates vous paraissent bizarres, c'est qu'elles sont à l'anglaise (année/mois/jour)...


Nos 5 premiers enregistrements
  • Lili F 18 2009/01/02
  • Toto G 13 2008/01/02
  • Loulou G 25 2008/12/30
  • Zézette F 20 2009/01/02
  • Mimi F 15 2009/01/10
On dira que dans votre table Utilisateurs (qui compte donc 5 champs), il y a 5 enregistrements, 5 personnes enregistrées autrement dit, avec toutes leurs données.
La seule façon certaine de les distinguer, c'est leur ID (identification data).

Pour le reste, deux personnes peuvent avoir le même pseudo, le même sexe, ou la même date d'inscription...

Pour convoquer un enregistrement, ou un morceau d'enregistrement, on passera donc toujours par l'ID.

Ma première table


Le langage qu'on va maintenant utiliser, pour faire des requêtes ou des insertions ou des suppressions dans notre base, se nomme mysql.
Il est assez intuitif et pour l'étude sommaire que nous allons en faire, il consistera en cinq-six mots d'anglais de base...


Je veux récupérer le jour d'inscription de Zézette ?

La requête sera la suivante :

SELECT dateInscription FROM Utilisateurs WHERE ID="4"
(sélectionne le champ dateInscription dans la table Utilisateurs qui correspond à l'ID 4)

Je veux récupérer toutes les infos sur les filles ?

SELECT * FROM Utilisateurs WHERE sexe="F"
(sélectionne tous les enregistrements dans la table Utilisateurs qui correspondent au sexe F)

Je ne veux récupérer que les pseudos des filles ?

SELECT pseudo FROM Utilisateurs WHERE sexe="F"
(sélectionne tous les pseudos dans la table Utilisateurs qui correspondent au sexe F)

Voilà pour l'essentiel des requêtes de base en mysql, nous verrons au cours de la suite quelques syntaxes supplémentaires...


VI-2. Alimenter sa base via PHP

De même que PHP vous permet de créer un langage html plus dynamique et personnalisé, PHP vous permet maintenant de créer vos requêtes mysql de façon à automatiser l'alimentation de vos bases.

Voici un exemple très concret :

Vous allez créer un formulaire qui permettra de continuer à remplir automatiquement votre base de données MaBase, plus précisément sur votre table Utilisateurs, table que pour l'instant vous avez commencé à remplir à la main, via l'interface PHPMyAdmin.


En voici les étapes :


VI-2-a. Présenter le formulaire

Sur un fichier form.php, entrez ce code :
Notre formulaire de saisie utilisateur

                    <html>
                        <head>
                            <title>Formulaire de saisie utilisateur </title>
                        </head>
                        <body>
                        <h1>Inscrivez-vous !</h1>
                        <h2>Entrez les données demandées :</h2>
                        <form name="inscription" method="post" action="form.php">
                            Entrez votre pseudo : <input type="text" name="pseudo"/> <br/>
                            Garçon ou fille ? 	<input type="radio" name="sexe" value="G"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br/>
                            Entrez votre age : <input type="text" name="age"/><br/>
                            <input type="submit" name="valider" value="OK"/>
                        </form>
                        </body>
                    </html>
                    


Vous remarquerez que nous ne demandons que 3 éléments d'identification à l'utilisateur, alors que la base en comporte 5 par enregistrement :
C'est normal, le premier champ de notre base est rempli automatiquement par mysql et le dernier, la date d'inscription, nous allons le remplir aussi automatiquement, via PHP cette fois, en entrant la date du jour dès que l'utilisateur clique 'OK'.

Vous remarquerez que pour des données aussi peu variées que le sexe de la personne, nous avons préféré contrôler la saisie en proposant à l'utilisateur deux boutons radio.
Pour limiter les erreurs dans la base sql, bien songer à proposer des listes déroulantes ou des cases à cocher quand le champ s'y prête...


Qu'allons-nous faire ensuite quand l'utilisateur va cliquer "ok" ?


VI-2-b. Se connecter à notre base via PHP

A chaque fois que nous voulons que PHP se connecte à notre base, on lui donnera une série d'instructions...
Donc on va commencer par coller les paramètres de connexion dans une fonction pour ne pas trop rabâcher dans notre code...

On crée donc un fichier fonctions.php, dans lequel (entre autres) on insère la fonction suivante :

Ma fonction de connection

                    <?php
                    function connectMaBase(){
                        $base = mysql_connect ('localhost', 'root', '');  
                       	mysql_select_db ('MaBase', $base) ;
                    }
                    ?>
                    


Vous n'avez rien à modifier...
Sachez simplement que '' est votre mot de passe, laissé vierge ici comme il l'est par défaut dans votre configuration de départ.

Pour expliquer maintenant, cette fonction crée une variable $base qui prépare la commande de connection à votre base avec le nom du serveur (ici localhost), le nom de l'utilisateur (ici root qui signifie administrateur de votre propre base locale, en d'autres termes, root, c'est le patron) et enfin le mot de passe.

La ligne suivante lance la commande de sélection de votre base (où l'on entre donc le nom votre base), puis on reprend la variable qui contient toute la commande de connexion...

Bien entendu, pour convoquer la fonction que vous venez de créer sur fonctions.php, il vous faudra sur form.php faire un include de ce fichier fonctions.php, puis lancer la fonction au moment opportun par la ligne suivante :

                    <?php
                    connectMaBase();
                    ?>
                    

VI-2-c. Pour travailler proprement (Généralités)

Retenez bien ceci :
quand on rédige une commande d'insertion sql via PHP, on préfère procéder ainsi, qui paraît un peu compliqué au début, mais simplifie toute la compréhension ensuite.

Insérer une donnée sql via PHP, l'ossature
  1. On se connecte à la base (en utilisant notre fonction de connexion toute prête).
  2. On prépare la commande sql en la stockant dans une variable PHP du type $sql (pour langage sql);
  3. On la lance.
  4. On ferme la connexion.

VI-2-d. Insérer des données dans notre base via PHP

Bien entendu, le code suivant ira sur le fichier form.php dans notre condition => si l'utilisateur a cliqué OK

Insérer une donnée sql via PHP, le code

                    <?php
                    //On récupère les valeurs entrées par l'utilisateur :
                    $pseudo=$_POST['pseudo'];
                    $age=$_POST['age'];
                    $sexe=$_POST['sexe'];
                    
                    //On créée une variable date du jour grâce à la fonction date() de PHP
                    $today = date("d.m.y");
                    
                     //On se connecte
                    connectMaBase();
                    
                    //On prépare la commande sql d'insertion
                    	$sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")';
                    
                    /*on lance la commande (mysql_query) et au cas où, 
                    on rédige un petit message d'erreur si la requête ne passe pas (or die) 
                    (Message qui intègrera les causes d'erreur sql)*/
                    mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
                    
                    // on ferme la connexion
                    mysql_close();
                    ?>
                    

C'est probablement cette partie qui vous semble la plus complexe :

                    <?php
                    //On prépare la commande sql d'insertion
                    	$sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")';
                    ?>
                    

La première valeur est laissée en blanc car c'est l'ID auto-incrémenté...
Si vous l'oubliez, ce blanc, il vous renverra un message d'erreur sql disant que le nombre de données insérées ne coïncident pas avec le nombre de champs... en anglais.

Ensuite il faut gérer au sein des guillemets simples (apostrophes) tout ce qui est PHP
et au sein des guillemets doubles tout ce qui est sql...

On place les guillemets au sein des apostrophes pour les afficher dans le sql, on place les variables 'nues' dans PHP.


VI-2-e. On récapitule le code ?

fonctions.php

                    function connectMaBase(){
                        $base = mysql_connect ('localhost', 'root', '');  
                       	mysql_select_db ('MaBase', $base) ;
                    }
                    
form.php

                    <?php
                        include("fonctions.php");
                    ?>
                    <html>
                        <head>
                            <title>Formulaire de saisie utilisateur </title>
                        </head>
                        <body>
                            <h1>Inscrivez-vous !</h1>
                            <h2>Entrez les données demandées :</h2>
                            <form name="inscription" method="post" action="form.php">
                                Entrez votre pseudo : <input type="text" name="pseudo"/> <br/>
                                Garçon ou fille ? 	<input type="radio" name="sexe" value="G"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br/>
                                Entrez votre age : <input type="text" name="age"/><br/>
                                <input type="submit" name="valider" value="OK"/>
                            </form>
                            <?php
                            if (isset ($_POST['valider'])){
                            	//On récupère les valeurs entrées par l'utilisateur :
                            	$pseudo=$_POST['pseudo'];
                            	$age=$_POST['age'];
                            	$sexe=$_POST['sexe'];
                            	//On construit la date d'aujourd'hui
                            	//strictement comme sql la construit
                            	$today = date("y-m-d");
                            	 //On se connecte
                            	connectMaBase();
                            
                            	//On prépare la commande sql d'insertion
                            	$sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")'; 
                            
                            	/*on lance la commande (mysql_query) et au cas où, 
                                on rédige un petit message d'erreur si la requête ne passe pas (or die) 
                                (Message qui intègrera les causes d'erreur sql)*/
                            	mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
                            
                            	// on ferme la connexion
                            	mysql_close();
                            }
                            ?>
                        </body>
                    </html>
                    

Je vous laisse le plaisir de tester et d'alimenter votre base en saisissant des données dans votre formulaire...

Magique non ? Mieux encore, informagique...

Ne vous étonnez pas si quand vous cliquez sur OK, il semble ne rien se passer.
Ne cliquez pas trois fois et allez voir votre table utilisateurs.

Ca a très bien fonctionné. S'il semble ne rien se passer, c'est que nous avons simplement géré dans notre code l'insertion de données, sans penser à avertir l'utilisateur que son action a bien eu l'effet escompté.

Nous verrons cela plus tard... dans le TP par exemple ?


VI-3. TP6

SANS COPIER COLLER et en ne regardant que ça et là des parties du cours :

Vous proposerez un formulaire d'abonnement (abonnement.php) du type

Votre formulaire

                POUR VOUS ABONNER :
                
                Veuillez saisir vos données d'identité :
                Bouton radio : Monsieur Madame ou Mademoiselle
                Nom :
                Prénom :
                Age :
                Adresse :
                Code Postal (limiter dans le html la saisie à 5 chiffres) :
                Ville :
                Numéro de téléphone (limiter dans le html la saisie à 10 chiffres) :
                
                
                Veuillez cocher le magazine choisi (un seul choix possible donc bouton radio) :
                
                - J'ai la main verte.
                - J'ai le pied marin.
                - J'ai l'oeil vif.
                - J'ai la rate qui se dilate.
                
                Valider
                

Au clic sur valider de la part de l'utilisateur, vous ferez deux choses simultanées :

1) Afficher ceci

'Pour rappel, vous avez saisi :'
toutes les données entrées par l'utilisateur, présentées proprement, du genre

'VOUS ETES :'
'VOUS AVEZ CHOISI :'
'Merci de vous être abonné à ce magazine !'

2) Insérer dans une table Abonnes que vous aurez créée auparavant via phpMyAdmin toutes les données entrées par l'utilisateur.

PS : vous placerez dans le fichier fonctions.php la fonction de connexion bien entendu.

Bon courage !


VI-4. Correction du TP6

Veuillez cliquer sur le symbole à droite pour découvrir la solution quand vous aurez fini.
fonctions.php

                <?php
                function connectMaBase(){
                $base = mysql_connect ('localhost', 'root', '');  
                   	mysql_select_db ('MaBase', $base) ;
                }
                ?>
                

Dans phpMyAdmin, voici à quoi doit ressembler votre structure (de plus, il faut cocher AI (auto-incrémentation) pour l'ID).


La structure de votre table abonnes


Au passage, c'est un hasard si les valeurs de nos publications sont toujours de 4 lettres (oeil, main etc.), mais autant en profiter pour mettre un CHAR 4 plutôt qu'un VARCHAR.
Mais attention aux valeurs qu'on leur affecte si l'on intègre de nouveaux magazines !

Dans abonnement.php enfin :

(Peut-être vous êtes vous cassé la tête avec cette histoire de nouvel écran quand l'utilisateur clique...
et ce damné formulaire qui restait en ligne, vos commentaires de rappel ne faisant que s'ajouter au HTML...)

Voici une solution à retenir : Dans vos if, commencer par mettre la condition d'affichage la plus "avancée" en premier, contrairement à ce que l'on a envie de faire spontanément :
remontez le temps à l'envers, si vous voulez...



Veuillez cliquer sur le symbole à droite pour découvrir la solution quand vous aurez fini.
abonnement.php

                <?php
                include("fonctions.php");
                
                /*ECRAN QUI S AFFICHE SI L ON A CLIQUE OK*/
                if (isset ($_POST['valider'])){
                	//On récupère les valeurs entrées par l'utilisateur :
                	$civ=$_POST['civilite'];
                	$nom=$_POST['nom'];
                	$prenom=$_POST['prenom'];
                	$age=$_POST['age'];
                	$adresse=$_POST['adresse'];
                	$CP=$_POST['CP'];
                	$ville=$_POST['ville'];
                	$tel=$_POST['tel'];
                	$abo=$_POST['abo'];
                
                	//On affiche l'écran de rappel
                	//gérer le féminin
                	$e='';
                	if(($civ=='Mme')||($civ=='Mlle')){
                		$e='e';
                	}
                	//gérer le nom complet du magazine
                
                	if ($abo=='main'){
                		$mag='J\'ai la main verte.';
                	}
                	elseif ($abo=='pied'){
                		$mag='J\'ai le pied marin.';
                	}
                	elseif ($abo=='oeil'){
                		$mag='J\'ai l\'oeil vif.';
                	}
                	else{
                		$mag='J\'ai la rate qui se dilate.';
                	}
                	
                	echo'<h2>VOUS &Ecirc;TES :</h2>';
                	echo $civ.' '.$nom.' '.$prenom.', ag&eacute;'.$e.' de '.$age.' ans.<br/><br/>
                	<strong>Votre adresse :</strong><br/>'.
                	$adresse.'<br/>'.
                	$CP.' '.$ville.'<br/><br/>
                	<strong>Votre t&eacute;l&eacute;phone : </strong>'.$tel.'<br/><br/>';
                	echo'<h2>VOUS AVEZ CHOISI DE VOUS ABONNER &Agrave;</h2>';
                	echo'<h3>'.$mag.'</h3><br/>
                	<h4>Merci de vous &ecirc;tre abonn&eacute; &agrave; notre magazine !</h4>';
                
                	//On alimente la base de données
                	
                	 //On se connecte
                	connectMaBase();
                
                	//On prépare la commande sql d'insertion
                    $sql = 'INSERT INTO Abonnes VALUES("","'.$civ.'","'.$nom.'","'.$prenom.'","'.$age.'","'.$adresse.'","'.$CP.'","'.$ville.'","'.$tel.'","'.$abo.'")'; 
                
                	/*on lance la commande (mysql_query) et au cas où, 
                    on rédige un petit message d'erreur si la requête ne passe pas (or die) 
                    (Message qui intègrera les causes d'erreur sql)*/
                	mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
                
                	// on ferme la connexion
                	mysql_close();
                }
                
                /*ECRAN QUI S AFFICHE SI L ON N A RIEN CLIQUE DONC A L ARRIVEE SUR LA PAGE*/
                /*SEULE LA CONDITION ELSE EST DANS DES BALISES PHP PUIS LA PAGE HTML REPREND SON COURS*/
                else{
                ?>
                <html>
                    <head>
                        <title>S'abonner à l'un de nos magazines</title>
                    </head>
                    <body>
                        <h1>POUR VOUS ABONNER :</h1>
                        
                        <form name="inscription" method="post" action="abonnement.php">
                        
                            <h2>Veuillez saisir vos donn&eacute;es d'identit&eacute; :</h2>
                            <input type="radio" name="civilite" value="M"/>M.
                            <input type="radio" name="civilite" value="Mme"/>Mme
                            <input type="radio" name="civilite" value="Mlle"/>Mlle <br/>
                            Nom : <input type="text" name="nom"/> <br/>
                            Pr&eacute;nom :<input type="text" name="prenom"/> <br/>
                            &Acirc;ge : <input type="text" name="age"/><br/>
                            Adresse : <input type="text" name="adresse"/> <br/>
                            Code Postal : <input type="text" name="CP" maxlength="5"/> <br/>
                            Ville : <input type="text" name="ville"/> <br/>
                            Num&eacute;ro de t&eacute;l&eacute;phone personnel : <input type="text" name="tel" maxlength="10"/> <br/>
                            
                            <h2>Veuillez cocher le magazine choisi :</h2>
                             
                            <input type="radio" name="abo" value="main"/>J'ai la main verte. <br/>
                            <input type="radio" name="abo" value="pied"/>J'ai le pied marin. <br/>
                            <input type="radio" name="abo" value="oeil"/>J'ai l'oeil vif. <br/>
                            <input type="radio" name="abo" value="rate"/>J'ai la rate qui se dilate. <br/>
                            
                            <input type="submit" name="valider" value="OK"/>
                        
                        </form>
                        <?php
                        //Bien sûr il faut penser à fermer l'accolade de notre condition d'affichage
                        }
                        ?>
                    </body>
                </html>
                
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 VAUTHIER Sylvie. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.