Masar
Masar
Bac Tunisie
Entraîner la reconnaissance
WB-CWeb et TIC

PHP/MySQL — flux requête web, branches et messages

Idée directrice

Le troisième lot note les scripts côté serveur : récupérer $_POST, ouvrir MySQL (syntaxe d’examen mysql_*), vérifier l’existence des clés, INSERT/UPDATE/SELECT, puis echo du message de succès ou d’échec. Ce n’est pas un exercice de schéma SQL pur (chapitre BD) : l’enjeu est le flux formulaire → PHP → réponse HTML. Syntaxe attestée i-c3-03 (EasyPHP) = legacy d’examen.

Signature de reconnaissance — l'énoncé se trahit ainsi

« isset($_POST[…]) »

« mysql_connect … mysql_query … mysql_num_rows »

« echo … message de succès / échec »

Sujet principal

Exercice — dans l'esprit des sujets du bac

2 questionsCorrigé masqué

La coopérative scolaire dispose déjà des tables MySQL produit(code_prod, libelle_prod, stock_prod) et commande(num_cmd, code_prod#, qte_cmd, date_cmd). Un formulaire HTML name="fcmd" envoie en POST vers commande.php les champs code_prod (name cp), qte (name qt) et le bouton submit name b1.

  1. Écrire le script PHP commande.php (syntaxe d’examen EasyPHP) qui :
    a. vérifie isset($_POST['cp']) ;
    b. récupère $cp et $qt ;
    c. se connecte (mysql_connect("localhost","root","")) et sélectionne la base bd_coop ;
    d. teste si le produit existe (SELECT + mysql_num_rows) ;
    e. si oui : INSERT dans commande avec la date système et affiche « Commande enregistrée » ; si non : « Produit introuvable » ;
    f. ferme la connexion.
  2. En une phrase, pourquoi ce script est un exercice web (WB) et non un exercice BD pur ?
Voir la correction commentéeAprès avoir posé votre démarche

Récupération PHP + connexion MySQL (syntaxe d’examen mysql_*, balises courtes éventuelles) :

<?
if (isset($_POST['cp']))
{
  $cp = $_POST['cp'];
  $qt = $_POST['qt'];
  $date = date('Y-m-d');
  mysql_connect("localhost", "root", ""); // connexion serveur (legacy examen)
  mysql_select_db("bd_coop");

Requête, branches et affichage :

  $rep = mysql_query("select code_prod from produit where code_prod='$cp'");
  if (mysql_num_rows($rep) == 1)
  {
    mysql_query("insert into commande values('', '$cp', '$qt', '$date')");
    echo "<b>Commande enregistree</b>";
  }
  else
  {
    echo "<b>Produit introuvable</b>";
  }
  mysql_close();
}
else
  echo "<b>la recuperation des donnees est incorrecte</b>";
?>

WB vs BD. Ici on enchaîne réception du formulaire web (isset, $_POST), exécution conditionnelle et réponse affichée au navigateur. Un exercice BD pur s’arrêterait au schéma ou à la requête SQL hors page PHP.

Legacy / sécurité. mysql_*, injection SQL par concaténation et root sans mot de passe sont la syntaxe des sujets du bac (EasyPHP). En production moderne : PDO/mysqli préparés, comptes limités, validation serveur stricte. Seule la première est attendue ; ne confondez pas les deux.

Exercices d'entraînement — une nuance à la fois

Entraînement 01 / 02

Drill WB-C.1 — Afficher les membres d’un club (SELECT + boucle)

1 questionCorrigé masqué

Formulaire POST vers liste.php d’un club photo : champ name="niveau" (texte). Table déjà créée : membre(id_m, nom_m, niveau_m).

  1. Écrire liste.php : si isset($_POST['niveau']), connexion à bd_photo, SELECT des membres de ce niveau ; s’il y a des lignes, afficher nom et niveau dans une boucle mysql_fetch_array ; sinon echo « Aucun membre pour ce niveau » ; fermer la connexion.
Voir la correction commentéeAprès avoir posé votre démarche

<?
if (isset($_POST['niveau']))
{
  $niv = $_POST['niveau'];
  mysql_connect("localhost", "root", "");
  mysql_select_db("bd_photo");
  $rep = mysql_query("select * from membre where niveau_m='$niv'");
  if (mysql_num_rows($rep) != 0)
  {
    while ($res = mysql_fetch_array($rep))
    {
      echo "<b>Nom : </b>"; echo $res['nom_m']; echo " ";
      echo "<b>Niveau : </b>"; echo $res['niveau_m']; echo "<br>";
    }
  }
  else
    echo "<b>Aucun membre pour ce niveau</b>";
  mysql_close();
}
else
  echo "<b>la recuperation des donnees est incorrecte</b>";
?>

Entraînement 02 / 02

Drill WB-C.2 — Mise à jour d’un tarif (UPDATE conditionnel)

1 questionCorrigé masqué

Formulaire POST vers tarif.php d’un atelier de réparation : name="ref" (référence pièce) et name="prix" (nouveau prix). Table piece(ref_p, libelle_p, prix_p).

  1. Écrire tarif.php : récupération POST, connexion bd_atelier, si la référence existe alors UPDATE du prix et message « Tarif mis a jour », sinon « Reference inconnue », mysql_close.
Voir la correction commentéeAprès avoir posé votre démarche

<?
if (isset($_POST['ref']))
{
  $ref = $_POST['ref'];
  $prix = $_POST['prix'];
  mysql_connect("localhost", "root", "");
  mysql_select_db("bd_atelier");
  $rep = mysql_query("select ref_p from piece where ref_p='$ref'");
  if (mysql_num_rows($rep) == 1)
  {
    mysql_query("update piece set prix_p='$prix' where ref_p='$ref'");
    echo "<b>Tarif mis a jour</b>";
  }
  else
    echo "<b>Reference inconnue</b>";
  mysql_close();
}
else
  echo "<b>la recuperation des donnees est incorrecte</b>";
?>

Méthode / Automatismes
  • Ordre stable : isset → variables → connect → select_db → requête(s) → num_rows → echo → close.
  • Tester l’existence avant INSERT/UPDATE (comme le corrigé Helali sur candidat/spécialité).
  • Prévoir le else de récupération incorrecte si le POST manque.
Pièges classiques
  • Écrire seulement le SQL sans isset / echo — ce n’est plus le flux web noté.
  • Un seul message d’échec pour des causes distinctes quand le sujet en distingue plusieurs.
  • Remplacer silencieusement mysql_* par un framework : hors attendu d’examen si la consigne suit le modèle EasyPHP.