NoShade.net est en vente — Contactez nous si vous êtes intéressé
Le siteTutoriauxInterviews
icone RSS NoShade.net

Accueil » Tutoriaux » PHP » Chapitre 4.4 : Modifier du contenu dans une BDD

Les tutoriaux Php

4.4 Modifier le contenu d'une table


Quelques arrangements...



Puisque nous sommes là en train de monter un vrai petit logiciel de gestion de livres, autant le rendre un peu plus pratique.

Notre but, dans ce chapitre, sera d'apprendre à modifier les fiches de nos livres que nous avons listés.
Dans le chapitre suivant, nous apprendrons à supprimer une fiche.
Pour préparer ce cours, et en prévision du chapitre suivant, nous allons donc rajouter des liens "Modifier" et "Supprimer" à côté des informations de chaque fiches.

Nous ferons d'ailleurs passer l'id de la fiche à traiter (à modifier, ou à supprimer) dans une variable $_GET, ce qui nous permettra de savoir quelle fiche nous allons traiter dans ces nouvelles pages que nous allons créer.
Nous en reparlerons en temps voulu, commençons déjà par créer les liens en question. :)

Reprenons notre page "index.php".

Allez, on va se permettre une petite folie avec un poil de CSS, car pour l'instant, c'est vraiment... très pas beau tout ça :)
On va choisir une police plus jolie, du Arial, réduire un peu la taille de celle-ci, créer un bloc par fiche de bouquin et créer une classe pour venir afficher nos liens "Modifier" et "Supprimer" à droite de ces blocs.

Nous avons donc à modifier le contenu de la boucle while, en plus de devoir ajouter un peu de CSS dans notre page.
A noter également que, jusqu'à maintenant, j'ai affiché les accents tels quels dans les portions de code, ce qui pose problème une fois affiché dans le navigateur web, je vais donc à partir de maintenant afficher les accents en html dans le code, en théorie, vous ne devriez pas avoir de problème avec ça. :)

<?php include('connexion.inc.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

    <head>
        <title>Mes bouquins</title>
    </head>
    <style>
    body {
    font-family: Arial, Sans-Serif;
    font-size: 12px; }

    .fiche {
    background-color: #E0E0E0;
    margin: 10px 30px 5px 30px;
    padding: 5px; }

    .floatadroite {
    float: right;
    text-align: left; }
    </style>
    <body>
<h1>Liste de mes bouquins</h1>
<?php
    
// On demande a MySQL de nous selectionner tous les bouquins enregistres
    
$demande mysql_query('SELECT * FROM bouquins ORDER BY id DESC');
    
// On fait une boucle ou l'on met en array (tableau) toutes les donnees trouvees
    
while ($donnees mysql_fetch_array($demande))
    {
    echo 
'<div class="fiche">';
    echo 
'<div class="floatadroite">';
    echo 
'<a href="gestion_ajoutlivre.php?modification=' $donnees['id'] . '" title="Modifier la fiche">Modifier</a><br />';
    echo
'<a href="gestion_supprimerlivre.php?supprimer=' $donnees['id'] . '" title="Supprimer la fiche">Supprimer</a>';
    echo 
'</div>';
    echo 
'&Eacute;diteur : ' $donnees['editeur'] . '<br />';
    echo 
'Collection : ' $donnees['collection'] . '<br />';
    if (
$donnees['pret'] != NULL)
    { echo 
'Pr&ecirc;t&eacute; &agrave; : ' $donnees['pret'] . '<br />'; }
    else { }
    echo 
'Titre : ' $donnees['titre'] . '<br />';
    echo 
'Genre : ' $donnees['genre'] . '<br />';
    echo 
'Prix : ' $donnees['prix'] . '<br />';
    if (
$donnees['notes'] != NULL)
    { echo 
'Notes personnelles : ' nl2br($donnees['notes']) . '<br />'; }
    else { }
    echo 
'</div>';
    }
?>
    </body>
</html>
<?php mysql_close?>


Voilà!

J'espère que vous avez tout compris là-dedans, prenez bien le temps de lire et relire ce code pour comprendre ce que nous y faisons.


Si vous l'avez compris, vous aurez donc déjà le nom de la prochaine page que nous allons créer : gestion_ajoutlivre.php
Mais!?
Elle existe déjà celle là!!!
En effet. :)
Nous allons ré-utiliser cette même page pour la modification des fiches!

Le principe est simple.
Une fois cliqué sur le lien "Modifier" de la fiche d'un bouquin, nous allons atterrir sur la page "gestion_ajoutlivre.php", avec en prime une variable $_GET contenant le numéro de l'id de cette même fiche, que nous voulons modifier.
A partir de ce numéro, nous allons sélectionner l'entrée qui lui correspond sur la base de données, pour en récupérer les informations (Éditeur, titre, prix, ...).
Nous placerons ces informations dans les champs de textes de cette page.

Ainsi, si l'on veut par exemple corriger une faute de frappe dans le titre du bouquin, nous n'aurons cas... la modifier, puis valider la modification. ;)

Nous allons en profiter pour revoir nos conditions de plus près.
En effet, étant donné que si l'on souhaite modifier une fiche, nous aurons obligatoirement une variable $_GET['modification'], nous allons pouvoir créer quelques conditions, pour afficher un contenu différent dans la page, selon s'il s'agit d'une modification de fiche, ou de l'ajout d'une fiche.

Voyons donc dès maintenant le code complet de la page "gestion_ajoutlivre.php". Ne prenez pas peur, lisez le très lentement, comprenez-en chaque lignes, j'ai tenté de le commenter un maximum.

<?php include('connexion.inc.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>Mes bouquins - Ajouter un livre</title>
    </head>
    <body>
<?php
if(isset($_GET['modification'])) // Si il y a une demande de modification
{
$id $_GET['modification']; // Mise en variable simple de l'id
echo '<h1>Modifier un livre</h1>'// On ecrit le titre "Modifier un livre"

// Le formulaire pointe vers une autre page pour enregistrer les nouvelles donnees
echo '<form id="modif_livre" action="gestion_modiflivre_enregistrement.php" method="post" name="modif_livre">';

// On cree un champ cache (hidden) contenant en valeur l'id de la fiche a modifier
// L'id, nous l'avons transmis via une variable $_GET, vous vous souvenez? :)
echo '<input type="hidden" name="id" value="' $_GET['modification'] . '" />';

    
// On va maintenant recuperer les informations de la fiche existante qui a cet id
    
$demande mysql_query('SELECT * FROM bouquins WHERE id=' $id);
    while (
$donnees mysql_fetch_array($demande))
    {
    
// Mise en variables simples des informations existantes de la fiche
    
$editeur    $donnees['editeur'];
    
$collection $donnees['collection'];
    
$pret       $donnees['pret'];
    
$titre      $donnees['titre'];
    
$genre      $donnees['genre'];
    
$prix       $donnees['prix'];
    
$notes      $donnees['notes'];
    
// Nous allons ensuite, dans le code, placer des balises PHP,
    // pour ecrire ces valeurs, dans les champs correspondants
    
}
}

else 
// Si ce n'est pas une modification, c'est donc que c'est un ajout de livre
{
// On affiche donc le titre de la page "Ajouter" et non "Modifier" un livre
echo '<h1>Ajouter un livre</h1>';
// Le formulaire pointe vers la page d'enregistrement de nouveaux livres
echo '<form id="ajout_livre" action="gestion_ajoutlivre_enregistrement.php" method="post" name="ajout_livre">';

// La variable simple "prix" vaudra 00,00 par defaut
// Cela permet de remplir de la valeur "00,00" le champ "Prix",
// dans le cas d'un simple ajout de livre.
// On appelle cela "initialiser" une variable.
$prix '00,00';
}
?>

<table border="0" cellspacing="0" cellpadding="4">
    <tr>
        <td align="right" width="174">&Eacute;diteur</td>
        <td><input type="text" name="editeur" size="40" value="<?php echo $editeur; ?>" /></td>
    </tr>
    <tr>
        <td align="right" width="174">Collection</td>
        <td><input type="text" name="collection" size="40" value="<?php echo $collection; ?>" /></td>
    </tr>
    <tr>
        <td align="right" width="174">Pr&ecirc;t</td>
        <td><input type="text" name="pret" size="40" value="<?php echo $pret; ?>" /></td>
    </tr>
    <tr>
        <td align="right" width="174">Titre</td>
        <td><input type="text" name="titre" size="40" value="<?php echo $titre; ?>" /></td>
    </tr>
    <tr>
        <td align="right" width="174">Genre</td>
        <td><select name="genre" size="1">
<?php
if(isset($_GET['modification']))
{
    
// S'il on est dans le cas d'une modification
    // On rajoute une option de menu deroulant contenant le choix actuel
    // Cela evite de devoir re-selectionner le choix du genre si l'on modifie une fiche
    // A notter qu'on utilise la $genre dans la veleur et le nom de l'option
    
echo '<option value="' $genre '">Choix actuel : ' $genre '</option>';
}
else { }
?>
                <option value="BD">BD</option>
                <option value="Formation">Formation</option>
                <option value="Mangas">Mangas</option>
                <option value="Roman">Roman</option>
            </select></td>
    </tr>
    <tr>
        <td align="right" width="174">Prix</td>
        <td><input type="text" name="prix" value="<?php echo $prix; ?>" size="11" /></td>
    </tr>
    <tr>
        <td align="right" width="174">Notes</td>
        <td><textarea name="notes" rows="4" cols="40"><?php echo $notes; ?></textarea></td>
    </tr>
    <tr>
        <td align="right" width="174"></td>
<?php
// On affiche un bouton de validation au contenu different
// en fonction de si c'est une modification ou ajout de fiche
// Subtil hein? :D
if(isset($_GET['modification']))
{
    echo 
'<td><input type="submit" name="modif_livre" value="Enregistrer les modifications" /></td>';
}
else
{
    echo 
'<td><input type="submit" name="ajout_livre" value="Ajouter ce livre" /></td>';
}
?>
    </tr>
</table>
</form>
    </body>
</html>
<?php mysql_close?>


Ouch!
Hé oui, là, on dépasse les 100 lignes de code... Ca va aller?
J'espère que vous aurez parfaitement compris ce code, il est vraiment important que chaque lignes vous parlent, et si vous n'êtes pas encore capables de refaire la même chose à partir d'un fichier vierge, je ne vous en voudrais pas, c'est le genre de choses qui viennent à force de pratiquer, de s'acharner un peu, tout ça tout ça... l'expérience on appelle ça me semble-t-il! :D

Nous reste maintenant à créer notre petite page "gestion_modiflivre_enregistrement.php", celle-ci sera très similaire à la page "gestion_ajoutlivre_enregistrement.php", à la grande différence près de la requête MySQL, qui est maintenant une requête de modification, et non de création d'entrées.

Là encore, lisez chaque lignes pour bien comprendre ce que l'on fabrique avec tout ce charabia. :)

<?php
    
include('connexion.inc.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>Mes bouquins - Modification du livre</title>
    </head>
    <body>
<h1>Modification du livre</h1>

<?php
    
// Mise en variables simples des valeurs du formulaire
    
$id         $_POST['id'];
    
$editeur    addslashes($_POST['editeur']);
    
$collection addslashes($_POST['collection']);
    
$pret       addslashes($_POST['pret']);
    
$titre      addslashes($_POST['titre']);
    
$genre      addslashes($_POST['genre']);
    
$prix       addslashes($_POST['prix']);
    
$notes      addslashes($_POST['notes']);

    
// On verifie qu'il y a bien eu un envoi de donnees.
    // Pour cela, on verifie la presence d'une variable $_POST['id']
    
if(isset($_POST['id']))
    {
        
// Modification de l'entree dans la base de donnees
        // UPDATE bouquins > mettre a jour la table bouquins
        // SET editeur = $editeur > on demande a mettre le contenu de la variable $editeur dans le champ "editeur" de la table
        // Il en va de meme pour tous les champs...
        // On finit en precisant WHERE id=$id, pour preciser quelle entree nous voulons editer dans la table
        
mysql_query("UPDATE bouquins SET editeur='" . $editeur . "', collection='" . $collection . "', pret='" . $pret . "', titre='" . $titre . "', genre='" . $genre . "', prix='" . $prix . "', notes='" . $notes . "' WHERE id=" . $id);

        echo
'<center><p>La fiche du livre a bien &eacute;t&eacute; mise &agrave; jour!</p>
                <p><a href="index.php">Retour &agrave; ma liste de bouquins</a></p></center>'
;
    }
    else
    {
        echo 
'Aucune modification aport&eacute;e';
    }
?>

    </body>
</html>
<?php
    mysql_close
();
?>


Ca va, vous êtes encore là? :D

Bon, normalement cette page ne devrait pas être spécialement compliquée à comprendre, seule la requête est un peu complexe, j'en parlais dans la chapitre précédent, les requêtes de modifications sont un peu spéciales, à cause de la concaténation et de tous ces apostrophes et guillemets obligatoires...
C'est encore là une question d'habitude, n'hésitez pas à copier ce code et à le réutiliser au début, non, non, je ne vous en voudrais pas, promis! ;)

Pensez cependant à l'apprendre par coeur, ça va nettement plus vite ensuite de tout taper comme ça, plutôt que de retourner sur NoShade faire des copiers/collers de ces lignes là! :D

Voilà, vous pouvez donc tester tout ces scripts chez vous en local, ça marche, ça marche même très bien. :)

Il ne nous reste plus qu'à créer la possibilité de supprimer une fiche de nos bouquins, ça va être du gâteau si vous avez compris toute ce chapitre, vous verrez! :)

Par : Legibe, le 29 septembre 2006

Sommaire du cours PHP

» Sommaire
» 1.1 Avant propos
» 1.2 Que faut'il pour faire du php?
» 2.1 Écrire du texte en PHP
» 2.2 Les commentaires, les variables et les calculs
» 2.3 Les conditions
» 2.4 La concaténation + Évaluation
» 3.1 Transmission de données
» 3.2 Les fonctions + Dates et heures
» 3.3 Les Arrays (tableaux) + les boucles
» 4.1 Les bases de données
» 4.2 Lecture dans une BDD
» 4.3 Enregistrer dans une BDD
» 4.4 Modifier le contenu d'une table
» 4.5 Supprimer du contenu dans une BDD
» 4.6 Statistiques
» 5.1 Les sessions et cookies
» 5.2 Exercice : Un système de login multi-membres