Php pdo
Installation
Les paquetages
Pour développer en PHP et utiliser MySQL, il ne faut pas oublier d'installer les paquetages suivants :
# 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=modify.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><th>Nom</th><th>Prénom</th><th>Email</th><th>Actions</th></tr>";
foreach($users as $user){
$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='id' value='".$user['id']."'>";
$tab .= "</form>";
$tab .= "<form method='POST' action='php/form.php'>";
$tab .= "<input type='image' src='img/modify_user.png' width='25'>";
$tab .= "<input type=hidden name='id' value='".$user['id']."'>";
$tab .= "<input type=hidden name='nom' value='".$user['nom']."'>";
$tab .= "<input type=hidden name='prenom' value='".$user['prenom']."'>";
$tab .= "<input type=hidden name='email' value='".$user['email']."'>";
$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");
Vous devriez voir le tableau suivant:
Modification des utilisateurs
Lorsque vous cliquez sur le bouton vous êtes redirigé vers la page form.php qui détecte les variables présentes dans le tableau $_POST et remplie les champs de la manière suivante:
Il ne nous reste plus qu'à créer la page php/modify.php pour que la validation du formulaire soit prise en compte en base:
<?php
include_once("db.php");
$id=""; $nom=""; $prenom=""; $email="";
if(isset($_POST) && !empty($_POST)){
$id=$_POST['id'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
modifyUserById($nom, $prenom, $email, $id);
}
echo '<meta http-equiv="refresh" content="0;URL=../index.php" />';
?>
Suppression des utilisateurs
Pour pouvoir supprimer des utilisateurs, il faut créer la page php/delete.php qui récupère l'identifiant de l'utilisateur à supprimer:
<?php
include_once("db.php");
$id="";
if(isset($_POST) && !empty($_POST)){
$id=$_POST['id'];
delUserById($id);
}
echo '<meta http-equiv="refresh" content="0;URL=../index.php" />';
?>