PHP Accès Aux Données
PHP Accès Aux Données
PHP Accès Aux Données
Principe
PHP propose de nombreux outils permettant de travailler avec la plupart
des SGBDR
• Oracle, Sybase, Microsoft SQL Server, PostgreSQL ou encore MySQL
Lorsqu'une base de données n'est pas directement supportée par PHP, il est
possible d'utiliser un driver ODBC (pilote standard) pour communiquer avec
les bases de données
PHP fournit un grand choix de fonctions permettant de manipuler les bases
de données.
• Quatre fonctions sont essentielles:
– La fonction de connexion au serveur
– La fonction de choix de la base de données
– La fonction de requête
– La fonction de déconnexion
Il existe 2 possibilités dans PHP : la classe mysqli et la classe PDO. L'avantage de PDO est de pouvoir
gérer différents SGBD. La classe mysqli permet de se connecter juste au SGBD MySQL.
Mohamed HARRANE Page 3
Développement Web Langage PHP
Principe
Avec le SGBD MySQL, les fonctions de manipulation sont :
⁃ mysqli_connect
⁃ mysqli_select_db
⁃ mysqli_query
⁃ mysqli_close
La connexion à un SGBDR
La connexion à (un serveur) un système de gestion de base de
données s'effectue par l'entremise des fonctions spécialisées :
mysqli_connect("nom_serveur","nom_utilisateur","mot_passe");
mysqli_connect ( string host, string username, string passwd, string dbname,
int port , string socket )
La fonction mysqli_connect essaie d'ouvrir une connexion au serveur
MySQL de l'hôte host qui peut être un nom d'hôte ou une adresse IP.
Si la valeur NULL ou la chaîne "localhost« est passée à ce paramètre,
l'hôte local est sous-entendu. Lorsque c'est possible, les sockets seront
utilisées au lieu du protocole TCP/IP. mysqli_connect retourne une
ressource de connexion au serveur MySQL en cas de succès et,
sinon, FALSE .
<?php
$cn = mysqli_connect("localhost", "root", "123456", "maBD");
/* Vérification de la connexion */
if (!$cn) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
printf("Infos sur le serveur : %s\n", mysqli_get_host_info($cn));
/* Fermeture de la connexion */
mysqli_close($cn);
?>
<?php
$serveur="localhost";
$user="root";
$password="";
$bdd="ouvrage";
$cn = mysqli_connect($serveur, $user, $password, $bdd);
if (mysqli_connect_errno()) {
echo ("Échec de la connexion : ". mysqli_connect_error());
die ("Code d’erreur : ".mysqli_connect_errno());
}
?>
Mohamed HARRANE Page 7
Développement Web Langage PHP
<?php
$cn = mysqli_connect('localhost', 'root’, '','bts_laureaut’);
mysqli_set_charset($cn, "utf8");
/* Vérification de la connexion */
if (mysqli_connect_errno()) {
printf("Échec de connexion : %s\n", mysqli_connect_error());
exit();
}
$sql="SELECT * FROM actualite";
$result = mysqli_query($cn, $sql);
echo "<table border=1>";
echo "<tr>";
echo "<td>N°</td>"; echo "<td>Titre</td>";
echo "<td>Résumé</td>"; echo "</tr>";
while ($row=mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>".$row['id_actualite']."</td>";
echo "<td>". $row['titre']."</td>";
echo "<td>".$row['resume']."</td>";
echo "</tr>";
}
echo "</table>";
?>
La connexion à un SGBDR
Il existe deux façons de se connecter à une base de données
• Les connexions non-persistantes (base_connect)
• Les connexions persistantes (base_pconnect).
La connexion à un SGBDR
La déconnexion des bases de données s'effectue par l'intermédiaire des
fonctions de fermeture.
• mysqli_close($id_connexion);
<html>
<head> <title>Liens</title> </head>
<body>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<th>Nom du site</th>
<th>URL</th>
</tr>
<?php
// Déclaration des paramètres de connexion
$host = la_machine;
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$password = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$password) or die("erreur de connexion au
serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de données");
<?php
$id_connexion = mysql_connect("localhost","root",“xxx");
mysql_select_db("bd_user");
$requete = "SELECT * FROM utilisateur";
$id_resultat = mysql_query($requete, $id_connexion)
or die ("La requête est invalide : ".$requete."<br>");
$nb_champs = mysql_num_fields($id_resultat);
$ligne = mysql_fetch_row($id_resultat);
$type = array();
$propriete = array();
for ($i = 0; $i < $nb_champs; $i++) {
$propriete[$i]['nom'] = mysql_field_name($id_resultat, $i);
$propriete[$i]['type'] = mysql_field_type($id_resultat, $i);
$propriete[$i]['longueur'] = mysql_field_len($id_resultat, $i);}
for($i = 0; $i < $nb_champs; $i++)
{
echo "<h3>Colonne n°" . $i . "</h3>";
foreach($propriete[$i] as $cle => $valeur){
echo "<u>" . $cle . " :</u> <b>" . $valeur . "</b><br>";}
}
?>
Mohamed HARRANE Page 21
Développement Web Langage PHP
$nb_champs = msql_num_fields($id_resultat);
$nb_lignes = msql_num_rows($id_resultat);
$nb_champs = mysql_num_fields($id_resultat);
$nb_lignes = mysql_num_rows($id_resultat);
$nb_champs = ociNumCols($id_resultat);
$nb_lignes = ociRowCount($id_resultat);
$nb_champs = pg_NumFields($id_resultat);
$nb_lignes = pg_NumRows($id_resultat);
$nb_champs = sybase_num_fields($id_resultat);
$nb_lignes = sybase_num_rows($id_resultat);
<?php
$id_connexion = mysql_connect("localhost", "root", “xxx");
if (!$id_connexion)
{
$message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur numéro
" . mysql_errno() . ":</u> " . mysql_error() . "</b>";
echo $message;}
else {$reussite = mysql_select_db("utilsateur");
if (!$reussite)
{
$message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur numéro
" . mysql_errno() . ":</u> " . mysql_error() . "</b>";
echo $message;}
else{$id_requete = mysql_query("SELECT date_nais, email, nom " .
"FROM utilsateur");
if (!$id_requete) {
$message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur numéro "
. mysql_errno()
. ":</u> " . mysql_error() . "</b>";
echo $message;
}}}?>
<?php
function gestion_erreur($identifiant){
echo "Une erreur est survenue :<br>"
. mysql_errno() . " : " . mysql_error();
mysql_close($identifiant);
exit;
}
$id_connexion = mysql_connect("localhost","root",“xxx");
if(!$id_connexion) gestion_erreur($id_connexion);
$id_liste_bases = mysql_list_dbs($id_connexion);
if(!$id_liste_bases) gestion_erreur($id_liste_bases);
$nb_bases = mysql_num_rows($id_liste_bases);
echo '<table width="640" border="1">';
for($i = 0; $i < $nb_bases; $i++){
$nom_base = mysql_db_name($id_liste_bases, $i);
$id_liste_tables = mysql_list_tables($nom_base, $id_connexion);
if(!$id_liste_tables) gestion_erreur($id_liste_tables);
$nb_tables = mysql_num_rows($id_liste_tables);
echo '<tr><th valign="top" width="140"><u>' . $nom_base
. '</u></th><td valign="top" width="500">';
Principe
Est un mécanisme permettant de mettre en relation les différentes requêtes du
même client sur une période de temps donnée.
Les sessions permettent de conserver des informations relatives à un utilisateur
lors de son parcours sur un site web.
Des données spécifiques à un visiteur pourront être transmises de page en page
afin d'adapter personnellement les réponses d'une application PHP.
Chaque visiteur en se connectant à un site reçoit un numéro d'identification
dénommé identifiant de session (SID).
La fonction session_start() se charge de générer automatiquement cet
identifiant unique de session et de créer un répertoire. Elle doit être placée au
début de chaque page afin de démarrer ou de continuer une session.
<?php
session_start();
$Session_ID = session_id();
// $Session_ID = 7edf48ca359ee24dbc5b3f6ed2557e90
?>
Mohamed HARRANE Page 29
Développement Web Langage PHP
Principe
Un répertoire est créé sur le serveur à l'emplacement désigné par le fichier
de configuration php.ini, afin de recueillir les données de la nouvelle
session.
[Session]
session.save_path= C:\PHP\sessiondata
; Rép session = \sess_7edf48ca359ee24dbc5b3f6ed2557e90
Le transport des informations entre les documents est réalisé par l'entremise
soit d'un cookie
soit d'une requête HTTP
• Cette dernière solution est la plus fiable puisque les cookies peuvent ne pas être
acceptés par le client ou celui-ci pourrait les détruire en cours de session.
• Il suffit de concaténer l'identifiant de session à l'adresse URL de la page cible pour
que cette dernière puisse accéder aux informations conservées par la session.
echo '<a href=” http://www.site.com/doc.php? ’. session_name(). ’=‘ . session_id().‘>
lien</a>‘
Par défaut, PHP tente de passer par les cookies pour sauvegarder
l'identifiant de session dans le cas où le client les accepterait. Il est
possible d’éviter cela, il suffit de désactiver l'option de
configuration session.use_cookies dans le fichier php.ini.
[Session]
session.use_cookies 0; //désactive la gestion des sessions par
cookie
Exemple
<!-- Fichier : formulaire.html -->
<html><body>
<form method="post" action="traitement.php">
<table border="0">
<tr>
<td><u>Nom :</u></td>
<td><input type="text" name="Nom" size="20" value="RIVES"></td></tr>
<tr>
<td><u>Prénom :</u></td>
<td><input type="text" name="Prenom" size="20" value=“Aloui ali"></td></tr>
<tr>
<td><u>eMail :</u></td>
<td><input type="text" name="cEmail" size="20" value=”ali@go.com"></td></tr>
<tr><td> </td>
<td><input type="submit" name="soumettre" value="Envoyer"></td></tr></table>
</form>
</body
</html>
<?
session_start();
$nom = $_POST["Nom"];
$prenom = $_POST["Prenom"];
$email = $_POST["cEmail"];
session_register("nom");
session_register("prenom");
session_register("email");
$_SESSION["nom"]=$nom;
$_SESSION["prenom"]=$prenom;
$_SESSION["email"]=$email;
header("Location: session.php?" . session_name() . "=" .
session_id());
?>
<?
session_start();
?>
<html><body><?
echo("<u>Identifiant de session :</u> <b>"
. session_id() . "</b><br>");
echo("<u>Nom de la session :</u> <b>"
. session_name() . "</b><br><br>");
echo("<u>Nom :</u> <b>". $_SESSION["nom"] . "</b><br>");
echo("<u>Prénom :</u> <b>" . $_SESSION["prenom"]
. "</b><br>");
echo("<u>eMail :</u> <b>" . $_SESSION["email"]
. "</b><br>");
//session_destroy();
?>
</body>
</html>
Mohamed HARRANE Page 36
Développement Web Langage PHP
Principe
Le langage PHP dispose de plusieurs outils permettant de gérer les
connexions des utilisateurs sur un site web
• Il existe trois états possibles en ce qui concerne le statut des connexions.
1. NORMAL : signifie que la connexion est ouverte et le script est en cours
d'exécution.
2. ABORTED : signifie que le client a annulé la connexion et le script est arrêté
par défaut.
3. TIMEOUT : signifie que le script a provoqué une déconnexion due à la fin de
la durée d'exécution convenue.
• Les deux états ABORTED et TIMEOUT peuvent survenir en même temps dans
le cas ou d'une part si PHP est configuré de telle sorte à ignorer les déconnexions
et d'autre part lorsque le script arrive à expiration
Principe
Le langage PHP dispose de plusieurs outils permettant de gérer les
connexions des utilisateurs sur un site web
• L'état ABORTED en principe interrompt logiquement le script dès que
l'utilisateur se déconnecte du site. Toutefois, il est possible de modifier ce
comportement en activant l'option de configuration ignore_user_abort dans le
fichier php.ini.
Principe
L'instruction connection_aborted permet d'exécuter une fonction spécifique
à la déconnexion d'un client. Si la déconnexion est effective, la fonction
connection_aborted retourne true.
connection_status();
retourne le statut de la connexion.
connection_timeout();
vérifie l'expiration du script en cours.
ignore_user_abort(paramètre);
détermine si lors de la déconnexion d'un client, le script doit continuer ou arrêter son
exécution.
Le paramètre peut valoir soit '0' pour un comportement normal, '1' pour un
abandon et '2' pour une expiration.
Principe
Les entêtes sont des informations envoyées lors de chaque échange par le
protocole HTTP entre un navigateur et un serveur
• Informations sur les données à envoyer dans le cas d'une requête
Principe
PHP fournit une fonction permettant d'envoyer des en-tête HTTP
manuellement du serveur au navigateur
• booléen header(chaîne en-tête HTTP)
La fonction header() doit être utilisée avant tout envoi de données HTML
au navigateur
Exemples
• Rediriger le navigateur vers une nouvelle page:
<?
header("location: http://www.monsite.fr/"); ?>
<?
$headers = getallheaders();
foreach ($headers as $nom => $contenu) {
echo "headers[$nom] = $contenu<br />\n";
}
?>
header(chaîne);
envoie une entête HTTP avant toute commande PHP.
fichier test.htm
<html><body><img src=‘rotation_test.php></body></html>
Redimensionnement
int imagecopyresized ( resource dst_image , resource src_image , int dst_x , int
dst_y , int src_x , int src_y , int dst_w , int dst_h , int src_w , int src_h )
imagecopyresized copie une partie rectangulaire d'une image dans une autre
image.
Si les dimensions de la source et de la destination ne sont pas égales,
un étirement adéquat est effectué pour faire correspondre
Exemple :
$message = "Bonjour, ceci est mon message.’’;
$objet ="Bonjour"
mail(‘’info@aricia.fr’’, $objet, $message);
Masquer PHP
Configurer le serveur web pour qu'il utilise plusieurs extensions de fichiers avec PHP
Vous pouvez utiliser des informations déroutantes comme ceci :
Masquer PHP avec un autre langage
# Faire que le code PHP ressemble à un autre langage
AddType application/x-httpd-php .asp .py .pl
Masquer PHP avec des types inconnus
# Faire que le code PHP ressemble à un autre langage qui n'existe pas
AddType application/x-httpd-php .bop .foo .133t
cachez-le sous forme de html.
Cela a un léger impact négatif sur les performances générales, car tous
les fichiers HTML seront aussi analysés et traités par le moteur PHP :
Utiliser le type html pour les extensions PHP
# Faire que le code PHP ressemble à du html
AddType application/x-httpd-php .htm .html
<?php
// Fichier : traitement.php
La suppression des bases de données est permise, de la même façon qu'il est
possible de les créer.
• msql_drop_db($nom_base_donnee, $id_connexion);
• mysql_drop_db ($nom_base_donnee, $id_connexion);