• Aucun résultat trouvé

PHP et les Bases de données - Généralités

N/A
N/A
Protected

Academic year: 2022

Partager "PHP et les Bases de données - Généralités"

Copied!
13
0
0

Texte intégral

(1)

PHP et les Bases de données - Généralités

Conception d’une base de données

Méthodes utilisées : MERISE, UML

Modèle conceptuel des données MCD, Modèle logique MLD, Modèle Physique MPD.

Ces aspects seront abordés plus tard dans le cours Bases de données

Création d’une base de données et d’une table

Utiliser PHPMYADMIN pour créer une table user : Id_user, Login, pass, statut a) Création de la base de données TCRT

(2)

b) Création de la table users

c) création des champs : id_users, login, pass, statut

d) modification du champ pass : remplacer VARCHAR par PASSWORD si on veut crypter le mot de passe. Sélectionner l’onglet INSERER pour remplir la table

(3)

e) Après validation

(4)

f) Affichage du contenu de la table users : onglet AFFICHER

Requête SQL pour créer la base de données tcrt CREATE DATABASE ‘tcrt’ ;

Requête SQL pour créer la table users dans la base de données tcrt CREATE TABLE IF NOT EXISTS `users` (

`id_user` int(11) NOT NULL auto_increment, `login` varchar(50) NOT NULL,

`pass` varchar(60) NOT NULL, `statut` enum('a','u') NOT NULL, PRIMARY KEY (`id_user`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Requête SQL pour insérer le contenu dans la table users dans la base de données tcrt

INSERT INTO `users` (`id_user`, `login`, `pass`, `statut`) VALUES (1, 'admin', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'a'), (2, 'bob', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'u');

Requête SQL pour extraire le contenu de la table users Select * from ‘users’ ;

Utiliser la ligne de commandes pour gérer les bases de données

(5)

C:\xampp\mysql\bin>mysql -u root connexion en tant que user root

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 22

Server version: 5.0.51a Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>use tcrt sélection de la base tcrt

mysql>show tables affichage des tables de la base

tcrt

mysql>select * from users ; affichage du contenu de la table users

mysql> ? liste des commandes disponibles

mysql>quit sortie de MySQL

Utilisation de MySQL avec PHP

Connexion à Mysql en PHP sur la base tcrt : connexion.php

<?php //variables

$serveur_db = "localhost"; serveur MySQL

$user_db = "root"; utilisateur MySQL par défaut(admin)

$pass_db = ""; mot de passe de root par défaut

$base_db = "tcrt"; choix de la base de donnée

//1- connection au serveur Mysql

$con = mysql_connect($serveur_db, $user_db, $pass_db);

if(!$con){

echo 'Echec serveur Contactez le Webmaster';

exit();

}

//2- choix de la base

$db = mysql_select_db($base_db)

(6)

or die('Echec base Contactez le Webmaster');

?>

Exploitation de la base de donées tcrt, requêtes sur la table users : bdd.php

<?php

require_once('connexion.php');

$query='select * from users';

$result=mysql_query($query);

if (mysql_num_rows($result) > 0){

echo '<table>';

while($row=mysql_fetch_assoc($result)){

echo '<tr>';

foreach ($row as $key=>$value){

echo '<td>'.$value.'</td>';

}

echo '</tr>';

}

echo '</table>';

} else {

echo '<h1>erreur</h1>';

}

?>

EXEMPLE

Base de données : TCRT Table :Users

CREATE TABLE IF NOT EXISTS `users` ( `id_user` int(11) NOT NULL auto_increment, `login` varchar(50) NOT NULL,

`pass` varchar(80) NOT NULL, `statut` enum('a','u') NOT NULL, PRIMARY KEY (`id_user`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; --

-- Contenu de la table `users`

--

INSERT INTO `users` (`id_user`, `login`, `pass`, `statut`) VALUES (1, 'admin', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'a'), (2, 'bob', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'u'), (3, 'bill', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'u');

(7)

Connexion.php

<?php //variables

$serveur_db = "localhost";

$user_db = "root";

$pass_db = "";

$base_db = "tcrt";

//1- connexion au serveur //**************************

$con = mysql_connect($serveur_db, $user_db, $pass_db);

if(!$con){

echo 'Echec serveur Contactez le Webmaster';

exit();

}

//2- choix de la base //**************************

$db = mysql_select_db($base_db)

or die('Echec base Contactez le Webmaster');

?>

Bd.php

<?php

require_once('connexion.php');

$query="select * from users";

$result=mysql_query($query);

if (mysql_num_rows($result) > 0){

echo '<table border=1>';

while($row=mysql_fetch_assoc($result)){

echo "<pre>";

print_r($row);

echo '<tr>';

foreach ($row as $key=>$value){

echo '<td>'.$value.'</td>';

}

echo '</tr>';

}

echo '</table>';

} else {

echo '<h1>erreur</h1>';

}

?>

(8)

Gestion des

utilisateurs de MySQL

Pour se connecter sur un serveur MySQL, il faut fournir un compte utilisateur existant dans la base de comptes. Par défaut le compte existant est root, sans mot de passe. C’est l’administrateur.

Pour des questions de sécurité, il est préférable de créer un compte utilisateur en lui affectant des droits(privilèges) sur les base et les tables.

Privilèges utilisateurs

Tables mysql.user, mysql.db, mysql.tables_priv, mysql.columns_priv

Si on affecte les privilèges ON *.* : Y sera écrit dans la table USER

(9)

Si on affecte les privilèges ON base.* : Y écrit dans DB

Si on affecte les privilèges ON base.table : Y écrit dans TABLES_PRIV

Si on affecte les privilèges ON base.table + (champs) : Y écrit dans COLUMNS_PRIV

Attribution des privilèges en ligne de commande

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...

ON [object_type] {tbl_name | * | *.* | db_name.*}

TO user [IDENTIFIED BY [PASSWORD] 'password']

[, user [IDENTIFIED BY [PASSWORD] 'password']] ...

[REQUIRE NONE |

[{SSL| X509}]

[CIPHER 'cipher' [AND]]

[ISSUER 'issuer' [AND]]

[SUBJECT 'subject']]

[WITH with_option [with_option] ...]

Connexion à mysql :

mysql –u <user> -p -h <hostname|hostaddres>

Un user est caractérisé par : nom, mot de passe, host.

Lorsqu’on crée le user on crée également le host sur lequel il se connecte : localhost, adresseip, nom dns .

Cette information est écrite dans la table user.

Cas particulier : localhost ne met pas en jeu le protocole TCP/IP, mais les named pipes.

Lors de la connexion, on peut préciser –h suivi du nom du serveur MySQL.

mysql> grant select ON *.* to 'bob'@'192.160.0.%' identified by 'toto';

Ici bob peut se connecter avec le mot de passe toto à partir du sous-réseau 192.168.0.0 avec le privilège SELECT sur toutes les bases et toutes les tables

Contenu de la table mysql.user

Root équivalent à partir de n’importe quel host:

mysql> grant all on *.* to 'admin'@'%' identified by ‘toto' with grant

option;

(10)

Connexion sécurisée et gestion des sessions

Index.php

<?php

$erreur = isset($_GET['erreur']) ? $_GET['erreur'] : "" ;

?>

<html>

<head><title>Identification</title>

<style type="text/css">

</style>

</head>

<body>

<form action="login.php" method="post">

<table border="1" align="center" cellpadding="3" cellspacing="0">

<tr><th colspan="2">Authentification</th></tr>

<tr>

<th >Login : </th>

<td><input name="login" type="text" id="login" value="" /></td>

</tr>

<tr>

<th >Mot de passe : </th>

<td><input name="pass" type="password" id="pass" value="" /></td>

</tr>

<tr>

<td colspan="2"><?php switch ($erreur) { case 1:

echo "<center><font color='red'>Login ou mot de passe incorrect</font></center>";

break;

case 2:

echo "<center><font color='red'>Veuillez vous connecter d'abord !</font></center>";

break;

default:

break;

}

?>

</td>

</tr>

<tr>

<th colspan="2" >

<input type="submit" name="Submit" value="Envoyer" /></th>

</tr>

</table>

</form>

</body>

</html>

Login.php

<?php

require_once('connexion.php');

$login = isset($_POST['login']) ? $_POST['login'] : "" ;

$pass = isset($_POST['pass']) ? $_POST['pass'] : "";

(11)

$query = "select * from users where login='$login' and pass=PASSWORD('$pass') ";

$result = mysql_query($query);

if (mysql_num_rows($result) > 0){

$tmp = mysql_fetch_assoc($result);

mysql_close();

//cookie

/*setcookie("login", $login, time()+(4*3600));

setcookie("pass", $pass, time()+(4*3600));*/

//session

session_start();

$_SESSION['login']='ok';

$_SESSION['id_user']=$tmp['id_user'];

$_SESSION['statut']=$tmp['statut'];

$_SESSION['nom']=$tmp['login'];

header('location: accueil.php');

} else { //echec

header('location: index.php?erreur=1');

exit();

}

?>

Accueil.php

<?php

include('sessionverif.php');

//reception de variables, chargement d'un en-tête include('header.php');

include ('footer.php');

?>

Sessionverif.php

<?php

//vérification si session en cours session_start();

if(!isset($_SESSION['login']) OR $_SESSION['login']!='ok'){

header("Location: index.php?erreur=2");

exit();

}

?>

Header.php

<?php

login|s:2:"ok";id_user|s:1:"2";statut|s:1:"u";nom|s :3:"bob";5:"admin";

C:\xampp\tm p

(12)

$statut = isset($_SESSION['statut']) ? $_SESSION['statut'] : "";

?>

<html>

<head>

<title>Bienvenue</title>

<style type="text/css" media="all">

#lignemenu{

float:left;

background-color:blue;

width:100%;

color:white;

}

#lignemenu .droite{

float:right;

text-align:right;

margin-right:10px;

font-family:"Trebuchet MS";

}

#lignemenu .gauche{

float:left;

text-align:center;

font-family:"Trebuchet MS";

text-decoration:none;

color:white;

margin-left:30px;

} a {

color:white;

text-decoration:none;

}

#lienbandeau{

text-decoration:none;

color:yellow;

}

#bandeau img{

width:100%;

}

body {

margin-left: 0px;

margin-top: 0px;

margin-right:0px;

}

</style>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>

<body>

<div id="bandeau" ><img src="bandeau.jpg"></div>

<div id="lignemenu">

<div class="droite">

(13)

<?php echo $_SESSION['nom'].' connecté. session id : '.session_id().' - <a id="lienbandeau" href="finsession.php">Déconnexion</a>';

?>

</div>

<div class="gauche">

<?php

switch($statut) { case "a" :

include('menuadmin.php');

break;

case "u" :

include('menu.php');

break;

}

?>

</div>

</div>

Menu.php

<a href="accueil.php" >Accueil</a> ||

<a href="productList.php" >Catalogue</a> ||

<a href="sessionView.php" >Voir mon Panier</a> ||

<a href="commandeView.php" >Voir mes commandes</a>

Menuadmin.php

<a href="accueil.php" >Accueil</a> ||

<a href="productList.php" >Catalogue</a> ||

<a href="ajoutproduits.php" >Ajout de Produit</a> ||

<a href="sessionView.php" >Voir mon Panier</a> ||

<a href="commandeView.php" >Voir mes commandes</a>

Footer.php

</body>

</html>

Références

Documents relatifs

Afficher le contenu d’une table en utilisant le bouton « afficher » présent pour chaque table, puis pour chacun des champs utiliser le bouton « modifier » afin de réaliser

ALTER TABLE PARTICIPANT ADD COLUMN (EMAIL VARCHAR (50) ) 2- Modification d’une colonne. Elargir la taille du champ EMAIL et le rendre not

[r]

Si vous souhaitez utilisez un style de paragraphe différent comme entrée de table des matières, sélectionnez la case à cocher Styles supplémentaires dans la zone Créer à partir

Il est possible de créer les champs dans les 2 modes d'affichage mais il est préférable de les créer en mode Création. En mode Création, on voit un tableau à 3 colonnes correspond

Sélectionner le champ à déplacer (case grisée en face). Cliquer-déplacer dans cette case grisée jusqu'à l'endroit souhaité. Relâcher lorsque le curseur apparait sous forme d'un

Le Langage de Définition de Données ( LDD * , ou en anglais DDL, Data Definition Language ) pour créer et supprimer des objets dans la base de données (tables,

Les donn´ees n´ecessaires `a l’analyse par ´el´ements finis de cette structure sont mises en forme dans un fichier de donn´ees, que l’on appellera example.inp.. On souligne que