logo

Types de blocs supplémentaires (EBT) – Nouvelle expérience de Layout Builder❗

Types de blocs supplémentaires (EBT) – types de blocs stylisés et personnalisables : diaporamas, onglets, cartes, accordéons et bien d’autres. Paramètres intégrés pour l’arrière-plan, la boîte DOM, les plugins JavaScript. Découvrez dès aujourd’hui le futur de la création de mises en page.

Démo des modules EBT Télécharger les modules EBT

❗Types de paragraphes supplémentaires (EPT) – Nouvelle expérience Paragraphes

Types de paragraphes supplémentaires (EPT) – ensemble de modules basé sur les paragraphes analogiques.

Démo des modules EPT Télécharger les modules EPT

Défilement

Leçons PHP - leçon 3.3 - Travail avec la base de données MySQL. Mise à jour des données avec UPDATE.

05/07/2025, by Ivan

Nous avons déjà rencontré des opérateurs MySQL tels que SELECT, INSERT INTO, il est maintenant temps d’apprendre comment mettre à jour des données déjà présentes dans la base. Pour cela, nous utiliserons l’opérateur SQL UPDATE. Mais d’abord, modifions notre fichier index.php en ajoutant la gestion d’un nouveau chemin. Trouvez ce code :

      if( $_GET['admin'] == 1 ){ // si la variable admin existe dans l’URL
	    print $obj->display_admin(); // si la variable existe, on affiche le formulaire
	  }else{
	    print $obj->display_public(); // sinon on affiche les messages
	  }

Et remplacez-le par ce code :

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // si la variable vaut add, on affiche le formulaire d’ajout
		break;
		case 'update':
		  print $obj->display_update();  // si la variable vaut update, on affiche le formulaire de modification
		break;
		default:
		  print $obj->display_public(); // sinon on affiche les messages
	  }

J’ai remplacé l’opérateur conditionnel if par un switch qui permet plusieurs cas pour la variable $_GET['admin'], plus tard nous aurons aussi delete. Pour l’instant, j’ai remplacé 1 par add et ajouté le cas update. Comme j’ai changé 1 en add, il faut aussi modifier les liens dans simpleCMS.php :

 

$content .= '<p><a href="/index.php?admin=1">Ajouter un message</a></p>';

Changez-le en :

$content .= '<p><a href="/index.php?admin=add">Ajouter un message</a></p>';

 

Il faut aussi ajouter une nouvelle méthode display_update() que nous appellerons lorsque la variable admin aura la valeur update. Ajoutons cette méthode :

  public function display_update(){
    
  }  

Nous avons donc créé la gestion du chemin qui appelle la nouvelle méthode display_update(), il reste à ajouter les liens vers cette page et à implémenter display_update().

Réfléchissons d’abord à la manière d’implémenter la mise à jour des enregistrements. Il faudra exécuter une requête SQL avec une condition WHERE pour cibler précisément l’enregistrement à mettre à jour. Cela peut être fait en passant l’id de l’enregistrement, ici la colonne mid. Il faudra donc transmettre la valeur mid lors de l’appel à display_update(). Comment faire ? On peut passer la valeur dans la requête GET avec admin=update, par exemple :

http://test/index.php?admin=update&mid=3

Ou alors utiliser un paramètre dans la méthode display_update(), par exemple :

  public function display_update($mid){
    
  } 

Et appeler la méthode ainsi :

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // si la variable vaut add, on affiche le formulaire d’ajout
		break;
		case 'update':
                  $mid = 1; // ou bien ici $_GET['mid']
		  print $obj->display_update($mid);  // si la variable vaut update, on affiche le formulaire de modification
		break;
		default:
		  print $obj->display_public(); // sinon on affiche les messages
	  }

Dans tous les cas, il faudra transmettre mid, probablement via GET, donc utilisons la première solution qui est plus simple.

  public function display_update(){
    $message_id = $_GET['mid'];
  }  

Nous transmettons ainsi la valeur mid. Que faire si cette valeur n’est pas présente dans GET ? Il faut le vérifier.

  public function display_update(){
    $message_id = $_GET['mid']; // on stocke mid dans une variable
	if(!empty($message_id)){
	
	}else{
	  $content .=   '<p>Pas de valeur mid !</p>';
	  $content .=	'<p><a href="/index.php">Retour à l’accueil</a></p>';
	}
	return $content;
  }  

Si la requête GET contient admin=update mais pas mid, on affichera une page avec un lien vers la page principale :

http://test/index.php?admin=update

Nous en sommes maintenant au point où il faut ajouter les liens vers la page d’édition. Modifions display_public() pour les afficher :

  public function display_public() { // méthode d’affichage des messages
    $content = '';
	$sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // requête de sélection
	$result = mysql_query($sql) or die(mysql_error());  // on stocke le résultat dans une variable
	while($row = mysql_fetch_array($result)){ // il faut traiter la variable avec mysql_fetch_array()
	  $content .= '<div class="post">'; // div englobant le message
	  $content .= '<span class="time">#' . $row['mid'] . ' du ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; 	// affichage de la date et du titre
	  $content .= '<p>' . $row['bodytext'] . '</p>'; // affichage du texte
	  $content .= '<p><a href="/index.php?admin=update&mid=' . $row['mid'] . '">Modifier le message</a>'; // lien vers modification
	  $content .= '</div>'; // fin du div englobant
	}
	$content .= '<p><a href="/index.php?admin=add">Ajouter un message</a></p>';
    return $content;
  }

Un lien de modification apparaît donc sous chaque message. Le formulaire d’édition sera affiché par display_update(). Écrivons ce code. Le formulaire ressemblera beaucoup à celui d’ajout, mais on insérera les valeurs existantes du message depuis la base et on ajoutera un champ caché avec la valeur mid.

  public function display_update(){
    $message_id = $_GET['mid']; // on stocke mid dans une variable
	if(!empty($message_id)){
	  $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id); // on récupère la ligne correspondant à mid
	  $message = mysql_fetch_object($result); // on met le résultat dans une variable message
	  $content = '';
	  $content .=	'<form action="/index.php?admin=update" method="post">'; // on soumet le formulaire à cette même page
	  $content .=	  '<label for="title">Nom :</label><br />';
	  $content .=	  '<input name="title" id="title" type="text" maxlength="150" value=' . $message->title .' />'; // valeur du titre
	  $content .=	  '<div class="clear"></div>';
	  $content .=     '<input name="mid" id="mid" type="hidden" value="'.$message->mid.'" />'; // champ caché mid
	  $content .=	  '<label for="bodytext">Message :</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>'; // valeur du texte
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Enregistrer" />';
	  $content .=	'</form>';	
	  $content .=	'<p><a href="/index.php">Retour à l’accueil</a></p>';
	}else{
	  if (!empty($_POST)) { // on vérifie les données du formulaire
	    print_r($_POST); // on affiche le tableau POST
		$content .=	'<p><a href="/index.php">Retour à l’accueil</a></p>';
	  }else{
	    $content .=   '<p>Pas de valeur mid !</p>';
	    $content .=	'<p><a href="/index.php">Retour à l’accueil</a></p>';
	  }
	}
	return $content;
  } 

Dans les commentaires, j’explique ce qui a changé dans le formulaire. Passons maintenant au traitement du tableau POST envoyé après soumission du formulaire de mise à jour.

Array(
    [title] => asdf
    [mid] => 1
    [bodytext] => asdfasf
)

Voici le tableau obtenu. Si vous regardez la requête d’ajout, les champs sont les mêmes sauf mid. Écrivons le traitement du tableau POST avec la requête UPDATE :

  public function display_update(){
    $message_id = $_GET['mid']; // on stocke mid dans une variable
	if(!empty($message_id)){
	  $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id); // on récupère la ligne correspondant à mid
	  $message = mysql_fetch_object($result); // on stocke le résultat dans message
	  $content = '';
	  $content .=	'<form action="/index.php?admin=update" method="post">'; // soumission à cette même page
	  $content .=	  '<label for="title">Nom :</label><br />';
	  $content .=	  '<input name="title" id="title" type="text" maxlength="150" value=' . $message->title .' />'; // valeur titre
	  $content .=	  '<div class="clear"></div>';
	  $content .=     '<input name="mid" id="mid" type="hidden" value="'.$message->mid.'" />'; // champ caché mid
	  $content .=	  '<label for="bodytext">Message :</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>'; // valeur texte
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Enregistrer" />';
	  $content .=	'</form>';	
	  $content .=	'<p><a href="/index.php">Retour à l’accueil</a></p>';
	}else{
	  if (!empty($_POST)) { // on vérifie le formulaire envoyé
		mysql_query('UPDATE Messages SET title="'.$_POST["title"].'", bodytext="'.$_POST["bodytext"].'" WHERE mid='.$_POST["mid"]);
		$content .= '<p>Message modifié !';
		$content .=	'<p><a href="/index.php#mid-'.$_POST['mid'].'">Voir l’enregistrement</a></p>';
	  }else{
	    $content .=   '<p>Pas de valeur mid !</p>';
	    $content .=	'<p><a href="/index.php">Retour à l’accueil</a></p>';
	  }
	}
	return $content;
  }  

Voici le code complet de notre méthode display_update(). Regardons de plus près la requête UPDATE :

On commence par l’opérateur UPDATE suivi du nom de la table. Ensuite, on utilise SET pour définir les valeurs des champs, puis la condition WHERE pour spécifier que seuls les enregistrements dont mid correspond à la valeur donnée doivent être mis à jour. Je préparerai bientôt un aperçu des opérateurs MySQL. Cette leçon est principalement destinée à ceux qui débutent en PHP et MySQL.