Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Insérer, modifier, supprimer des données en PHP

Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.Par Qwix, le 11 décembre 2006
  • Révision : phiberoptik le 04/07/2009
  • Révision : phiberoptik le 04/07/2009

Introduction

Le but de ce tutorial est de vous apprendre les commandes de base du SQL, tout en vous montrant l'interaction de ce langage avec PHP. Vous serez ainsi en mesure de pouvoir créer votre propre interface d'administration pour votre site ;)

Nous allons nous baser sur une base de données nommées “INFOS”, et sur une table nommée “personnes”. Vous trouverez ci-dessous le SQL à insérer dans PhpMyAdmin pour créer cette table. Vous devrez au préalable avoir créé votre base “INFOS” dans phpMyAdmin.

CREATE TABLE `personnes` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT ,
`nom` VARCHAR( 255 ) NOT NULL ,
`prenom` LONGTEXT NOT NULL ,
`adresse` VARCHAR( 100 ) NOT NULL ,
`cp` VARCHAR( 100 ) NOT NULL ,
`telephone` VARCHAR( 200 ) NOT NULL ,
PRIMARY KEY ( `id` ) 
) TYPE = MYISAM ;

Insérer des données dans votre base

Afficher le formulaire d'insertion

Nous allons créer une page insertion1.php qui va nous permettre de saisir les données à insérer dans la base.

<html>
  <head>
    <title>insertion de données en PHP :: partie 1</title>
  </head>
<body>
<form name="insertion" action="insertion2.php" method="POST">
  <table border="0" align="center" cellspacing="2" cellpadding="2">
    <tr align="center">
      <td>nom</td>
      <td><input type="text" name="nom"></td>
    </tr>
    <tr align="center">
      <td>prenom</td>
      <td><input type="text" name="prenom"></td>
    </tr>
    <tr align="center">
      <td>adresse</td>
      <td><input type="text" name="adresse"></td>
    </tr>
    <tr align="center">
      <td>code postal</td>
      <td><input type="text" name="codePostal"></td>
    </tr>
    <tr align="center">
      <td>numéro de téléphone</td>
      <td><input type="text" name="telephone"></td>
    </tr>
 
    <tr align="center">
      <td colspan="2"><input type="submit" value="insérer"></td>
    </tr>
  </table>
</form>
</body>
</html>

Cette page affiche le formulaire suivant:

L'utilisateur doit remplir ce formulaire, puis cliquer sur le bouton insérer.

<input type="submit" value="insérer">

Comme ce bouton est de type submit, le clic déclenche le chargement de la page indiquée dans le paramètre action du formulaire:

<form name="insertion" action="insertion2.php" method="POST">

Au clic sur le bouton, la page insertion2.php va donc être chargée. Ce script recevra, comme nous allons le voir, les données entrées par l'utilisateur dans le formulaire.

Notez bien la méthode utilisée par notre formulaire, ici c'est une méthode POST ce qui permet de ne pas afficher les variables dans URL, comme le ferait la méthode GET. IL faut toujours utiliser la méthode POST cela évite de laisser certains trous de sécurité.
Pour bien voir la différence entre les deux méthodes, changez POST en GET dans ce formulaire, et regardez bien votre URL après le clic ;)


Insérer les données reçues dans la base

Voyons maintenant la page insertion2.php, qui va se charger de récupérer les données qu'on lui envoie, de les inscrire dans la base de données, et d'afficher un message de confirmation ou d'erreur:

<?php
  //connection au serveur
  $cnx = mysql_connect( "localhost", "root", "" ) ;
 
  //sélection de la base de données:
  $db  = mysql_select_db( "INFOS" ) ;
 
  //récupération des valeurs des champs:
  //nom:
  $nom     = $_POST["nom"] ;
  //prenom:
  $prenom = $_POST["prenom"] ;
  //adresse:
  $adresse = $_POST["adresse"] ;
  //code postal:
  $cp        = $_POST["codePostal"] ;
  //numéro de téléphone:
  $tel       = $_POST["telephone"] ;
 
  //création de la requête SQL:
  $sql = "INSERT  INTO personnes (nom, prenom, adresse, cp, telephone)
            VALUES ( '$nom', '$prenom', '$adresse', '$cp', '$tel') " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a été correctement effectuée") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>

Je passe sur la méthode pour récupérer les données provenant d'un formulaire, elle à déjà été expliquée dans ce tutoriel: Récupérer des données dans une base de données en PHP

Nous avons notre variable $sql qui contient la requête à effectuer. La requête

INSERT  INTO personnes (nom, prenom, adresse, cp, telephone)
            VALUES ( '$nom', '$prenom', '$adresse', '$cp', '$tel')
 

indique à MYSQL que les données devront être insérées dans la table personnes et que les champs:

  • nom
  • prenom
  • adresse
  • cp
  • telephone

devront prendre la valeur des variables:

  • $nom
  • $personne
  • $adresse
  • $cp
  • $tel



Modification des données de votre base

Afficher toutes les personnes de la base

Nous allons créer une page modification1.php qui va nous permettre d'afficher les personnes de la base, et de choisir laquelle modifier:

<html>
  <head>
    <title>modification de données en PHP :: partie 1</title>
  </head>
<body>
  <?php
    //connection au serveur:
    $cnx = mysql_connect( "localhost", "root", "" ) ;
 
    //sélection de la base de données:
    $db = mysql_select_db( "INFOS" ) ;
 
    //requête SQL:
    $sql = "SELECT *
	      FROM personnes
	      ORDER BY nom" ;
 
    //exécution de la requête:
    $requete = mysql_query( $sql, $cnx ) ;
 
    //affichage des données:
    while( $result = mysql_fetch_object( $requete ) )
    {
       echo(
           "<div align=\"center\">"
           .$result->nom." ".$result->prenom
           ." <a href=\"modification2.php?idPersonne=".$result->id."\">modifier</a></div>\n"
       ) ;
    }
  ?>
</body>
</html>

Nous avons notre variable $sql qui contient la requête à effectuer. La requête

SELECT *
FROM personnes
ORDER BY nom
 

indique à MYSQL que nous voulons récupérer toutes les données:

SELECT *

de la table personne:

FROM personnes

et que l'on veut les ordonner par ordre alphabétique sur le nom:

ORDER BY nom

Il nous suffit ensuite d'afficher les résultats de cette requête. Dans notre cas nous allons afficher le nom, le prenom, et un lien ”modifier” qui va envoyer l'identifiant de la personne à la page modification2.php. Ceci se fait en bouclant sur le résultat de la requête pour afficher autant de div qu'il y a de personnes:

while( $result = mysql_fetch_object( $requete ) )

Pour chaque ligne de la table on affiche le nom, le prénom et le lien. Voici le même echo que celui du script, mais éclaté de façon à le rendre plus lisible:

echo(
	"<div align=\"center\">".
		$result->nom.
		" ".
		$result->prenom.
		"<a
			href=\"modification2.php?idPersonne=".$result->id."\"".
		">".
			"modifier".
		"</a>".
	"</div>".
	"\n"
) ;

Par exemple, le code HTML généré pour une personne nommée DURAND Marcel qui a comme id le nombre 28 sera le suivant:

<div align="center">DURAND Marcel <a href="modification2.php?idPersonne=28">modifier</a></div>

Si par exemple votre page modification1.php est ici:

http://www.monsite/mabase/modification1.php

Alors quand l'utilisateur cliquera sur le lien modifier à côté du nom DURAND Marcel, l'URL suivante sera chargée dans le navigateur

http://www.monsite/mabase/modification2.php?idPersonne=28
Notez la façon dont le paramètre idPersonne est passé dans l'URL. En effet, pour pouvoir passer autant de paramètres que l'on souhaite(255 caractères maximum :!:) dans une URL, il suffit de faire comme ceci:

<a href="le_lien_vers_la_page.php?parametre1=valeur&parametre2=valeur&parametren=valeur">le texte</a>

Cette façon de passer des variables utilise ce qui s'appelle la méthode GET.

Le script modification1.php affiche donc la liste de toutes les personnes de la base. Pour chaque personne un lien cliquable et créé. Un clic sur ce lien chargera la page modification2.php en lui passant en paramètre GET l'id de la personne dans la base. Nous allons voir maintenant comment récupérer ce paramètre et proposer un formulaire de modification de données de cette personne.


Afficher le formulaire de modification pour la personne choisie

Voyons maintenant la page modification2.php. Cette page sera affichée quand l'utilisateur clique sur un des liens de la page modification1.php. Cette page présentera un formulaire qui permettra de modifier les données pour la personne choisie.

Pour comprendre comment récupérer des données dans une base de données, vous pouvez aller voir Récupérer des données dans une base de données en PHP.

<html>
  <head>
    <title>modification de données en PHP :: partie2</title>
  </head>
<body>
  <?php
  //connection au serveur:
  $cnx = mysql_connect( "localhost", "root", "" ) ;
 
  //sélection de la base de données:
  $db = mysql_select_db( "INFOS" ) ;
 
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement modifier
  $id  = $_GET["idPersonne"] ;
 
  //requête SQL:
  $sql = "SELECT *
            FROM personnes
	    WHERE id = ".$id ;
 
  //exécution de la requête:
  $requete = mysql_query( $sql, $cnx ) ;
 
  //affichage des données:
  if( $result = mysql_fetch_object( $requete ) )
  {
  ?>
<form name="insertion" action="modification3.php" method="POST">
  <input type="hidden" name="id" value="<?php echo($id) ;?>">
  <table border="0" align="center" cellspacing="2" cellpadding="2">
    <tr align="center">
      <td>nom</td>
      <td><input type="text" name="nom" value="<?php echo($result->nom) ;?>"></td>
    </tr>
    <tr align="center">
      <td>prenom</td>
      <td><input type="text" name="prenom" value="<?php echo($result->prenom) ;?>"></td>
    </tr>
    <tr align="center">
      <td>adresse</td>
      <td><input type="text" name="adresse" value="<?php echo($result->adresse) ;?>"></td>
    </tr>
    <tr align="center">
      <td>code postal</td>
      <td><input type="text" name="codePostal" value="<?php echo($result->cp) ;?>"></td>
    </tr>
    <tr align="center">
      <td>numéro de téléphone</td>
      <td><input type="text" name="telephone" value="<?php echo($result->telephone) ;?>"></td>
    </tr>
    <tr align="center">
      <td colspan="2"><input type="submit" value="modifier"></td>
    </tr>
  </table>
</form>
  <?php
  }//fin if 
  ?>
</body>
</html>

Le script récupére la valeur du paramètre idPersonne provenant de l'URL que nous avons créée dans la page modification1.php:

$id  = $_GET["idPersonne"] ;

Ainsi la variable $id, contient la valeur du paramètre idPersonne, qui correspond à l'id de la personne choisie d'un clic dans la page modification1.php.

D'une manière générale, pour récupérer des valeurs provenant d'une URL, il faut toujours faire comme ceci:
$laVariable = $_GET["Le_nom_du_parametre_provenant_de_l_URL"] ;

Nous pouvons à présent définir la variable $sql qui contient la requête à effectuer, pour récupérer les données de cette personne.

$sql = "SELECT *
	FROM personnes
	WHERE id = ".$id

indique à MYSQL que nous voulons récupérer toutes les données:

SELECT *

de la table personnes:

  FROM personnes

dont l'identifiant est la valeur récupérée dans l'URL:

  WHERE id = ".$id

La suite du script modification2.php peut alors afficher un formulaire qui ressemble au formulaire insertion1.php, à la différence que les champs sont remplis par les données récupérées dans la base pour la personne choisie.

Au clic sur le bouton submit, le script modification3.php sera chargé, et recevra en POST les valeurs des champs du formulaire, comme nous l'avons vu au premier paragraphe.

Notez que de plus, le script crée aussi un champ de formulaire caché qui va nous permettre de “sauvegarder” l'identifiant de la personne:

<input type="hidden" name="id" value="<?php echo($id) ;?>">

Ce champ, qui n'a pas à être vu par l'utilisateur, va nous permettre de passer l'id de la personne, en paramètre POST, à modification3.php, en plus des autres données. modification3.php aura alors toutes les informations nécessaires pour modifier les données de la personne identifiée par son id.


Effectuer la modification

Voyons maintenant la page modification3.php:

<?php
  //connection au serveur
  $cnx = mysql_connect( "localhost", "root", "" ) ;
 
  //sélection de la base de données:
  $db  = mysql_select_db( "INFOS" ) ;
 
  //récupération des valeurs des champs:
  //nom:
  $nom     = $_POST["nom"] ;
  //prenom:
  $prenom = $_POST["prenom"] ;
  //adresse:
  $adresse = $_POST["adresse"] ;
  //code postal:
  $cp        = $_POST["codePostal"] ;
  //numéro de téléphone:
  $tel        = $_POST["telephone"] ;
 
  //récupération de l'identifiant de la personne:
  $id         = $_POST["id"] ;
 
  //création de la requête SQL:
  $sql = "UPDATE personnes
            SET nom         = '$nom', 
	          prenom     = '$prenom',
		  adresse    = '$adresse',
		  cp           = '$cp',
		  telephone = '$tel'
           WHERE id = '$id' " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
 
  //affichage des résultats, pour savoir si la modification a marchée:
  if($requete)
  {
    echo("La modification à été correctement effectuée") ;
  }
  else
  {
    echo("La modification à échouée") ;
  }
?>

Nous avons notre variable $sql qui contient la requête à effectuer. La requête

"UPDATE personnes
SET nom         = '$nom', 
      prenom     = '$prenom',
      adresse    = '$adresse',
      cp           = '$cp',
      telephone = '$tel'
WHERE id = '$id' " 

indique à MYSQL que nous voulons modifier les données de la table personnes:

UPDATE personnes

que le champ:

  • nom va prendre la valeur de la variable $nom
  • prenom va prendre la valeur de la variable $prenom
  • adresse va prendre la valeur de la variable $adresse
  • cp va prendre la valeur de la variable $cp
  • telephone va prendre la valeur de la variable $tel:
SET nom         = '$nom', 
      prenom     = '$prenom',
      adresse    = '$adresse',
      cp           = '$cp',
      telephone = '$tel'

pour la personne dont l'identifiant sera égal à celui passé en paramètre dans l'URL:

WHERE id = '$id'



Suppression des données de votre base

Afficher la liste des personnes

Nous allons créer une page suppression1.php qui va nous permettre d'afficher la liste des personnes présentes dans la base, et de choisir lesquelles supprimer:

<html>
  <head>
    <title>suppression de données en PHP :: partie 1</title>
    <script language="javascript">
      function confirme( identifiant )
      {
        var confirmation = confirm( "Voulez vous vraiment supprimer cet enregistrement ?" ) ;
	if( confirmation )
	{
	  document.location.href = "suppression2.php?idPersonne="+identifiant ;
	}
      }
    </script>
  </head>
<body>
  <?php
    //connection au serveur:
    $cnx = mysql_connect( "localhost", "root", "" ) ;
 
    //sélection de la base de données:
    $db = mysql_select_db( "INFOS" ) ;
 
    //requête SQL:
    $sql = "SELECT *
	      FROM personnes
	      ORDER BY nom" ;
 
    //exécution de la requête:
    $requete = mysql_query( $sql, $cnx ) ;
 
    //affichage des données:
    while( $result = mysql_fetch_object( $requete ) )
    {
       echo("<div align=\"center\">".$result->nom." ".$result->prenom." <a href=\"#\" onClick=\"confirme('".$result->id."')\" >supprimer</a><br>\n") ;
    }
  ?>
</body>
</html>

Comme pour la page modification1.php, nous affichons toutes les données de la base dans l'ordre alphabétique sur le nom. La différence avec la page modification1.php est que nous créons un lien 'supprimer' sur un script JavaScript qui va demander la confirmation de la suppression de l'enregistrement, si l'utilisateur clique sur 'OK' le script va diriger la page sur suppression2.php avec en paramètre d'URL l'identifiant de l'enregistrement sélectionné.


Effacer la personne choisie

Voyons maintenant la page suppression2.php:

<?php
  //connection au serveur:
  $cnx = mysql_connect( "localhost", "root", "" ) ;
 
  //sélection de la base de données:
  $db = mysql_select_db( "INFOS" ) ;
 
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement supprimer:
  $id  = $_GET["idPersonne"] ;
 
  //requête SQL:
  $sql = "DELETE 
            FROM personnes
	    WHERE id = ".$id ;
  echo $sql ;	    
  //exécution de la requête:
  $requete = mysql_query( $sql, $cnx ) ;
 
  //affichage des résultats, pour savoir si la suppression a marchée:
  if($requete)
  {
    echo("La suppression à été correctement effectuée") ;
  }
  else
  {
    echo("La suppression à échouée") ;
  }
?>

Même méthode que pour la page modification2.php, on récupère l'identifiant passé en paramètre de l'URL.

Nous avons ensuite notre variable $sql qui contient la requête à effectuer.
La requête:

"DELETE 
 FROM personnes
WHERE id = ".$id
 

indique à MYSQL que nous voulons supprimer toutes les données de la table personnes:

DELETE FROM personnes

pour la personne dont l'identifiant sera égal à celui passé en paramètre dans l'URL:

WHERE id = '$id'


Tutorial de Qwix