Tutorial
PHP/Mysql
Copyright 2001 Ken Le Prado- Utt Net Group
Table des matières
1.Introduction au PHP 2
2.Premiers Pas 3
Insertion du php dans une page : 3
Affichage d'un texte : 3
Comparateurs : 3
Structures de contrôle 3
Test logique 3
Boucle While 4
Boucle for 4
Tableaux 4
Inclure un fichier 4
Utilisation des formulaires 4
Utilisation des URL 5
3.Introduction Mysql 5
Création d'une table 5
Insertion d'enregistrement 6
Affichage des enregistrements 6
Modifier un enregistrement 6
Effacer un enregistrement 7
Effacer la table 7
4.Manipulation des tables Mysql avec php 7
Insérer un enregistrement : 7
Affichage des enregistrements 7
5.Exemple : Script de carnet d'adresse 8
Le php est un langage ressemblant au C, interprété non pas par le navigateur (comme le HTML), mais par le serveur. Pour que le serveur sache qu'il s'agit d'un fichier à interpréter, il faudra nommer votre fichier en : .php ou .php3 selon la configuration du serveur web.
Le php offre des fonctions supplémentaires par rapport à un langage interprété par le navigateur. En effet, php permet de créer des images (ex : diagrammes) générer des pdf, flash, écriture dans des fichiers... et une interface avec les bases de données, en particulier Mysql, que l'on abordera.
<html>
<body>
<?
$pagetitle = Mon premier script; //Affectation d'une variable
echo $pagetitle ; //Affichage de la varible
?>
</body>
</html>
Ici, on a d'abord déclaré que l'on allait faire du php avec une balise : <? ?> équivalente à <?php ?> ou encore à <script language=php> </script>
Attention : le ; est obligatoire en fin de toutes les lignes. C'est le séparateur d'instruction.
Le signe $ permet de dire qu'il s'agit d'une variable. Il est également obligatoire.
Les commentaires, utiles pour débugger et pour se retrouver dans les scripts sont : // ou # pour commenter une ligne unique et /* */ pour un commentaire multiligne.
$nom = toto;
echo Hello $nom; //Hello toto
echo 'Hello $nom'; //Hello $nom
echo 'Hello '.$nom; //Hello toto
Caractères spéciaux : \ (Guillemets) \n (nouvelle ligne)
== Égalité
> Inférieur Strict
< Supérieur Strict
<= Inférieur ou Égal
>= Supérieur ou égal
!= Différent
$nom = toto
$toto == tata //Renvoi false
$toto != tata //Renvoi true
if (condition)
{A faire si condition est vrai }
else
{ A faire sinon}
if ($toto == 'Bill')
{echo 'Salut Bill';}
else
{echo $toto .'je ne te connais pas';}
while (condition)
{A faire tant que la condition est vraie}
while($a<5)
{echo $a;
$a = $a+1; //Equivalent à $a++
}
for (Valeur initiale;Test de fin; pas)
{A faire si on est pas arrivé à la fin}
For ($i=0; $i<5; $i++)
{echo $i;}
$row[0] = Dédé;
$row[1] = Bill;
$row[3] = Paul;
est équivalent au tableau suivant :
Dédé |
Bill |
|
Paul |
Utile pour la configuration et pour le graphisme.
include(nom du fichier);
ou require(nom du fichier);
include('config.php');
<form action=arrivee.php>
<input type=text name=toto>
<input type=submit name=envoi value=Envoyer>
</form>
Suite au remplissage du formulaire précédent, les variables dans la page 'arrivee.php' seront initialement :
$toto = 'Ce qu'on a remplit dans le formulaire';
$envoi = 'Envoyer';
Si on fait appel à la page 'arrivee.php' et que l'on veut transmettre les valeurs $toto='tata' et $envoi='Envoyer', on écrira les lien suivant :
<a href=arrivee.php?toto=tata&envoi=envoyer>Lien</a>
Le ? Indique un passage de variables et & les séparent.
Mysql est un type de base de données au même titre que Oracle, ... Pour pouvez vous créer des bases qui comporterons elle-mêmes plusieurs Tables qui comporteront les données. En règles générale, les hébergeurs ne vous laisseront pas de choix et vous n'aurez accès qu'à une seule base.
Connexion à Mysql par un environnement en ligne de commandes :
MYSQL> Mysql -u utilisateur -p base
Une table est un sorte de tableau, que l'on remplira par la suite avec des données. Mais avant toutes chose, on doit savoir quel type de donnée on va y insérer. Par exemple pour la création d'un carnet de téléphone :
Champ |
Type |
---|---|
Numéro de fiche |
Entier |
Nom |
30 Caractères |
Prenom |
40 Caractères |
Date de naisance |
Date |
Numero de téléphone |
20 Caractères |
Donc on va créer une table qui ressemblera à :
Champ |
Type |
---|---|
id |
Integer |
nom |
Varchar(30) |
prenom |
Varchar(40) |
ddn |
Date |
tel |
Varchar(20) |
Varchar(20) : Suite de 20 carcatères (ex : abcdefghijklmnopqrs)
Pour créer la table que l'on va appeler 'adresse', il suffira de taper la requête suivante :
CREATE TABLE adresse
(
id INT not null AUTO_INCREMENT,
nom VARCHAR(30),
prenom VARCHAR(40)
ddn DATE,
tel VARCHAR(20),
UNIQUE(id)
);
id est le champs qui va permettre de différencier les fiches. Par conséquent, il est assé pratique d'avoir un champs qui s'incrémente automatiquement pour éviter d'avoir un même id, d'où l'option auto_incrément. De plus, il est nécessaire d'indiquer à mysql les champs qui ne peuvent être dupliqué (en double) en écrivant unique(nom_du_champ).
Où taper les commandes ? Soit l'hébergeur vous permet de taper vos commandes dans une interface UNIX soit il vous propose des applications du type PhpMyAdmin qui permet d'exécuter des requêtes très simplement.
Une fois la table créée, vous pouvez afficher sa structure avec :
DESCRIBE adresse ;
Une table vide ne servant à rien, on va maintenant y insérer des valeurs :
INSERT INTO adresse VALUES('0','Clinton','Bill','1950-09-30','12.3265.2954');
La valeur '0' pour l'id signifie que l'id doit s'auto-incrémenter. Donc son id au final sera certainement différent de 0, mais en s'en moque.
SELECT * FROM adresse; // On affiche tous les champs de la base adresse
SELECT nom,prenom FROM adresse WHERE ddn<'1980-01-01' ORDER BY nom DESC
// On n'affiche que les champs nom et prenom de la base adresse où la date de naissance est inférieure au 1er Janvier 1980 et trié par nom décroissant.
UPDATE adresse SET tel='0215435123' WHERE nom='toto';
On modifie le numéro de téléphone de tous les enregistrements de la table adresse dont le nom est toto.
On peut utiliser les tests de sélection suivants :
WHERE nom='toto' Contient exactement 'toto'
WHERE nom LIKE '%toto%' Contient 'toto' dedans
WHERE nom LIKE '%toto' Se finissant par 'toto'
WHERE nom LIKE '_toto%' Commencant par 'toto' avec un seul carcatère en premier
DELETE FROM adresse WHERE ddn < '2000-01-01'; Efface tous les enregistrements avant le 01/01/2000
DROP TABLE adresse Efface la table adresse
<?
$serveur = localhost;
$login = votre_login;
$mdp = le_mot_de_passe:
$base = nom_de_la_base;
MYSQL_CONNECT($serveur,$login,mdp); //Connexion à Mysql
MYSQL_SELECT_DB($base); //Selection de la base
?>
On enregistre tout dans un fichier 'connexion.php' auquel on fera appel par la fonction include() ainsi, si vous changez d'hébergeur, vous n'aurez qu'à changer les variables de ce fichier.
<?
include('connexion.php'); //Connexion
$nom='toto'; //Définition des variables
$prenom='titi';
$ddn='2000-10-15';
$tel='01.30.92.15.15';
$query=INSERT INTO adresse VALUES('0','$nom','$prenom','$ddn','$tel');
//Écriture de la requête
MYSQL_QUERY($query);
//Exécution de la requête
?>
<?
include('connexion.php');
$query = SELECT * FROM adresse ORDER BY nom,prenom ASC; //Requête
$result = MYSQL_QUERY($query); //exécution de la requête
$num = MYSQL_NUM_ROWS($result); //Nombre d'enregistrements
echo Il y a $num personnes<br>;
while ($row = MYSQL_FETCH_ARRAY($result))
//Tant qu'il y a un enregistrement, on boucle de plus, on explose l'enregistrement dans un tableau associatif.
{
echo nom : $row[nom] prenom : $prenom ...;
}
?>
Maintenant que vous connaissez les rudiments, vous êtes capables de suivre le script de carnet d'adresse suivant :
<html>
<body>
<H1>Carnet d'adresses</H1><br>
<a href=index.php>[Refresh/Home]</a> |
<a href=index.php?action=form_ajout>[Ajouter]</a><hr>
<?
/* Formes de la table :
CREATE TABLE adresse
(
id INT not null AUTO_INCREMENT,
nom VARCHAR(20),
prenom VARCHAR(20),
ddn DATE,
UNIQUE (id)
)
*/
//Variables de connexion
$serveur = "localhost";
$user = "root";
$pass = "";
$base = "test";
//Connexion, on quitte si elle ne marche pas
if (!mysql_connect($serveur,$user,$pass)) {die("Problème à la connexion");}
if (!mysql_select_db($base)) {die("Problème à la base");}
//A chaque fois, on regarde si $action est définie et correspond à quelque chose
//Action d'ajout
if ($action=="ajouter")
{
if (mysql_query("INSERT INTO adresse VALUES ('0','$nom','$prenom','$ddn')"))
{echo"Ajouté!<br>";}
else
{echo mysql_error();} //Affiche l'erreur retrounée par mysq
}
//Action d'effacer
if ($action=="effacer")
{
if (mysql_query("DELETE FROM adresse WHERE id=$id"))
{echo"éffacé!<br>";}
else
{echo mysql_error();}
}
//Formulaire d'ajout
if ($action=="form_ajout")
{
echo"<form action=index.php?action=ajouter method=post>
Nom : <input type=text name=nom><br>
Prenom : <input type=text name=prenom><br>
Date de naissance : <input type=text name=ddn><br>
<input type=submit value=\"Ajouter\">
</form><hr>
";
}
//Formulaire de modification
if ($action=="form_modif")
{
$result=mysql_query("SELECT * FROM adresse WHERE id='$id'");
$row=mysql_fetch_array($result);
echo"<form action=index.php?action=modif&id=$id method=post>
Nom : <input type=text name=nom value=\"$row[nom]\"><br>
Prenom : <input type=text name=prenom value=\"$row[prenom]\"><br>
Date de naissance : <input type=text name=ddn value=\"$row[ddn]\"><br>
<input type=submit value=\"Modifer\">
</form><hr>
";
}
//Action de modifier
if ($action=="modif")
{
if (mysql_query("UPDATE adresse SET nom='$nom',prenom='$prenom',ddn='$ddn' WHERE id=$id"))
{echo"modifié!<br>";}
else
{echo mysql_error();}
}
//Affichage des personnes existantes
$result=mysql_query("SELECT * FROM adresse ORDER BY nom ASC");
$row=mysql_num_rows($result); //Nombre d'enregistrements
if ($row>0)
{
//On les passe tous les enregistrements en revue s'il y en a au moins un
echo"<table border=1 align=center cellspacing=0>
<tr><td>Nom</td><td>Prenom</td><td>Date</td><td>Action</td></tr>";
while($row=mysql_fetch_array($result))
{
echo"<tr><td>$row[nom]</td><td>$row[prenom]</td><td>$row[ddn]</td><td>
<a href=index.php?action=form_modif&id=$row[id]>Modifier</a>
<a href=index.php?action=effacer&id=$row[id]>Effacer</a></td></tr>";
}
echo "</table>";
}
else
{echo"Il n'y a pas encore d'enregistrement<br>";}
mysql_close(); //fermeture de la connexion
?>
<hr>
</body>
</html>