Différences entre versions de « Php pdo »
(10 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
= Installation = | = Installation = | ||
− | == Les | + | == Les paquetages == |
− | Pour développer en PHP et utiliser ''MySQL'', il ne faut pas oublier d'installer les | + | Pour développer en PHP et utiliser ''MySQL'', il ne faut pas oublier d'installer les paquetages suivants : |
− | < | + | <source lang="bash" style="border:1px solid black;font-size:120%"> |
# yum -y install php php-mysql mysql mysql-server httpd | # yum -y install php php-mysql mysql mysql-server httpd | ||
− | </ | + | </source> |
Paramétrez votre base [[Sql_install | MySQL ]] ainsi que votre serveur [[HTTPD | HTTPD]]. | Paramétrez votre base [[Sql_install | MySQL ]] ainsi que votre serveur [[HTTPD | HTTPD]]. | ||
Ligne 84 : | Ligne 84 : | ||
function getUserById($id){ | function getUserById($id){ | ||
global $db; | global $db; | ||
− | $select = $db->prepare('SELECT id, nom, prenom, email FROM personnes WHERE id=' | + | $select = $db->prepare('SELECT id, nom, prenom, email FROM personnes WHERE id=:id'); |
− | $select->execute(); | + | $select->execute(array('id' => $id)); |
$result = $select->fetchAll(); | $result = $select->fetchAll(); | ||
return $result[0]; | return $result[0]; | ||
Ligne 137 : | Ligne 137 : | ||
} | } | ||
?> | ?> | ||
− | <form method="post" <?php if(!empty($id)){echo "action= | + | <form method="post" <?php if(!empty($id)){echo "action=modify.php";}else{echo "action=php/create.php";} ?> > |
<table> | <table> | ||
<tr> | <tr> | ||
Ligne 205 : | Ligne 205 : | ||
Nous allons maintenant afficher les utilisateurs présents en base de données. | 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:<source lang="php" style="border:1px solid black;font-size:120%"> | + | 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: |
+ | <source lang="php" style="border:1px solid black;font-size:120%"> | ||
<?php | <?php | ||
function afficheUser($users){ | function afficheUser($users){ | ||
− | $tab = "<table border=1><tr>< | + | $tab = "<table border=1><tr><th>Nom</th><th>Prénom</th><th>Email</th><th>Actions</th></tr>"; |
foreach($users as $user){ | foreach($users as $user){ | ||
− | |||
$tab .= "<tr><td>".$user['nom']."</td><td>".$user['prenom']."</td><td>".$user['email']."</td>"; | $tab .= "<tr><td>".$user['nom']."</td><td>".$user['prenom']."</td><td>".$user['email']."</td>"; | ||
$tab .= "<td><form method='POST' action='php/delete.php'>"; | $tab .= "<td><form method='POST' action='php/delete.php'>"; | ||
$tab .= "<input type='image' src='img/delete_user.png' width='25'>"; | $tab .= "<input type='image' src='img/delete_user.png' width='25'>"; | ||
− | $tab .= "<input type=hidden name=' | + | $tab .= "<input type=hidden name='id' value='".$user['id']."'>"; |
$tab .= "</form>"; | $tab .= "</form>"; | ||
− | $tab .= "<form method='POST' action='php/ | + | $tab .= "<form method='POST' action='php/form.php'>"; |
$tab .= "<input type='image' src='img/modify_user.png' width='25'>"; | $tab .= "<input type='image' src='img/modify_user.png' width='25'>"; | ||
− | $tab .= "<input type=hidden name=' | + | $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 .= "</form>"; | ||
$tab .= "</td>"; | $tab .= "</td>"; | ||
Ligne 242 : | Ligne 245 : | ||
include("php/affiche.php"); | include("php/affiche.php"); | ||
</source> | </source> | ||
+ | Vous devriez voir le tableau suivant: | ||
+ | [[Fichier:User tab pdo.png|centré]] | ||
== Modification des utilisateurs == | == Modification des utilisateurs == | ||
+ | Lorsque vous cliquez sur le bouton [[Fichier:Modify user.png]] 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: | ||
+ | [[Fichier:Form sql full.png|centré]] | ||
+ | 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: | ||
+ | <source lang="php" style="border:1px solid black;font-size:120%"> | ||
+ | <?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" />'; | ||
+ | ?> | ||
+ | </source> | ||
== Suppression des utilisateurs == | == 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: | ||
+ | <source lang="php" style="border:1px solid black;font-size:120%"> | ||
+ | <?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" />'; | ||
+ | ?> | ||
+ | </source> |
Version actuelle datée du 6 décembre 2018 à 15:53
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(array('id' => $id));
$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" />';
?>