الرئيسية › الدروس › PHP و MySQL
PHP وMySQL بـ mysqli: القراءة والإضافة والتعديل والحذف
اربط صفحة PHP بـ base MySQL بـ MySQLi: اقرا أسطر وورّيهم، زيد، بدّل وفسّخ أسطر من formulaire.
دروس هذا الفصل
- نتّصلو ونقراو table
- نزيدو، نبدّلو، نفسّخو
- سيت صغير كامل
الدرس 32.1 : نتّصلو ونقراو table
صفحة PHP تحكي مع MySQL في ثلاثة مراحل: تتّصل بالـ base، تبعث requête SQL، وبعد تقرا النتيجة سطر بسطر.
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$res = mysqli_query($cnx, "SELECT nom, prenom FROM eleve");
echo mysqli_num_rows($res) . " élèves";
while ($ligne = mysqli_fetch_array($res)) {
echo "<p>" . $ligne["prenom"] . " " . $ligne["nom"] . "</p>";
}
mysqli_close($cnx);
?>
mysqli_connect(serveur, utilisateur, mot de passe, base)ترجّع الاتصال، اللي نعطيوه من بعد لكل fonction.mysqli_query($cnx, $sql): لـSELECTترجّع نتيجة؛ ولـINSERT،UPDATEولاDELETEترجّعtrue.mysqli_num_rows($res): عدد الأسطر في النتيجة.mysqli_fetch_array($res)ترجّع السطر اللي بعدو، وبعدnullكي يوفاو: لذا الحلقةwhile. نقراو عمود باسمو$ligne["nom"]ولا برقمو$ligne[0].mysqli_fetch_rowتعطي الأرقام برك.
انتبه : النتيجة متاع requête موش جدول: echo $res["nom"] تعطي « Cannot use object of type mysqli_result as array ». لازم تقرا سطر بـ mysqli_fetch_array الأوّل.
بـ PHP
شغّل السيت: base.sql يصنع الـ base، وبعد index.php تورّي التلامذة في جدول. بدّل الـ requête باش تخلّي كان التلامذة اللي عندهم على الأقل 10.
<!DOCTYPE html>
<html lang="fr">
<head><meta charset="utf-8"><title>Élèves</title></head>
<body>
<h1>Les élèves</h1>
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$res = mysqli_query($cnx, "SELECT nom, prenom, moyenne FROM eleve ORDER BY moyenne DESC");
echo "<p>" . mysqli_num_rows($res) . " élèves</p>";
echo "<table border='1'>";
while ($ligne = mysqli_fetch_array($res)) {
echo "<tr><td>" . $ligne["nom"] . "</td><td>" . $ligne["prenom"] . "</td><td>" . $ligne["moyenne"] . "</td></tr>";
}
echo "</table>";
mysqli_close($cnx);
?>
</body>
</html>
الدرس 32.2 : نزيدو، نبدّلو، نفسّخو
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$nom = $_POST["nom"];
$prenom = $_POST["prenom"];
mysqli_query($cnx, "INSERT INTO eleve (nom, prenom) VALUES ('$nom', '$prenom')");
echo mysqli_affected_rows($cnx) . " élève ajouté";
mysqli_close($cnx);
?>
- نبنيو الـ requête بالقيم متاع الـ formulaire: النصوص بين apostrophes في الـ SQL.
mysqli_affected_rows($cnx): عدد الأسطر اللي تزادت، تبدّلت ولا تفسخت في آخر requête (0 كان حتى شي ما تبدّل).- باش نبدّلو ولا نفسّخو سطر مختار، نعدّيو الـ id متاعو في رابط:
supprimer.php?id=3، وبعدDELETE FROM eleve WHERE id = 3.
كي يرفض MySQL
كان الـ requête غالطة (table موش معروفة، قيمة ممنوعة)، PHP 8 يوقف بـ « Uncaught mysqli_sql_exception » والميساج متاع MySQL. بـ mysqli_report(MYSQLI_REPORT_OFF); في الأوّل، mysqli_query ترجّع false في بلاصتها، و mysqli_error($cnx) تعطي الميساج.
نصيحة : اسم فيه apostrophe (L'Aube) يكسّر الـ requête: mysqli_real_escape_string($cnx, $titre) يحميه. هذا زادا اللي يمنع مستعمل ذكي من إنّو يدخّل SQL متاعو (injection SQL).
بـ PHP
شغّل السيت، زيد تلميذ بالـ formulaire، وبعد فسّخو بالرابط « supprimer » متاعو: القائمة تتبدّل، خاطر الـ base تبقى هي هي بين الصفحات.
<!DOCTYPE html>
<html lang="fr">
<head><meta charset="utf-8"><title>Élèves</title></head>
<body>
<form action="ajout.php" method="post">
Nom : <input type="text" name="nom"> Prénom : <input type="text" name="prenom">
<input type="submit" value="Ajouter">
</form>
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$res = mysqli_query($cnx, "SELECT id, nom, prenom FROM eleve");
while ($l = mysqli_fetch_array($res)) {
echo "<p>" . $l["prenom"] . " " . $l["nom"] . " <a href='supprimer.php?id=" . $l["id"] . "'>supprimer</a></p>";
}
?>
</body>
</html>
الدرس 32.3 : سيت صغير كامل
سيت الباك براتيك يجمع كل شي: صفحة HTML فيها formulaire (يتثبّت بالـ JavaScript)، صفحة PHP تسجّلو في الـ base، وصفحة تورّي ولا تلوّج في المعطيات.
نلوّجو بـ LIKE
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$mot = $_POST["mot"];
$res = mysqli_query($cnx, "SELECT nom FROM eleve WHERE nom LIKE '%$mot%'");
if (mysqli_num_rows($res) == 0) {
echo "Aucun élève trouvé";
}
while ($l = mysqli_fetch_row($res)) {
echo $l[0] . "<br>";
}
?>
'%$mot%': المتغيّر PHP يتحطّ وسط الـ motif SQL، بين الـ%.- requête بـ
COUNT(*)ولاAVG(...)ترجّع سطر واحد:mysqli_fetch_arrayوحدة تكفي.
انتبه : سكّر الاتصال بـ mysqli_close($cnx) كان في الآخر: requête بعد التسكير تعمل غلطة.
بـ PHP
شغّل السيت ولوّج على Ben، وبعد a، وبعد اسم موش موجود.
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$mot = $_POST["mot"];
$res = mysqli_query($cnx, "SELECT nom FROM eleve WHERE nom LIKE '%$mot%'");
if (mysqli_num_rows($res) == 0) {
echo "Aucun élève trouvé";
}
while ($l = mysqli_fetch_row($res)) {
echo $l[0] . "<br>";
}
echo '<p><a href="index.html">Nouvelle recherche</a></p>';
mysqli_close($cnx);
?>
تدرّب مجانًا
كل درس فيه 3 تمارين مجانية مع تلميحات باش تطبّق الفصل هذا مع هنّيبوت.
← الفصل اللي قبل : PHP: الاستمارات (formulaires)
كل الفصول · شوف فروض 2 تكنولوجيا المصلّحة
الدروس كتبناها لـ Mission Carthage على أساس البرنامج الرسمي. الأستاذ متاعك يبقى المرجع.