Un crud en php

Un crud en PHP

crud

Aujourd’hui on va voir comment faire un crud en php : Le crud est le diminutif pour designer les opérations  : create, read, update, delete, qui sont les opérations courantes d’interactions entre un site (admin) et sa base de données.

Tout administrateur doit pouvoir supprimer rajouter, mettre à jour des utilisateurs ou des produits sur son site. Ces quelques pages de code peuvent donc servir de base à un début de backoffice: pas de système de connection ici, mais des interfaces avec les opérations nécéssaires pour interagir avec la base de donnée.

  • Nous allons donc créer une base de donnée
  • Pour le rendu visuel des pages, on va importer bootstrap et inclure les dossiers à la racine de notre petit projet:
  • On va créer un fichier contenant les informations de connection à la base, puis 4 fichiers pour nos opérations CRUD.

l’index:

crud

La page read

edition

La page édition

modif

et au clic sur ‘delete’ une page de confirmation:

delete

1-La base de donnée

Dans PhpMyAdmin, je crée une base, je la nomme testphp.Dedans, en prévision d’un formulaire d’ajout bien rempli, je crée tous mes champs :

base

Normalement pour un petit crud on met juste un name et un mail, mais ici je tenais à montrer le maximum d’exemple d’input (mail, select, radio, checkbox) pour voir justement comment les traiter.

Erratum: comme me le signale un lecteur en commentaire plus bas, le numéro de tel peut etre mis de préférence dans un champ texte, soit de type « varchar » dan la base de donnée et non « int « !

2- L’Arborescence

Une fois la base crée, on peut créer notre projet sur notre serveur (wamp/www).On crée un dossier que l’on nomme comme on veut (crud ici pour l’exemple).A l’intérieur on y place les trois fichiers bootstrap js, css et img, comme ceci:

arbo

Dans ce dossier, comme sur l’image et pour prendre de l’avance, on va créer tous nos fichiers crud:

  • add.php
  • delete.php
  • edit.php
  • read.php
  • et index.php.

Contrairement à de nombreux tutos qui placent le code de connection dans chaque fichier, ici on va placer le notre dans un fichier à part qu’on va appeler database.php, et qui contiendra uniquement le code de connection à notre base testphp…c’est parti!!!

 

On commence donc par le fichier principal, database.php

<?php class Database { private static $dbName = 'testphp' ; private static $dbHost = 'localhost' ; private static $dbUsername = 'root'; private static $dbUserPassword = ''; private static $cont = null; public function __construct() { die('Init function is not allowed'); } public static function connect() { if ( null == self::$cont ) { try { self::$cont = new PDO( "mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword); } catch(PDOException $e) { die($e->getMessage()); 
        }
       }
       return self::$cont;
    }
     
    public static function disconnect()
    {
        self::$cont = null;
    }
}
?>
        

Ce fichier contient une classe qu’on va appeler « database » et qui contient les informations de connection à notre base de donnée .On instancie l’objet PDO qui nous permet le lien à la base.
Reportez vous à la doc pour en savoir plus sur l’objet PDO.

Pour aller plus vite, et permettre à tous de beaux copier coller(: ) ) je vais lister les fichiers un à un :

index.php

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Crud en php</title>
        
        	<link href="css/bootstrap.min.css" rel="stylesheet">
        	<link href="css/responsive.css" rel="stylesheet">
        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22js%2Fbootstrap.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
        

    </head>
    <body>

<br />
<div class="container">

<br />
<div class="row">

<br />
<h2>Crud en Php</h2>
<p>

</div>
<p>


<br />
<div class="row">
                
                    <a href="add.php" class="btn btn-success">Ajouter un user</a>
                

<br />
<div class="table-responsive">

<br />
<table class="table table-hover table-bordered">

<br />
<thead>


<th>Name</th>
<p>



<th>Firstname</th>
<p>



<th>Age</th>
<p>



<th>Tel</th>
<p>



<th>Pays</th>
<p>



<th>Email</th>
<p>



<th>Comment</th>
<p>



<th>metier</th>
<p>



<th>Url</th>
<p>



<th>Edition</th>
<p>

</thead>
<p>


<br />
<tbody>
                        <?php include 'database.php'; //on inclut notre fichier de connection $pdo = Database::connect(); //on se connecte à la base $sql = 'SELECT * FROM user ORDER BY id DESC'; //on formule notre requete foreach ($pdo->query($sql) as $row) { //on cree les lignes du tableau avec chaque valeur retournée
                            echo '
<br />
<tr>';
                            echo'

<td>' . $row['name'] . '</td>
<p>
';
                            echo'

<td>' . $row['firstname'] . '</td>
<p>
';
                            echo'

<td>' . $row['age'] . '</td>
<p>
';
                            echo'

<td>' . $row['tel'] . '</td>
<p>
';
                            echo'

<td>' . $row['email'] . '</td>
<p>
';
                            echo'

<td>' . $row['pays'] . '</td>
<p>
';
                            echo'

<td>' . $row['comment'] . '</td>
<p>
';
                            echo'

<td>' . $row['metier'] . '</td>
<p>
';
                            echo'

<td>' . $row['url'] . '</td>
<p>
';
                            echo '

<td>';
                            echo '<a class="btn" href="edit.php?id=' . $row['id'] . '">Read</a>';// un autre td pour le bouton d'edition
                            echo '</td>
<p>
';
                            echo '

<td>';
                            echo '<a class="btn btn-success" href="update.php?id=' . $row['id'] . '">Update</a>';// un autre td pour le bouton d'update
                            echo '</td>
<p>
';
                            echo'

<td>';
                            echo '<a class="btn btn-danger" href="delete.php?id=' . $row['id'] . ' ">Delete</a>';// un autre td pour le bouton de suppression
                            echo '</td>
<p>
';
                            echo '</tr>
<p>
';
                        }
                                                Database::disconnect(); //on se deconnecte de la base
                        ;
                        ?>    
</tbody>
<p>

</table>
<p>

</div>
<p>


</div>
<p>


</div>
<p>

    </body>
</html>
  • Comme on le voit ici, je crée d’abord ma partie html, mon tableau contenant tous les champ.
  • Je définis les différents titres de mon tableau (th) ,
  • puis de manière dynamique, je ramène dans chaque case(td) les valeurs trouvées dans la base : l’objet PDO est deja instancié dans le fichier database.php , ici j’appelle ce fichier grace au  include ‘database.php‘;
  • Je me connecte  à la base,
  • je formule ma requete SQL,
  • et pour chaque ligne retournée, je renseigne la valeur trouvée
  • enfin je crée mes trois liens sous forme de boutton, vers les pages update, delete et edit.

Pour l’instant on a pas rempli notre base, donc ce fichier ne retourne rien.Il va falloir ajouter manuellement les éléments, via notre page add.php

Add.php

Première chose à faire dans chaque fichier desormais, c’est l’appel à la base :

 require 'database.php';

Ensuite, dans ce fichier on va demander à l’utilisateur d’insérer des données, il va donc falloir traiter et sécuriser les données.

if($_SERVER["REQUEST_METHOD"]== "POST" && !empty($_POST)){

On commence par traiter la méthode de notre formulaire puis s’il a été soumis.Alors, dans ce cas on teste un a un les inputs :

On assigne une variable d’erreur

 $nameError = null;

On récupère notre valeur

$name = htmlentities(trim($_POST['name']));

On crée notre message d’erreur

 $valid = true;
        if (empty($name)) {
            $nameError = 'Please enter Name';
            $valid = false;
        }

On se connecte à la base, on formule notre requete, puis on passe au formulaire:

Voici le fichier en entier avec tous les champs input.Dans la vérification des champs on inclut la vérif par expressions régulières pour le nom, le mail, le tel, l’url.

     <?php require 'database.php'; if($_SERVER["REQUEST_METHOD"]== "POST" && !empty($_POST)){ //on initialise nos messages d'erreurs; $nameError = ''; $firstnameError=''; $ageError=''; $telError =''; $emailError =''; $paysError=''; $commentError=''; $metierError=''; $urlError=''; // on recupère nos valeurs $name = htmlentities(trim($_POST['name'])); $firstname=htmlentities(trim($_POST['firstname'])); $age = htmlentities(trim($_POST['age'])); $tel=htmlentities(trim($_POST['tel'])); $email = htmlentities(trim($_POST['email'])); $pays=htmlentities(trim($_POST['pays'])); $comment=htmlentities(trim($_POST['comment'])); $metier=htmlentities(trim($_POST['metier'])); $url=htmlentities(trim($_POST['url'])); // on vérifie nos champs $valid = true; if (empty($name)) { $nameError = 'Please enter Name'; $valid = false; }else if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameError = "Only letters and white space allowed"; } if(empty($firstname)){ $firstnameError ='Please enter firstname'; $valid= false; }else if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameError = "Only letters and white space allowed"; } if (empty($email)) { $emailError = 'Please enter Email Address'; $valid = false; } else if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) { $emailError = 'Please enter a valid Email Address'; $valid = false; } if (empty($age)) { $ageError = 'Please enter your age'; $valid = false; } if (empty($tel)) { $telError = 'Please enter phone'; $valid = false; }else if(!preg_match("#^0[1-68]([-. ]?[0-9]{2}){4}$#",$tel)){ $telError = 'Please enter a valid phone'; $valid = false; } if (!isset($pays)) { $paysError = 'Please select a country'; $valid = false; } if(empty($comment)){ $commentError ='Please enter a description'; $valid= false; } if(empty($metier)){ $metierError ='Please select a job'; $valid= false; } if(empty($url)){ $urlError ='Please enter website url'; $valid= false; } else if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$url)) { $urlError='Enter a valid url'; $valid=false; } // si les données sont présentes et bonnes, on se connecte à la base if ($valid) { $pdo = Database::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = "INSERT INTO user (name,firstname,age,tel, email, pays,comment, metier,url) values(?, ?, ?, ? , ? , ? , ? , ?, ?)";
            $q = $pdo->prepare($sql);
            $q->execute(array($name,$firstname, $age, $tel, $email,$pays,$comment, $metier, $url));
            Database::disconnect();
            header("Location: index.php");
        }
    }
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Crud</title>
        	<link href="css/bootstrap.min.css" rel="stylesheet">
        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22js%2Fbootstrap.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
        
    </head>
    <body>



<br />
<div class="container">

<br />
<div class="row">

<br />
<h3>Ajouter un contact</h3>
<p>

</div>
<p>

<br />
<form method="post" action="add.php">

<br />
<div class="control-group <?php echo !empty($nameError)?'error':'';?>">
                        <label class="control-label">Name</label>

<br />
<div class="controls">
                            <input name="name" type="text"  placeholder="Name" value="<?php echo !empty($name)?$name:'';?>">
                            <?php if (!empty($nameError)): ?>
                                <span class="help-inline"><?php echo $nameError;?></span>
                            <?php endif; ?>
</div>
<p>

</div>
<p>

                

<br />
<div class="control-group<?php echo !empty($firstnameError)?'error':'';?>">
                    <label class="control-label">firstname</label>

<br />
<div class="controls">
                            <input type="text" name="firstname" value="<?php echo !empty($firstname)?$firstname:''; ?>">
                            <?php if(!empty($firstnameError)):?>
                            <span class="help-inline"><?php echo $firstnameError ;?></span>
                            <?php endif;?>
</div>
<p>

</div>
<p>


<br />
<div class="control-group<?php echo !empty($ageError)?'error':'';?>">
                    <label class="control-label">age</label>

<br />
<div class="controls">
                            <input type="date" name="age" value="<?php echo !empty($age)?$age:''; ?>">
                            <?php if(!empty($ageError)):?>
                            <span class="help-inline"><?php echo $ageError ;?></span>
                            <?php endif;?>
</div>
<p>

</div>
<p>

                 

<br />
<div class="control-group <?php echo !empty($emailError)?'error':'';?>">
                        <label class="control-label">Email Address</label>

<br />
<div class="controls">
                            <input name="email" type="text" placeholder="Email Address" value="<?php echo !empty($email)?$email:'';?>">
                            <?php if (!empty($emailError)): ?>
                                <span class="help-inline"><?php echo $emailError;?></span>
                            <?php endif;?>
</div>
<p>

</div>
<p>

                

<br />
<div class="control-group <?php echo !empty($telError)?'error':'';?>">
                        <label class="control-label">Telephone</label>

<br />
<div class="controls">
                            <input name="tel" type="text" placeholder="Telephone" value="<?php echo !empty($tel) ? $tel:'';?>">
                            <?php if (!empty($telError)): ?>
                                <span class="help-inline"><?php echo $telError;?></span>
                            <?php endif;?>
</div>
<p>

</div>
<p>

                

<br />
<div class="control-group<?php echo !empty($paysError)?'error':'';?>">
                 <select name="pays">

<option value="paris">Paris</option>

<option value="londres">Londres</option>

<option value="amsterdam">Amsterdam</option>

</select>
                     <?php if (!empty($paysError)): ?>
                                <span class="help-inline"><?php echo $paysError;?></span>
                            <?php endif;?>
</div>
<p>

                

<br />
<div class="control-group<?php echo !empty($metierError)?'error':'';?>">
                    <label class="checkbox-inline">Metier</label>

<br />
<div class="controls">
                        Dev : <input type="checkbox" name="metier" value="dev" <?php if (isset($metier) && $metier == "dev") echo "checked"; ?>>
                        Integrateur <input type="checkbox" name="metier" value="integrateur" <?php if (isset($metier) && $metier == "integrateur") echo "checked"; ?>>
                        Reseau <input type="checkbox" name="metier" value="reseau" <?php if (isset($metier) && $metier == "reseau") echo "checked"; ?>>
</div>
<p>

                     <?php if (!empty($metierError)): ?>
                                <span class="help-inline"><?php echo $metierError;?></span>
                            <?php endif;?>
</div>
<p>

                 

<br />
<div class="control-group  <?php echo !empty($urlError)?'error':'';?>">
                    <label class="control-label">Siteweb</label>

<br />
<div class="controls">
                       <input type="text" name="url" value="<?php echo !empty($url)? $url:'' ; ?>">
                        <?php if(!empty($urlError)):?>
                       <span class="help-inline"><?php echo $urlError ;?></span>
                       <?php endif;?>
</div>
<p>

</div>
<p>

                

<br />
<div class="control-group <?php echo !empty($commentError)?'error':'';?>">
                    <label class="control-label">Commentaire </label>

<br />
<div class="controls">
                           <textarea rows="4" cols="30" name="comment" ><?php if(isset($comment)) echo $comment;?></textarea>    
                            <?php if(!empty($commentError)):?>
                               <span class="help-inline"><?php echo $commentError ;?></span>
                            <?php endif;?>
</div>
<p>

</div>
<p>


<br />
<div class="form-actions">
                 <input type="submit" class="btn btn-success" name="submit" value="submit">
                 <a class="btn" href="index.php">Retour</a>
</div>
<p>

            </form>
<p>
            
            
            
</div>
<p>

        
    </body>
</html>

Editer

La page edit.php est sans doute la plus simple, ici pas d’opération complexe, mais juste la lecture d’un élément du tableau.

  • On inclut notre fichier de connection
  • On initialise une variable $id,
  • si on a bien un id envoyé dans l’url ($_GET), on le récupère.( le lien crée en index.php « href=« delete.php?id=‘ . $row[‘id’] . ‘  » attend cet id en paramètre)
  • s’il n’y pas d’id, on redirige vers l’index.
  • Autrement,  on se connecte à la base et avec une requete Select toute simple sur l’id,  on affiche simplement chaque élément retourné.
<?php require('database.php'); //on appelle notre fichier de config $id = null; if (!empty($_GET['id'])) { $id = $_REQUEST['id']; } if (null == $id) { header("location:index.php"); } else { //on lance la connection et la requete $pdo = Database ::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) .
    $sql = "SELECT * FROM user where id =?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    Database::disconnect();
}



/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        	<link href="css/bootstrap.min.css" rel="stylesheet">
        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22js%2Fbootstrap.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
    </head>

    <body>

<br />
<div class="container">


<br />
<div class="span10 offset1">

<br />
<div class="row">

<br />
<h3>Edition</h3>
<p>

</div>
<p>



<br />
<div class="form-horizontal" >

<br />
<div class="control-group">
                        <label class="control-label">Name</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['name']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="control-group">
                        <label class="control-label">Firstname</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['firstname']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="control-group">
                        <label class="control-label">Email Address</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['email']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="control-group">
                        <label class="control-label">Phone</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['tel']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="control-group">
                        <label class="control-label">Pays</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['pays']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="control-group">
                        <label class="control-label">Metier</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['metier']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="control-group">
                        <label class="control-label">Url</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['url']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="control-group">
                        <label class="control-label">Comment</label>

<br />
<div class="controls">
                            <label class="checkbox">
                                <?php echo $data['comment']; ?>
                            </label>
</div>
<p>

</div>
<p>


<br />
<div class="form-actions">
                        <a class="btn" href="index.php">Back</a>
</div>
<p>



</div>
<p>

</div>
<p>


</div>
<p>
<!-- /container -->
    </body>
</html>

 

Mettre à jour

Pour ce fichier et sa partie html, on peut reprendre le fichier add et faire un copier coller du tableau.C’est la requete qui change ici:

  <?php require 'database.php'; $id = null; if ( !empty($_GET['id'])) { $id = $_REQUEST['id']; } if ( null==$id ) { header("Location: index.php"); } if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST)) { // on initialise nos erreurs $nameError = null; $firstnameError = null; $ageError = null; $telError = null; $emailError = null; $paysError = null; $commentError = null; $metierError = null; $urlError = null; // On assigne nos valeurs $name = $_POST['name']; $firstname = $_POST['firstname']; $age = $_POST['age']; $tel = $_POST['tel']; $email = $_POST['email']; $pays = $_POST['pays']; $comment = $_POST['comment']; $metier = $_POST['metier']; $url = $_POST['url']; // On verifie que les champs sont remplis $valid = true; if (empty($name)) { $nameError = 'Please enter Name'; $valid = false; } if (empty($firstname)) { $firstnameError = 'Please enter firstname'; $valid = false; } if (empty($email)) { $emailError = 'Please enter Email Address'; $valid = false; } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailError = 'Please enter a valid Email Address'; $valid = false; } if (empty($age)) { $ageError = 'Please enter your age'; $valid = false; } if (empty($tel)) { $telError = 'Please enter phone'; $valid = false; } if (!isset($pays)) { $paysError = 'Please select a country'; $valid = false; } if (empty($comment)) { $commentError = 'Please enter a description'; $valid = false; } if (!isset($metier)) { $metierError = 'Please select a job'; $valid = false; } if (empty($url)) { $urlError = 'Please enter website url'; $valid = false; } // mise à jour des donnés if ($valid) { $pdo = Database::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
             
                $sql = "UPDATE user SET name = ?,firstname = ?,age = ?,tel = ?, email = ?, pays = ?, comment = ?, metier = ?, url = ? WHERE id = ?";
                $q = $pdo->prepare($sql);
                $q->execute(array($name,$firstname, $age, $tel, $email,$pays,$comment, $metier, $url,$id));
                Database::disconnect();
                header("Location: index.php");
            } 
           }else {

                 $pdo = Database::connect();
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = "SELECT * FROM user where id = ?";
                $q = $pdo->prepare($sql);
                $q->execute(array($id));
                $data = $q->fetch(PDO::FETCH_ASSOC);
                $name = $data['name'];
                $firstname = $data['firstname'];
                $age = $data['age'];
                $tel = $data['tel'];
                $email = $data['email'];
                $pays = $data['pays'];
                $comment = $data['comment'];
                $metier = $data['metier'];
                $url = $data['url'];
                Database::disconnect();
            }
        
        ?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Crud-Update</title>
        	<link href="css/bootstrap.min.css" rel="stylesheet">
        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22js%2Fbootstrap.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />

    </head>
    <body>
     

<br />
<div class="container">

<br />
<div class="row">

<br />
<h3>Modifier un contact</h3>
<p>

</div>
<p>

<br />
<form method="post" action="update.php?id=<?php echo $id ;?>">

<br />
<div class="control-group <?php echo!empty($nameError) ? 'error' : ''; ?>">
                    <label class="control-label">Name</label>

<br />
<div class="controls">
                        <input name="name" type="text"  placeholder="Name" value="<?php echo!empty($name) ? $name : ''; ?>">
                        <?php if (!empty($nameError)): ?>
                            <span class="help-inline"><?php echo $nameError; ?></span>
                        <?php endif; ?>
</div>
<p>

</div>
<p>



<br />
<div class="control-group<?php echo!empty($firstnameError) ? 'error' : ''; ?>">
                    <label class="control-label">firstname</label>

<br />
<div class="controls">
                        <input type="text" name="firstname" value="<?php echo!empty($firstname) ? $firstname : ''; ?>">
                        <?php if (!empty($firstnameError)): ?>
                            <span class="help-inline"><?php echo $firstnameError; ?></span>
                        <?php endif; ?>
</div>
<p>

</div>
<p>


<br />
<div class="control-group<?php echo!empty($ageError) ? 'error' : ''; ?>">
                    <label class="control-label">age</label>

<br />
<div class="controls">
                        <input type="number" name="age" value="<?php echo!empty($age) ? $age : ''; ?>">
                        <?php if (!empty($ageError)): ?>
                            <span class="help-inline"><?php echo $ageError; ?></span>
                        <?php endif; ?>
</div>
<p>

</div>
<p>



<br />
<div class="control-group <?php echo!empty($emailError) ? 'error' : ''; ?>">
                    <label class="control-label">Email Address</label>

<br />
<div class="controls">
                        <input name="email" type="text" placeholder="Email Address" value="<?php echo!empty($email) ? $email : ''; ?>">
                        <?php if (!empty($emailError)): ?>
                            <span class="help-inline"><?php echo $emailError; ?></span>
                        <?php endif; ?>
</div>
<p>

</div>
<p>



<br />
<div class="control-group <?php echo!empty($telError) ? 'error' : ''; ?>">
                    <label class="control-label">Telephone</label>

<br />
<div class="controls">
                        <input name="tel" type="text" placeholder="Telephone" value="<?php echo!empty($tel) ? $tel : ''; ?>">
                        <?php if (!empty($telError)): ?>
                            <span class="help-inline"><?php echo $telError; ?></span>
                        <?php endif; ?>
</div>
<p>

</div>
<p>



<br />
<div class="control-group<?php echo!empty($paysError) ? 'error' : ''; ?>">
                    <select name="pays">

<option value="paris">Paris</option>

<option value="londres">Londres</option>

<option value="amsterdam">Amsterdam</option>

</select>
                    <?php if (!empty($paysError)): ?>
                        <span class="help-inline"><?php echo $paysError; ?></span>
                    <?php endif; ?>
</div>
<p>



<br />
<div class="control-group<?php echo!empty($metierError) ? 'error' : ''; ?>">
                    <label class="checkbox-inline">Metier</label>

<br />
<div class="controls">
                        Dev : <input type="checkbox" name="metier" value="dev" <?php if (isset($metier) && $metier == "dev") echo "checked"; ?>>
                        Integrateur <input type="checkbox" name="metier" value="integrateur" <?php if (isset($metier) && $metier == "integrateur") echo "checked"; ?>>
                        Reseau <input type="checkbox" name="metier" value="reseau" <?php if (isset($metier) && $metier == "reseau") echo "checked"; ?>>
</div>
<p>

                    <?php if (!empty($metierError)): ?>
                        <span class="help-inline"><?php echo $metierError; ?></span>
                    <?php endif; ?>
</div>
<p>



<br />
<div class="control-group  <?php echo!empty($urlError) ? 'error' : ''; ?>">
                    <label class="control-label">Siteweb</label>

<br />
<div class="controls">
                        <input type="text" name="url" value="<?php echo!empty($url) ? $url : ''; ?>">
                        <?php if (!empty($urlError)): ?>
                            <span class="help-inline"><?php echo $urlError; ?></span>
                        <?php endif; ?>
</div>
<p>

</div>
<p>



<br />
<div class="control-group <?php echo!empty($commentError) ? 'error' : ''; ?>">
                    <label class="control-label">Commentaire </label>

<br />
<div class="controls">
                        <textarea rows="4" cols="30" name="comment" ><?php if (isset($comment)) echo $comment; ?></textarea>    
                        <?php if (!empty($commentError)): ?>
                            <span class="help-inline"><?php echo $commentError; ?></span>
                        <?php endif; ?>
</div>
<p>

</div>
<p>


<br />
<div class="form-actions">
                    <input type="submit" class="btn btn-success" name="submit" value="submit">
                    <a class="btn" href="index.php">Retour</a>
</div>
<p>

            </form>
<p>



</div>
<p>


    </body>
</html>

Quand on est sur une ligne du tableau et qu’on veut supprimer ou mettre à jour, on renvoie vers un lien contenant l’id de la ligne à supprimer.Ce sont nos liens dans la page index.php

href="delete.php?id=' . $row['id'] . ' "

href="update.php?id=' . $row['id'] . ' "

Ces quelque lignes en début de fichier sont donc la pour tester qu’on a bien un Id passé en paramètre dans notre url, via notre lien:

  $id = null;
	if ( !empty($_GET['id'])) {
		$id = $_REQUEST['id'];
	}
	
	if ( null==$id ) {
		header("Location: index.php");
	}

dans ce fichier on va modifier et insérer des données dans la base, on enchaine donc avec toutes les vérif nécessaires.

Puis on se connecte à la base, on a ici deux requetes, une pour l’affichage des données, puis une pour l’UPDATE des données.Sans la première on se retrouverait avec un tableau vide.Les deux requetes sont donc necessaires.

 

Supprimer

Dans notre tableau d’index, on a enfin un dernier bouton, « delete ».Ce lien renvoie vers notre fichier delete.php qui est beaucoup plus simple, une petite interface qui demande à l’utilisateur la confirmation de suppression.A l’intérieur de ce fichier, une requete de suppression et le petit formulaire de confirmation

<?php require 'database.php'; $id=0; if(!empty($_GET['id'])){ $id=$_REQUEST['id']; } if(!empty($_POST)){ $id= $_POST['id']; $pdo=Database::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $sql = "DELETE FROM user  WHERE id = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($id));
        Database::disconnect();
        header("Location: index.php");
    
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    	<link href="css/bootstrap.min.css" rel="stylesheet">
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22js%2Fbootstrap.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
</head>
 
<body>

<br />
<div class="container">
     

<br />
<div class="span10 offset1">

<br />
<div class="row">

<br />
<h3>Delete a user</h3>
<p>

</div>
<p>

                     
<br />
<form class="form-horizontal" action="delete.php" method="post">
                      <input type="hidden" name="id" value="<?php echo $id;?>"/>
                      
Are you sure to delete ?

<br />
<div class="form-actions">
                          <button type="submit" class="btn btn-danger">Yes</button>
                          <a class="btn" href="index.php">No</a>
</div>
<p>

                    </form>
<p>
</div>
<p>

                 
</div>
<p>
<!-- /container -->
  </body>
</html>

Et voila, on a ici notre petite appli qui fonctionne, on peut rajouter des users dans la base via notre fichier add.php, et ensuite les mettre à jour les supprimer ou les lire tout simplement.
Dans le prochain tuto, on verra comment rajouter la un espace de connexion.

12 commentaires sur “Un crud en php

  1. xketcuup

    Bonjour, serait-il possible d’avoir les fichiers .css et .js si possible?
    Merci d’avance

  2. yuyazz

    Bonjour, en fait les fichiers css et js sont ceux de bootstrap tout simplement à télécharger sur leur site directement

  3. Abdel

    Bonjour,
    après avoir exécuté le code, j’ai l’erreur suivante : (could not find driver), est-ce que vous avez une idée de comment la corriger ?

  4. yuyazz

    Bonjour et désolé pour ce retard, dans ce cas il faut installer le module pdo_mysql sur le serveur, il manque peut etre ta version de php dans la variable d’environnement dans le path, si tu tapes « could not find driver Crud » dans google tu aura plein de pistes pour régler ce problème!

  5. MeikoNi

    Hello !
    Dans un premier temps merci beaucoup pour ton tuto !
    Et dans un second temps je ne sais pas si tu as remarqué mais pour les numéros de téléphone le 0 du début (ex: 06 16 ** ** **) disparait.
    Je pense que ceci est expliqué par le fait que dans ta base de données le type de “tel” est un int. Et sauf erreur de ma part un varchar est plus adapté pour un numéro.

    Voila !
    Et encore merci.

  6. Niko

    ( ! ) Notice: Undefined variable: row in C:\wamp64\www\CRUD\index.php on line 105

    J’ai cette erreur en allant sur la page d’index

  7. Laurent

    Bonjour,

    Merci pour votre tuto, je le trouve très instructif
    Comme je suis totalement débutant en php et mysql, je rencontre une erreur lorsque je fichier index.php est chargé.
    Celui ci renvoi une erreur que je ne sais pas résoudre, pourriez vous m’aider svp ?

    voici le lien vers ma page :
    s529471052.onlinehome.fr/bs3/gpio/index_bs.php

    Merci beaucoup,

  8. john

    Bonjour,
    J’ai l’erreur suivante quand je démarrer index.php
    Parse error: syntax error, unexpected ‘}’ in C:\wamp\www\crud\index.php on line 172

  9. copier coller Auteur de l'article

    Bonjour, désolé pour le temps de réponse. Ce la signifie qu’il y a soit dans le code fourni, soit dans le copier coller un ‘}’ en trop ou une autre erreur avant cette ligne..Il faudrait que je reteste le code.. merci pour le signalement !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.