Contenu de ce tutorial :
1 Base de données relationnelles
2 SQL
3 MySQL
4 HTML
5 PHP
6 Interfaçage PHP/MySQL
1 Base de données relationnelle
Dans une base de données relationnelle, les données
sont stockés dans des tables. Une table définit une série
de champs, destinés à décrire les objets stockés.
Par exemple, si l'on souhaite stocker des joueurs, on pourra décrire
ces joueurs par leur nom, leur profession, leur age, etc. Dans une table
relationnelle, chaque colonne correspond à un champs (ou attribut),
et chaque ligne à un objet stocké.
Conceptuellement parlant, stocker un nouvel objet dans une table consistera
donc à créer une nouvelle ligne dans une table, et à
remplir chacune des cases de cette ligne correspondant aux attributs du
nouvel objet.
Exemple de table :
Joueurs
|
id |
prenom |
nom |
profession |
ville |
etat |
1 |
Joe |
Smith |
83 First Street |
Howard |
Ohio |
2 |
Mary |
Scott |
842 Vine Ave. |
Losantiville |
Ohio |
3 |
Sam |
Jones |
33 Elm St. |
Paris |
New York |
4 |
Sarah |
Ackerman |
44, Main St. |
Upton |
Michigan |
La création, le peuplement, l'interrogation d'une base relationnelle
(et donc de ses tables) se font au moyen d'un langage nommé SQL
(Structured Query Language).
2 SQL
2.1 Les principaux types de données en SQL:
NUMERIQUES
int
entiers
5
float
réél (flottant)
5.0
decimal valeurs monétaires
...
TEXTES
char
chaîne de taille fixe
varchar chaîne de taille
variable
text
chaîne de longueur élevée.
DATE/HEURES
date
"1998-12-31"
datetime "1998-12-31
23:59:59"
timestamp 19981231235959
AUTRES
enum
choix unique parmi un ensemble de valeurs : enum("rouge", "bleu")
set
choix multiples
blob
Binary Large OBjects
2.1 Créer des tables en SQL
mysql> CREATE TABLE players (id int auto_increment, varchar(20), ...);
Il est conseillé de créer des index associés aux
champs d'un table impliqués dans des requètes, de facon à
accélerer ces requètes. Exemple:
create table players (
player_id int not null auto_increment,
player_nom varchar(20),
player_prenom varchar(20),
primary key(player_id) //clé primaire pour identifiant
unique et index
);
2.2 Créer un index (accélération de requètes)
mysql> CREATE INDEX idx ON players (profession);
2. 3 Insertion de données
mysql> INSERT INTO players VALUES (null, "olly", "olly", ..);
mysql> INSERT INTO connections VALUES (null, "olly", "1998-12-31 23:59:59",
...);
Pour insérer des données à partir d'un fichier CSV (données séparées par des ";" ou des tabulations) :
mysql> LOAD DATA LOCAL INFILE "text.txt" INTO TABLE players;
2.4 Interrogation d'une table
mysql> SELECT * FROM players;
//récupère tous les joueurs
mysql> SELECT profession, age FROM players WHERE ville = "Toulouse";
mysql> SELECT profession FROM players WHERE email LIKE "%@club-internet.fr";
mysql> SELECT count(*) FROM players; //récupère
le nombre de joueurs
mysql> SELECT * FROM players ORDER BY age; //récupère
tous les joeurs classés par age
mysql> SELECT * FROM players GROUP BY profession;
mysql> SELECT * FROM players ORDER BY age DESC LIMIT 10; //10 premier
joueurs les plus agés
Il est également possible de faire intervenir des opérateurs
logiques (AND, OR, NOT).
2.5 Mise à jour d'un champs
mysql> UPDATE players SET nb_connections = nb_connections + 1;
2.6 Modification d'une table
mysql> ALTER TABLE players ADD COLUMN profession varchar(50); //ajoute
une colonne
mysql> ALTER TABLE players DROP COLUMN age; // enleve une colonne
2.7 Destruction d'une ligne dans une table
mysql> DELETE FROM players WHERE age < 5;
2. 8 Destruction de table
mysql> DROP TABLE IF EXISTS players;
2.9 Destruction d'une base
mysql> DROP TABLE IF EXISTS game;
Ressources:
3 MySQL
3.1 Principaux fichiers
Sous Windows, les fichiers éxécutables fournis avec MySQL
sont les suivants:
mysqld |
serveur MySQL. Sous Windows, on tapera simplement mysqld pour
le lancer. Sous Unix, le script safe_mysqld se charge de démarrer
mysqld avec les options classiques. |
mysql |
Le client standard MySQL, permettant de lancer des requètes
SQL, et des commandes propres à MySQL.
Pour lancer le client :
mysql --user=user --password=passwd --host=hostname base
|
mysqladmin |
administration rapide d'une base (création de base, shutdown) |
mysqldump |
permet de réaliser un dump d'une base, c'est à
dire générer l'ensemble des commandes SQL qui pourraient
permettre de recréer cette base sous un autre nom ou sur un autre
serveur |
mysqlimport |
import d'une base de donnée |
mysqlshutdown.exe |
shutdown |
MySqlManager.exe |
client graphique |
3.2 Commandes propres à MySQL :
Pour afficher toutes les bases de données sur un serveur MySQL :
mysql> show databases;
Pour afficher toutes les tables de la base de données courante
:
mysql> show tables;
Pour afficher de toutes les champs d'une table (players par exemple)
:
mysql> show columns from players;
ou bien :
mysql>describe players
3.3 Trucs
Faire une union de tables avec MySQL:
mysql> create temporary table temp ( ... );
mysql> insert into temp select blabla from table_name where ... ;
mysql> insert into temp select blabla from table_name where ... ;
mysql> select * from temp;
mysql> delete temp;
Il peut etre judicieux de creer une cle primaire pour la table temporaire,
pour accelerer l'union.
3.4 Privilèges
Changer le password root :
use mysql;
update user set password = password("xxxxx") where user = "root"
flush privileges
C:\>mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.*
TO custom@localhost
IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.*
TO custom@whitehouse.gov
IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.*
TO custom@'%'
IDENTIFIED BY 'stupid';
4 HTML
4.1 tables
- Eléments de base d'une page HTML
<table>
<tr>
<td>une case</td> <td>une autre case</td>
</tr>
<tr>
<td>encore une case</td><td>une dernière
case</td>
</tr>
</table>
- Possibilité d'imbriquer les tables les unes dans les autres
4.2 formulaires
Structure générale :
<form action="vote.php3" method="get">
...
texte, tables, etc...
<input ...>
...
<
</form>
Différents éléments d'entrée de données
:
champs caché <input type="hidden"
name="page" value="cv.html">
champs de saisie <input type="text" name="telephone" size="10"
maxlength="10">
zone de texte <textarea name="adresse"
cols="40" rows="2" wrap="virtual"></textarea>
bouton radio <input type="radio"
name="notoriete" value="magazine" checked="true">
liste de sélection <select>
<option value="janvier">Janvier</option>
<option value="fevrier">Février</option>
<option value="mars" selected="true">Mars</option>
</select>
submission
<input type=submit value="Validez" name="submit">
5 PHP
5.1 Syntaxe générale
La syntaxe du PHP est proche de celle du C et du perl. Un des gros
interêt du PHP est qu'il est possible dans une même page de
mélanger instructions PHP et HTML
Par exemple :
<html><body>
<h1>html</h1>
<?php echo "<b>php</b>\n"; ?>
</body></html>
Types de données et variables
- Pas de déclarations de variables requis, le type d'une variable
est donné par son utilisation.
- Une variable commence par le signe $
- numériques ($a=1), chaînes de caractères ($a="hello"),
tableaux ($a[1]="rouge"), tableaux associatifs($a["voiture"]="rouge")
Expressions conditionnelles et boucles
- boucles while, for
- test if, switch
Fonctions de base
Affichage d'une chaîne de caractères.
echo("Hello\n"); ou echo "Hello\n";
Fonctions
function maFonction($param1, $param2)
{
return $param1 * $param2;
}
Il est possible de faire des bibliothèques de fonctions, de les
stocker dans des fichiers à inclure :
Ex:
include("fichier.inc.php3");
Gestion des chaines de caracteres
Ex : manipulation de dates.
list($annee, $mois, $jour) = split("/", $date); si date au format $date="2000/5/9";
ensuite
$nouv_date = "$jour:$mois:$annee"; par exemple pour avoir une date
$nouv_date = "9:5:2000";
Gestion des sessions : cookies (PHP3) ou intégré
(PHP4)
- Envoi d'un cookie nommé TestCookie avec la valeur $value,
expirant dans une heure
SetCookie("TestCookie",$value,time()+3600);
- Réception d'un cookie
Une variable nommée $TestCookie est automatiquement créée
lorsqu'une requète HTTP comporte le cookie precedent dans son header
Redirection
Header("Location: http://xxx.xxx.com") par exemple.
Expression régulières
Les expressions régulières représentent un excellent
outil pour tester la validité de certaines chaines de caractères
(code postaux, numéros de téléphone). Par exemple
:
Comment tester si un code postal est valide?
if (preg_match("/^\d{5}$/", $code))
print "Le code $code est valide";
else
print "Le code $code est invalide";
Comment tester si un numéro de portable est valide?
if (preg_match("/^\06d{8}$/", $num))
print "Le numéro $num est valide";
else
print "Le numéro $num est invalide";
Gestion de formulaires HTML
Exemple de formulaire :
<form action="vote.php3" method="get">
<input type="text" name="telephone" size="10" maxlength="10">
<input type=submit value="Validez" name="submit">
</form>
Lors de l'éxécution (côté serveur) du script
PHP vote.php3, une variable $telephone est automatiquement créée
et le contenu saisi dans le formulaire est stocké dans cette variable.
Ex de script vote.php3 :
<?php
Header("Content-type: text/html");
echo "<html><body>\n"
echo "Votre numéro est le $telephone\n";
echo "</body></html>\n";
?>
Ressources sur le web :
manuel PHP à http://www.php.net
http://www.phpbuilder.com
6 Interfaçage MySQL/PHP
Fonctions mysql de PHP :
- mysql_connect(hote, user, passwd) connection à une base MySQL,
renvoie un id positif si OK
- mysql_db_query(base, requète) envoie une requète à
la base, renvoie un id de resultat (positif si OK)
- mysql_fetch_array(id) renvoie un tableau associatif (false sinon)
- mysql_close() fermeture de la connection
- mysql_insert_id() renvoie la valeur du champs auto_increment de la
dernière insertion
- list($var1, $var2, ...) = mysql_fetch_array(id)
Exemple minimal :
<?php
$host = "localhost";
$user = "olly";
$password = "";
$database = "test";
$conn = mysql_connect($host,$user,$password);
if (!$conn) {
echo "Connection impossible\n";
exit;
}
$result = mysql_db_query("database","select * from players;");
if ($result > 0) {
while($row = mysql_fetch_array($result)) {
echo $row["nom"] . $row["prenom"]
. "\n";
}
mysql_close();
?>
Ressources
Réseaux,
Bases de données partagées, PHP, PostgreSQL
Binary Data + MySQL + PHP : How to store images directly in the sql database
|