Année
Spéciale
Informatique
ENSIMAG 2006 - 2007
Séance 7
20 mars 2007
PHP et MySQL
Plan
:
- PHP
- Variables
- Les
données d'une FORM.
- See the
environmental variable $HTTP_USER_AGENT
- to get a
list of environment variables with phpinfo()
- Test an
environment variable
- PHP peut
interpréter les données d'une
FORM.
- Les
chaînes de caractères.
- SQL
- MYSQL
- Une
introduction rapide aux fonctions de MySQL.
- Un exemple
de PHP et MySQL
- Une forme en
HTML : search.html
PHP
PHP et MySQL sont un couple
idéal pour des sites web.
PHP est un langage de script interprété par le
serveur.
(À l'opposition au langage interprété
par le Navigateur comme «JavaScript»)
Des documentation sont disponibles à
<A Href="http://www.php.net/manual/langref.php">PHP
Reference Manual</A>
PHP est une logiciel ouvert que support authentification des
utilisateurs, XML, les image dynamique, WDDX, mémoire
partagé, et création des documents PDF.
Voici un exemple de PHP.
<body
bgcolor="#FFFFFF" text="#000000">
<H1> lets test PHP </H1>
<H2> Try Hello World</H2>
<?php
$myvar = "Hello World";
echo $myvar;
?>
Si on accède à ce page au travers APACHE, on
obtiendrait :
<html>
<body>
<H1> lets test PHP </H1>
<H2> Try Hello World</H2>
</body>
</html>
La partie :
<?php $myvar = "Hello
World"; echo $myvar; ?>
est envoyé au PHP par APACHE. Le symbole
<?php indique le début d'un bloc de
code. Le symbole ?> indique la
fin. Des expressions PHP peuvent être
placés n'importe ou dans le code.
Le symbole « ; » sert de marquer pour les fins de
commandes. PHP n'interprète pas les sauts de
lignes. Donc,
<?php
$myvar = "Hello World";
echo $myvar;
?>
et
<?php $myvar = "Hello World"; echo $myvar;
?>
sont strictement équivalents.
Variables
Les variable, comme $myvar commence par une « $ ».
Ils peuvent représenter les chaînes, les nombres
ou les tableaux.
PHP utilise une syntaxe proche de C, C++ et Unix. Par exemple
:
<?php
echo "<h2>This is a
test</h2>"; // This is a one-line c++ style comment
/* This is a multi line comment
yet
another line of comment */
echo "<h2>This is yet
another test</h2>";
echo "<h2>One Final
Test</h2>"; # This is shell-style style comment
?>
Les noms et mots réservé ne sont pas sensibles
aux majuscules. Par exemple :
<h3>Navigator
is <?php echo $_SERVER['HTTP_USER_AGENT']; ?>
</h3>
<h3>running file <?php echo
$_SERVER['SCRIPT_FILENAME']; ?> </h3>
<h3>on system <?php echo $_SERVER['SERVER_NAME'];
?> </h3>
<H2> to get a list of environment variables with
phpinfo() </H2>
<?php phpinfo()?>
Les
données d'une FORM.
exemple4.php
<H2> Php can
allow form actions from within
a second HTML (php) file</H2>
<form action="action.php3" method="GET">
Your name: <input type=text name=name>
You age: <input type=text name=age>
<input type=submit>
</form>
<?php $name = $_GET("name"); ?>
Hi <?php echo $name; ?>.
<?php $age = $_GET("age"); ?>
You are <?php echo $age; ?> years old.
PHP décode les arguments avec $_GET() ou $_POST ou
$_REQUEST()
See the environmental variable $HTTP_USER_AGENT
<?php echo "You are using <P>"; ?>
<?php echo $HTTP_USER_AGENT; ?>
Mélange de PHP et HTML
Il est possible de mélanger l'HTML au milieu de
l'PHP. Voici un exemple :
to
get a list of environment variables with phpinfo()
<?php phpinfo()?>
Test
an environment variable
"strstr()" searches for a string (arg2) in arg1.
<?php
if(strstr($HTTP_USER_AGENT,"MSIE"))
{
echo "You are using Internet
Explorer<br>";
}
?>
You can jump in and out of PHP!
<?php
if(strstr($HTTP_USER_AGENT,"MSIE")) {
?>
<center><b>You are using Internet
Explorer</b></center>
<?php} else {?>
<center><b>You are not using
Internet Explorer</b></center>
<?php}?>
PHP
peut interpréter les données d'une
FORM.
Php can allow form actions from within a second HTML (php)
file
<form
action="action.php3" method="POST">
Your name: <input type=text name=name>
Your age: <input type=text name=age>
<input type=submit>
</form>
Avec le fichier : action.php3
Hi <?php echo $name?>. You are <?php echo
$age?> years old.
PHP décode les arguments et construits un
"hash ", automatiquement. (Donc les blocs de codes magique de PERL
ne
sont pas nécessaire en PHP.
Avec les add-ins on peut trouver 700
fonctions en PHP.
PHP a les types de variables suivants :
Array, floating-point numbers , integer , object et string
Les types de variables sont déterminés
automatiquement
par le contexte, pendant l'exécution. Mais il est toujours
possible de forcer un typage avec le commande settype() .
Les
chaînes de caractères.
Les chaînes sont spécifiés
avec les quotes
comme en PERL.
Avec le back-quote ` les variables sont
interprétés.
Comme avec C et PERL, le caractère "\ " sert de
échappement pour les caractères
spéciales.
Exemples :
\n linefeed (LF or 0x0A in ASCII)
\r carriage return (CR or 0x0D in ASCII)
\t horizontal tab (HT or 0x09 in ASCII)
\\ backslash
\$ dollar sign
\" double-quote
\[0-7]{1,3} Les caractères en octal
\x[0-9A-Fa-f]{1,2} Les caractères en
hexadécimal.
Il est possible de échapper des autres
caractères,
mais ceci génère une message d'erreur.
On peut également échapper avec
"' ".
Dans ce cas, les seul échappement sont "\\ " et
"\' "
Les variables ne sont pas interprétés
ˆ l'intérieur des "\' ".
On peut également délimiter les
chaînes avec
"<<<xxx " ou xxx
représente n'importe
que chaîne
Le chaîne est terminé par xxx sur un
debut de ligne. Le
chaîne xxx doit contenir que des alphanumérique.
Exemple :
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
Voici une deuxième exemple :
/* More complex example, with variables. */
class foo {
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
Comme avec PERL, les chaînes peuvent ètre
concaténés par '.' (dot). L'opérateur
"+ " ne marcherai par pour le concaténation. On peut
obtenir
le "nième " caractère d'un chaîne par
indexation
numérique.
Voici un exemple :
<?php
/* Assigning a string. */
$str = "This is a string";
/* Appending to it. */
$str = $str . " with some more text";
/* Another way to append,
includes an escaped newline. */
$str .= " and a newline at the end.\n";
/* This string will end up
being '<p>Number:
9</p>' */
$num = 9;
$str = "<p>Number: $num</p>";
/* This one will be
'<p>Number:
$num</p>' */
$num = 9;
$str = '<p>Number: $num</p>';
/* Get the first character
of a string */
$str = 'This is a test.';
$first = $str[0];
/* Get the last character of
a string. */
$str = 'This is still a test.';
$last = $str[strlen($str)-1];
?>
See <A
Href="http://www.php.net/manual/langref.php">PHP Reference
Manual</A> for more information.
SQL
SQL est un langage de command pour les bases de données
inventé par E. F. Codd dans les années
70. Parce que SQL se ressemble à la langue
naturelle, il est facile d’apprendre.
Par exemple :
SELECT name FROM people
WHERE name LIKE `Stac%’.
La commande SQL
SELECT value FROM table
S’exprime en PERL comme
$++ ;($*++/$ !)
;$&$^,, ;$!
SQL a été conçu par E. CODD pour les
non-informaticiens. Il a été adopté
par ORACLE en 1980 pour son syst"me de Bases de
Données. Il est considéré
comme la norme en langage de commande de base de donnée.
Depuis 1989, SQL est une norme ANSI (SQL92) ou SQL2.
À fin d’être petit et efficace, MySQL
est réalisé qu’un un sous-ensemble de
la fonctionnalité de SQL.
MYSQL
MYSQL est un “Open Source ShareWareè
système de gestion de base relationnel de données
développé par Michael Widenius, de la
société suédoise TcX. À
l’origine (en 1979) Widenius a
développé un système de gestion de
base de donnée nommée « UNIREG
». En 1995, Widenius a écrit un nouveau
système pour les besoins interne de sa
société. Il a fourni un API
fondé sur SQL en appuyant sur les composants de
UNIREG.
MySQL est un petit serveur de base de donnée relationnelle
avec un interpréteur de commande ANSI SQL. MySQL peut
être compilé sur les plusieurs plates-formes
(UNIX, Windows, etc.). Sur Unix, MySQL exploit les « threads
» pour une gain important d'efficacité.
MySQL peut être exécuté sur Windows NT
et comme un procès normal de Windows 95/98.
(Attention, les threads de Windows 95 ont un problème de
fuite de mémoire).
MySQL a l’avantage d’être petit, facile a
utilisé, standard (grâce à son usage de
SQL), ouvert (distribué avec sa source), robuste, et
gratuit. Il est rapidement devenu l’outil
privilège pour la base de données des serveurs.
Administration
MySQL est une base « multi-thread », avec un thread
par connection. MySQL comprend quelques fonctions de plus par rapport
au SQL, comme : ENCRYPT, WEEKDAY and IF.
On installe MySQL comme un processus de fond (demon en Unix). Sur Unix
ou Windows (98 et NT). On démarre MySQL avec :
/usr/local/mysql/bin/safe_mysql&.
Le script « safe_mysql » assure que il y
qu’un mysql. Si mysql se plante, safe_mysql le relance.
On peut administrer MySQL avec mystiquement ou mysqlcc.
Par exemple pour créer une nouvelle base, DATABASE, on tape
:
mysqladmin –p create DATABASE
(-p pour prompte pour le mot de passe de ROOT).
Pour détruire une base de donnée il y a :
mysqladmin –p drop DATABASE
Pour arrêter une base de donnée, on tape :
mysqladmin –p shutdown
Il y a une ensemble riche de commande de « status »
possible.
Voir :
mysqladmin –h
Une
introduction rapide aux fonctions de MySQL.
En SQL et en MySQL les commandes ne sont pas sensibles aux
majuscules.
On démarre MySQL avec
mysql -u <user> -p <password>
Le <user> par défaut est
èrootè, mais il ne
s'agit pas du même èrootè que dans
unix.
Les commandes sont terminées par è;è.
On peut créer une base avec la commande :
create database <db-name>;
On entre dans une base de donnée avec
èuseè.
use <db-name>;
Une table est crée par ècreateè.
create table <table-name> (<col-name>
<type> <default-value>);
Un record est ajouté à la table avec
insert into <table-name> (<col>,
<col>, <col>) values (<val>
<val> <val>);
exemple:
mysql -u jim -p
******
create database asi2004;
use asi2004;
create table students
(id int unsigned auto_increment primary
key,
name varchar(255) null,
age int null,
gender char(6)
);
show tables;
insert into students (name, age, gender) values
(èjeanè, 22, èmaleè),
(èjacquesè, 22,
èmaleè),(ènicoleè, 23,
èfemaleè);
select * from students;
select * from students where gender =èmaleè;
update students set age= 23 where name=èjacquesè;
select * from students;
delete from students where name = èjeanè and
age=22;
select * from students;
Un
exemple de PHP et MySQL
(attention : Cet exemple n'est pas encore testé. )
Soit une table SQL :
Field |
Type |
Length |
Not-Null |
Unique-Index |
ID |
int |
|
Y |
Y |
name |
char |
255 |
N |
N |
age |
int |
6 |
N |
N |
gender |
char |
16 |
N |
N |
Une
forme en HTML : search.html
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv=èContent-Typeè
content=ètext/html; charset=iso-8859-1è>
</head>
<body bgcolor=è#FFFFFFè
text=è#000000è>
<H2>Retrieve people from data-base</H2>
<P>
<FORM method=èGETè
action=ègender-query.phpè>
Sex<SELECT NAME=ègenderè>
<OPTION>male
<OPTION>female
</SELECT>
<P>
<INPUT TYPE=SUBMIT
VALUE=èQueryè>
<INPUT TYPE=RESET>
</FORM>
</BODY>
</HTML>
Le fichier PHP/HTML to retrieve the results
<html>
<head>
<title>Gender Query Results</title>
<meta http-equiv=èContent-Typeè
content=ètext/html; charset=iso-8859-1è>
</head>
<body bgcolor=è#FFFFFFè
text=è#000000è>
<!-- <H1>First open the data
base</H1> -->
<?php include(èdbconnect.phpè);
mysql_select_db(èASI2004è) or
die(
è<h3>Could not select database
ASI2004</h3>è);
echo è database ASI2004
opened.<p>è;
?>
<?php
// The query will have the form
// SELECT * FROM DATA WHERE gender=?male
// Build the query template
$query = èSELECT * FROM studentsè;
// append the modifiers
$gender = $_GET[ègenderè];
$query .= è WHERE gender = '$gender'è;
//Print the query text
echo $query;
echo è<h2>Here are the
results<h2>è;
// Make the query
$students = mysql_query($query) or
die (mysql_error(èCant do
queryè));
//Show the results
while ($student=mysql_fetch_array($students))
{ echo è<h3>student : è;
echo $student[ènameè];
echo è age è;
echo $student[èageè];
echo è<h3>è;
}
?>
</body>
</html>