Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  
CONCOURS
 
 
PLUS DE PHP
 
 
PLUS DE JAVASCRIPT
 
COMMENT CA MARCHE
 
 
EXPLIQUE-MOI
 
 
NEWS LETTER
 

 
PARTENAIRES
 
Découvrez scriptsphp.org
Découvrez phpteam.net
Tout sur les expressions régulières
IE sucks :-)
 
DESIGN DU SITE
 
Alimenter une ou plusieurs tables mySQL
Tuto original de FABRICE POTEC, revu par LionZion, Molokai et Raf en août 2004

Dans cet exercice nous allons voir comment alimenter une ou plusieurs tables avec les données qui proviennent d'un même formulaire. 
 

Alimenter une table

 
Pour commencer vous allez créer la table infos_tbl dans phpMyAdmin comme suit :

requête SQL:
CREATE TABLE infos_tbl (id INT (11) not null AUTO_INCREMENT, nom VARCHAR (35) not null , prenom VARCHAR (35) not null , email VARCHAR (70) not null , icq INT (11) null , titre VARCHAR (70) not null , url VARCHAR (255) not null , PRIMARY KEY (id), INDEX (id), UNIQUE (id))

Ensuite nous allons utiliser le formulaire ci dessous qui va alimenter la table :

 

Code HTML

Donne à l'écran

<html>
<form method="POST" action="add.php">
<center>
<input type="text" name="nom" size="20" value="nom" maxlength="35"> <input type="text" name="prenom" size="20" value="prenom" maxlength="35"><br>
<input type="text" name="email" size="20" value="email" maxlength="70"> <input type="text" name="icq" size="20" value="icq" maxlength="11"><br>
<input type="text" name="titre" size="20" value="titre du site" maxlength="70"> <input type="text" name="url" size="20" value="url du site" maxlength="255"><br>
<input type="submit" value="Envoyer" name="envoyer">
</center>
</form>
</html>






 
Vous noterez les "maxlength" dans chacun des champs, ceci permet de brider le nombre de caractères maximum que le visiteur peut entrer dans le champ, bien sûr ici le "maxlength" correspond au nombre de caractères spécifié dans la création de la table infos_tbl. Cela a un intérêt, celui d'être sûr que le visiteur ne tapera pas plus de caractères que prévu.

Voyons maintenant le script PHP en lui-même, celui-ci sera contenu dans le fichier add.php auquel fait référence le POST du formulaire :

 

Code PHP de "add.php"

<?php
// On commence par récupérer les champs
if(isset($_POST['nom']))      $nom=$_POST['nom'];
else      $nom="";

if(isset($_POST['prenom']))      $prenom=$_POST['prenom'];
else      $prenom="";

if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";

if(isset($_POST['icq']))      $icq=$_POST['icq'];
else      $icq="";

if(isset($_POST['titre']))      $titre=$_POST['titre'];
else      $titre="";

if(isset($_POST['url']))      $url=$_POST['url'];
else      $url="";

// On vérifie si les champs sont vides
if(empty($nom) OR empty($prenom) OR empty($email) OR empty($titre) OR empty($url))
    {
    echo 
'<font color="red">Attention, seul le champs <b>ICQ</b> peut rester vide !</font>';
    }

// Aucun champ n'est vide, on peut enregistrer dans la table
else     
    {
    
  // connexion à la base
$db mysql_connect('localhost''login''password')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    
mysql_select_db('nom_de_la_base',$db)  or die('Erreur de selection '.mysql_error());
    
    // on écrit la requête sql
    
$sql "INSERT INTO infos_tbl(id, nom, prenom,email, icq, titre, url) VALUES('','$nom','$prenom','$email','$icq','$titre','$url')";
    
    
// on insère les informations du formulaire dans la table
    
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

    
// on affiche le résultat pour le visiteur
    
echo 'Vos infos on été ajoutées.';

    
mysql_close();  // on ferme la connexion
    

?>
 
Explication :

La requête INSERT INTO permet donc l'insertion des champs du formulaire dans la table. Dans notre cas le premier champ reste vide car il s'agit de l'id (identifiant) qui s'incrémente automatiquement à chaque nouvelle requête INSERT.

Notez que dans le cas ou vous ne voudriez insérer que les champs Nom et Prénom dans la table vous pouvez très bien spécifier dans la requête le nom de chaque champ, comme suit :

$sql "INSERT INTO infos_tbl(nom,prenom) VALUES('$nom','$prenom')";

Mais attention dans ce cas les autres champs de la table devront avoir l'attribut NULL et non pas NOT NULL, Null indique au champ qu'il pourra rester vide. Et si vous essayez d'insérer un nombre de valeurs différent du nombre des champs, mysql vous fera un joli message d'errreur !


Bien sûr, l'idéal et de tester si l'URL existe dans la table pour éviter les doublons, si celle-ci existe déjà on indique au visiteur qu'il ne peut pas valider son formulaire. J'ai pris l'exemple ici de l'URL mais il va sans dire que vous pouvez vérifier les champs de votre choix, cela dépend des doublons que vous ne souhaitez pas avoir dans votre table. Voici le code :

Code PHP de "add.php" avec la vérification de doublon sur l'URL

<?php

// On récupère les champs (voir plus haut)

// On vérifie si les champs sont vides
if(empty($nom) OR empty($prenom) OR empty($email) OR empty($titre) OR empty($url))
    {
    echo 
'<font color="red">Attention, seul le champs <b>ICQ</b> peut rester vide !</font>';
    }
// Aucun champ n'est vide, on peut enregistrer dans la table
else     
    {
    
$db mysql_connect('localhost''login''password');  // connexion à la base
    
mysql_select_db('nom_de_la_base',$db);                  // sélection de la base
    
    // on regarde si l'url existe déjà
    
$sql "SELECT id FROM infos_tbl WHERE url='$url'";
    
$req mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    
    
// on compte le nombre de résultats
    
$res mysql_num_rows($req);

    if(
$res!=0)  // l'url existe déjà, on affiche un message d'erreur
        
{
        echo 
'<font color="red">Désolé, mais cette URL existe déjà dans notre base.</font>';
        }
    else  
// L'url n'existe pas, on insère les informations du formulaire dans la table
        
{   
        
$sql "INSERT INTO infos_tbl(id, nom, prenom,email, icq, titre, url) VALUES('','$nom','$prenom','$email','$icq','$titre','$url')";
        
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
        
        
// on affiche le résultat pour le visiteur
        
echo 'Vos infos on été ajoutées.';
        }
    
mysql_close();  // on ferme la connexion
    

?>
 

Alimenter deux tables et créer une liaison

 
Voyons maintenant comment ces mêmes informations peuvent être enregistrées dans deux tables différentes en gardant une liaison entre les deux. Le principe est en fait tout bête, admettons que nous ayons une première table qui va nous servir à stocker les coordonnées du visiteur ($nom , $prenom, $email, $icq) et une seconde dans laquelle ne seront sauvegardées que les informations du site ($titre et $url). Voyez ce petit schéma qui va vous éclairer sur la manière de créer une liaison entre 2 tables :

 

Examinons la méthode à employer :

1. On commence par insérer $titre et $url dans la table 2 (sites_tbl).
2. Une fois l'insertion effectuée, on utilise la fonction PHP mysql_insert_id() pour connaître l'id_site qui a été affecté à notre nouvel enregistrement.
3. On insère le reste du formulaire dans la table 1 (infos_tbl), soit : $nom , $prenom, $email, $icq et $id_site.

Nous avons maintenant un liaison entre la table 1 et 2 via l'id_site. Ci-dessous le code PHP de cette manipulation :

Code PHP avec création de la liaison entre les 2 tables

<?php

// On récupère les champs (voir plus haut)

$db 
mysql_connect('localhost''login''password');  // connexion à la base
mysql_select_db('nom_de_la_base',$db);                  // sélection de la base

// on regarde dans la table SITES_TBL si l'url existe déjà
$sql "SELECT id FROM sites_tbl WHERE url='$url'";
$req mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$resmysql_num_rows($req);

if(
$res!=0)  // l'url existe déjà, on affiche un message d'erreur
    
{
    echo 
'<font color="red">Désolé, mais cette URL existe déjà dans notre base.</font>';
    }

else  
// L'url n'existe pas, on insère d'abord les infos dans SITES_TBL
    
{
    
$sql "INSERT INTO sites_tbl(id_site, titre, url) VALUES('','$titre','$url')";
    
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

    
// on récupère l'id_site qui vient d'être généré
    
$id_site mysql_insert_id();

    
// ci-dessous on insère les infos dans INFOS_TBL
    
$sql "INSERT INTO infos_tbl(id, nom, prenom,email, icq, id_site) VALUES('','$nom','$prenom','$email','$icq','$id_site')";
    
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    }

mysql_close($db);  // on ferme la connexion
?> 

Important : L'id_site de la table 2 (sites_tbl) doit être en auto_incrément automatique au même titre que l'id de la table 1 (infos_tbl). Je ne vous donne "volontairement" pas la requête SQL pour créer les deux tables, et ce pour vous faire travailler un peu tout de même ;).


Conclusion :

Vous pouvez créer autant de liaisons que vous le voulez entre vos tables, cela a pour but de les alléger ce qui permet une plus grande rapidité lorsque vous souhaitez les interroger.



Ajouter une réponse
Nom
Email
Titre

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Mémoriser mon nom et mon email : Oui Non
www.phpdebutant.org © 2024 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement
DEBUTEZ !
 
  0.  Introduction
  1.  Afficher une phrase ou une image
  2.  Afficher la date et l'heure
  3.  PHP dans du code HTML
  4.  La concaténation
  5.  Récupérer les valeurs d'un formulaire
  6.  Les structures de contrôle
  7.  Ecrire et lire dans un fichier texte
  8.  Les fonctions utilisateurs
  9.  Les variables d'environnement
  10.  Quelques fonctions utiles
  11.  SQL/MySQL (Create, Alter & Drop)
  12.  SQL/MySQL (Insert et Select)
  13.  SQL/MySQL (Delete et Update)
  14.  SQL/MySQL (Where)
  15.  Fonctions PHP pour mySQL
  16.  Interroger une table MySQL
  17.  Alimenter une ou plusieurs tables mySQL
  18.  Les pseudos-frames
  19.  Les sessions php4
  20.  Affichage page par page
  21.  Images dynamiques
  22.  Ca marche pas ?
  23.  Variables globales à OFF
  24.  Les variables dynamiques