Différences entre versions de « Php pdo »
Ligne 46 : | Ligne 46 : | ||
Pour accéder à une base de données ''MySQL'', on peut soit utiliser ''MySQLi'' soit utiliser ''PDO''. Préférez ''PDO'' qui permet plus de souplesse. | Pour accéder à une base de données ''MySQL'', on peut soit utiliser ''MySQLi'' soit utiliser ''PDO''. Préférez ''PDO'' qui permet plus de souplesse. | ||
Voici le code qui permet de se connecter à une base ''MySQL'': | Voici le code qui permet de se connecter à une base ''MySQL'': | ||
− | < | + | <source lang="php" style="border:1px solid black;font-size:120%"> |
<?php | <?php | ||
try{ | try{ | ||
Ligne 54 : | Ligne 54 : | ||
} | } | ||
?> | ?> | ||
− | </ | + | </source> |
La variable ''$db'' contient la connexion base de données et si l'instanciation réussie, vous êtes connecté ! | La variable ''$db'' contient la connexion base de données et si l'instanciation réussie, vous êtes connecté ! | ||
Nous allons centraliser tout ce qui est en relation avec la base de données dans le fichier ''php/db.php''. Copiez les lignes précédentes dans ce fichier et faite une inclusion dans le fichier index.php: | Nous allons centraliser tout ce qui est en relation avec la base de données dans le fichier ''php/db.php''. Copiez les lignes précédentes dans ce fichier et faite une inclusion dans le fichier index.php: | ||
− | < | + | <source lang="html" style="border:1px solid black;font-size:120%"> |
<html> | <html> | ||
<head> | <head> | ||
Ligne 67 : | Ligne 67 : | ||
include("php/db.php"); | include("php/db.php"); | ||
?> | ?> | ||
− | <body> | + | </body> |
− | <html> | + | </html> |
− | </ | + | </source> |
Si vous ne voyez pas de message d'erreur, la connexion s'est correctement effectuée ! | Si vous ne voyez pas de message d'erreur, la connexion s'est correctement effectuée ! | ||
+ | |||
== Création des fonctions base de données == | == Création des fonctions base de données == | ||
Pour s’affranchir du ''CRUD'' nous allons agrémenter le fichier ''db.php'' des fonction suivantes: | Pour s’affranchir du ''CRUD'' nous allons agrémenter le fichier ''db.php'' des fonction suivantes: |
Version du 3 novembre 2015 à 20:04
Installation
Les librairies
Pour développer en PHP et utiliser MySQL, il ne faut pas oublier d'installer les librairies suivantes :
# yum -y install php php-mysql mysql mysql-server httpd
Paramétrez votre base MySQL ainsi que votre serveur HTTPD.
Base de données exemple
Nous allons utiliser la base de données suivante:
-- -- Base de données: `exemple` -- CREATE DATABASE IF NOT EXISTS `exemple` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `exemple`; -- -------------------------------------------------------- -- -- Structure de la table `personnes` -- CREATE TABLE IF NOT EXISTS `personnes` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nom` varchar(100) NOT NULL, `prenom` varchar(100) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Développement
Structure du site
Nous allons créer un site web qui va utiliser notre base de données. Pour faire les chose bien, il faut respecter une certaine structure à l'intérieur de /var/www/html:
- php (dossier qui contient les fichiers php)
- img (dossier qui contient les images)
- index.php
Un peu de SQL
Pour chercher des données nous allons avoir besoin des requêtes suivantes:
- SELECT : select * from personnes
- INSERT : INSERT INTO personnes (id, nom, prenom, email) VALUES (NULL, :nom, :prenom, :email)
- UPDATE : UPDATE personnes SET nom=:nom, prenom=:prenom, email=:email WHERE id=:id
- DELETE : DELETE FROM personnes WHERE id=:id
Nous remplacerons les variables :id, :nom, :prenom et :email par les valeurs voulues plus tard.
Accès base avec PDO
Pour accéder à une base de données MySQL, on peut soit utiliser MySQLi soit utiliser PDO. Préférez PDO qui permet plus de souplesse. Voici le code qui permet de se connecter à une base MySQL:
<?php
try{
$db = new PDO('mysql:host=localhost;dbname=exemple', 'root', 'password');
}catch(Exception $e){
echo "Échec : " . $e->getMessage();
}
?>
La variable $db contient la connexion base de données et si l'instanciation réussie, vous êtes connecté !
Nous allons centraliser tout ce qui est en relation avec la base de données dans le fichier php/db.php. Copiez les lignes précédentes dans ce fichier et faite une inclusion dans le fichier index.php:
<html>
<head>
<title>Exemple d'utilisation de PDO</title>
</head>
<body>
<?php
include("php/db.php");
?>
</body>
</html>
Si vous ne voyez pas de message d'erreur, la connexion s'est correctement effectuée !
Création des fonctions base de données
Pour s’affranchir du CRUD nous allons agrémenter le fichier db.php des fonction suivantes:
function getUsers(){
global $db;
$select = $db->prepare('SELECT id, nom, prenom, email FROM personnes');
$select->execute();
return $select->fetchAll();
}
function getUserById($id){
global $db;
$select = $db->prepare('SELECT id, nom, prenom, email FROM personnes WHERE id='.$id);
$select->execute();
$result = $select->fetchAll();
return $result[0];
}
function addUser($nom, $prenom, $email){
global $db;
try{
$insert=$db->prepare('INSERT INTO personnes (nom, prenom, email) VALUES(:nom, :prenom, :email)');
$insert->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email));
return true;
}catch(Exception $e){
echo $sql . "</br>" . $e->getMessage();
}
return false;
}
function modifyUserById($nom, $prenom, $email, $id){
global $db;
try{
$update=$db->prepare('UPDATE personnes SET nom=:nom, prenom=:prenom, email=:email WHERE id=:id');
$update->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email, 'id'=>$id));
return true;
}catch(Exception $e){
echo $sql . "</br>" . $e->getMessage();
}
return false;
}
function delUserById($id){
global $db;
try{
$sql = 'DELETE FROM personnes WHERE id='.$id.'';
$db->exec($sql);
return true;
}catch(Exception $e){
echo $sql . "</br>" . $e->getMessage();
}
return false;
}
On peut remarquer que les fonctions de modifications UPDATE et INSERT nécessite une préparation ($db->prepare()) alors que DELETE et SELECT peuvent êtres exécutées directement ($db->exec()).
Création d'un formulaire
Pour créer des personnes nous allons utiliser un formulaire de création. Nous allons le mettre dans le fichier php/form.php:
<?php
$id=""; $nom=""; $prenom=""; $email="";
if(isset($_POST) && !empty($_POST)){
$id=$_POST['id'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
}
?>
<form method="post" <?php if(!empty($id)){echo "action=php/modifiy.php";}else{echo "action=php/create.php";} ?> >
<table>
<tr>
<td align="right">
Nom :
</td>
<td>
<input type="text" name="nom" <?php if(!empty($nom)){echo "value=".$nom;} ?> />
</td>
</tr>
<tr>
<td align="right">
Prénom :
</td>
<td>
<input type="text" name="prenom" <?php if(!empty($prenom)){echo "value=".$prenom;} ?> />
</td>
</tr>
<tr>
<td align="right">
Email :
</td>
<td>
<input type="text" name="email" <?php if(!empty($email)){echo "value=".$email;} ?> />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<?php if(!empty($id)){echo "<input type=hidden name=id value=".$id." />";} ?>
<input type="submit" />
</td>
</tr>
</table>
</form>
Vous l'aurez remarqué, ce formulaire est intelligent dans le sens ou il détecte la présence d'informations envoyées par un formulaire POST. Cela permet de réutiliser le même formulaire pour la saisie et la modification de données.
Ajout d'un utilisateur
Ajoutez la ligne suivante dans index.php pour faire apparaître le formulaire:
<?php
include("php/form.php");
?>
Vous devriez avoir le résultat suivant:
Nous allons maintenant, créer le fichier php/create.php qui va contenir le code relatif à l'ajout d'un utilisateur:
<?php
include_once("db.php");
$nom=""; $prenom=""; $email="";
if(isset($_POST) && !empty($_POST)){
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
addUser($nom, $prenom, $email);
}
echo '<meta http-equiv="refresh" content="0;URL=../index.php" />';
?>
Une fois le formulaire rempli et validé, vous devriez voir celui-ci se vider, signe que le passage par create.php et le retour sur index.php s'est effectué !
Pour info, le retour sur index.php se fait grâce à la ligne <meta http-equiv="refresh" content="0;URL=../index.php" />;
Récupération des utilisateurs
Nous allons maintenant afficher les utilisateurs présents en base de données.
Pour cela nous allons créer un fichier php/affiche.php qui va afficher nos utilisateurs sous forme de tableau avec des icônes pour les modifier et les supprimer:
<?php
function afficheUser($users){
$tab = "<table border=1><tr><td>";
foreach($users as $user){
$tab .= "<tr><th>Nom</th><th>Prénom</th><th>Email</th><th>Actions</th></tr>";
$tab .= "<tr><td>".$user['nom']."</td><td>".$user['prenom']."</td><td>".$user['email']."</td>";
$tab .= "<td><form method='POST' action='php/delete.php'>";
$tab .= "<input type='image' src='img/delete_user.png' width='25'>";
$tab .= "<input type=hidden name='user_id' value='".$user['id']."'>";
$tab .= "</form>";
$tab .= "<form method='POST' action='php/modify.php'>";
$tab .= "<input type='image' src='img/modify_user.png' width='25'>";
$tab .= "<input type=hidden name='user_id' value='".$user['id']."'>";
$tab .= "</form>";
$tab .= "</td>";
}
$tab .= "</tr></table>";
return $tab;
}
function main(){
include_once("db.php");
$users = getUsers();
echo afficheUser($users);
}
main();
?>
Placez les icônes suivantes dans le répertoire img:
Nous allons maintenant appeler notre fichier dans index.php pour voir s'afficher les utilisateurs en ajoutant la ligne suivante:
include("php/affiche.php");