طريقة ربط قاعده بيانات في الويب واظهارها عن طريق PHP

السلام عليكم الجميع

مساءكم الله بالخير. اليوم جبت لكم أبسط شرح الى هو كيف تربط قواعد بيانات في الويب عن طريق اللغه PHP

و لازم تكون عندك على اقل معرفه شويه فيها بحيث انك تقدر تفهم طريقتها و طريقة الربط بشكل صحيح.

أول شي لازم نسوي قاعده بيانات و خلينا نسويه بأسم shop تمام

وجدول واحد فقط و يكون بأسم customer

DATABASE

كذا انتهينا من قاعده بيانات و نروح نفتح صفحتين للويب خلينا نسمي اول صفحة config.php و صفحة ثانيه index.php

وخلينا نركز على config.php

config.php

أول شي اكيد بتكون صفحة فاضية و نفتح التاق

<?
// here code
php?>

بعد كذا نجي نسوي متغير جديد بحيث نحط معلومات علشان نتصل على قاعده بيانات تبعنا تمام

نسوي متغير اسمه

$connection = []

لما عملنا متغير اسمه connection راح نعطيه مصفوفه بحيث يكون فيه كل بيانات تبع قاعده بيانات و نعمل الاتصال من خلالها

اوكيه

خلينا نكتب بيانات في المصفوفات بهذي الطريقة.

'host' => 'localhost',
    'user' => 'root',
    'password' => '',
    'database' => 'shope'

للمعلومه اي شي يسار يعني متغير و نضع له قيمة في داخل المصفوفات

‘host’ => ‘localhost’,

  • host : الدومين او اسم الدومين الى تريد تتصل عليه و نكتب localhost لاني اتصل من الشبكة المحلية فقط
  • user: أسم المستخدم في قاعده بيانات و انا اسميه root لانه هو المستخدم الى يتحكم في قاعده بيانات 🙂
  • passowrd: يكون فارغ لانه ماله رقم سري الا في حال عندك تضع رقم السري هنا
  • database: أسم قاعده بيانات لديك او الى عملتها. مثلآ انا عملت قاعده بيانات اسمها shop
$connection = [
    'host' => 'localhost',
    'user' => 'root',
    'password' => '',
    'database' => 'shope'
];

بعد مانكتب المعلومات راح تصير بهذي الطريقة من داخل مصفوفات و الان اصبح لدينا معلومات قاعده بيانات فقط وليس اتصال بين قاعده بيانات والويب.


الان نربط الاتصال بين الويب والقاعده بيانات لدينا 🙂

نروح نعمل متغير جديد خاص الاتصال يختلف عن الاول نكتب

$mysqli

هذا المتغير راح يكون خاص الاتصال يعني بكل مره نستدعي هذا يعني ننتصل على قاعده بيانات الاستدعاء اي معلومات من خلال هذا المتغير تمام

الان نضع اسم الدالة تبع قاعده بيانات اسمها mysqli

$mysqli = new mysqli(
  here code
);

الان نكتب زي كذا و اي شي داخل بين قوسين ( ) يعني نعمل الاتصال على قاعده بيانات تمام.

  $connection['host'],
    $connection['user'],
    $connection['password'],
    $connection['database']

الان كل مره نجي نستدعي connection نكتب داخله اسم المتغير الى كتبناه زي موضح فوق بالكود

لانه بهذي الطريقة كأني اقول الاتصال على الهوست ثم الاتصال على اليوزر ثم الاتصال الباسورد اخر شي اتصال على داتا بيس اذا شبك بيكون امورك تمام و فيه تواصل بينهم

بيكون شكل الكود بالنهاية هذا الشكل:

$mysqli = new mysqli(
    $connection['host'],
    $connection['user'],
    $connection['password'],
    $connection['database']
);

طيب بالاخير المشكلة كيف بنعرف اذا قواعد بيانات شغاله تمام ولالا؟

لازم نعمل شرط اذا قاعده بيانات اتصل وصار اتصال بين الويب والقاعده بيانات شغاله بيشتغل غير كذا بيطلع لك خطأ

نكتب بهذا الشكل

if($mysqli->connect_error){
    die("Error conncting the DATABASE". $mysqli->connect_error);
}

هنا اخذنا اسم المتغير الى عملنا اتصال عليه اسمه $mysqli ثم وضعنا داله اذا الاتصال خطأ يبلغك انه خطأ

كذا انتهينا من ملف config.php


الان ننتقل الى ملفنا المفضل الى هو index.php

الان فقط نضغ الادوات html بشكل طبيعي ولكن كل الى علينا الان نضيف هذا الكود

<?php
include_once 'config.php';

?>

لما نعمل include_one تعني الملف الى راح نضعه يعني الصفحه تصير كأنها موجوده في index.php نفسها

لما نضع config.php كذا يصير امورنا تمام و الصفحة ذي متصله على قواعد بيانات تبعنا

طيب خلينا نسوي form يكون فيه الاسم العملاء و نوع السياره و الموديل السياره

<form action="" method="post">
<input type="hidden" name="id" value="">
<label>customer name</label><br>
<input type="text" name="customer"><br>
<label> Car type</label><br>
<input type="text" name="cartype"><br>
<label> year: </label><br>
<input type="number" name="years">
<button class="btn btn-primary" type="submit" name="submit">Send</button>
</form>

الان وضعنا له اسم العملاء و اسم السياره و نوع ا لسياره و أيضآ الزر Submit بحيث لما تضغط عليه تنرسل المعلومات الى قاعده بيانات

كذا انتهينا

خلينا نروح فوق عند include_once خلينا نكتب SQL بحيث ندخل البيانات في كل مره المستخدم يضغط submit وتنحفظ بالقاعده بيانات

هنا ونكتب بهذي الطريقة بس لاتقلق راح اشرح كل وحده وطريقتها بضبط تمام

أول شي نكتب SQL و نفس الاسماء متواجده في قاعده بيانات

$sq3 = "insert into customer(name, car_type, car_year) values('$name', '$carType', '$carYear')";

$mysqli->query($sq3);

$sq3 : نعمل متغير جديد فقط تبع insert او ادخال بيانات

لما نعمل insert into الى اسم الجدول customer وبعد كذا نكتب اسم column نفسس الى موجود في قاعده بيانات

للملاحظة مهمة: هذي الطريقة غير مفلتره و اذا كنت تبي يكون مفلتر بيكون هذا الطريقة

$sq3 = $mysqli->prepare("insert into customer(name, car_type, car_year) values(?,?,?)");
    $sq3->bind_param('ssi', $name, $carType, $carYear);
    $sq3->execute();

لازم نضع الدالة prepare خاصة بالفلتره في sql لتجنب من حدوث الثغرات مثل SQL injection

اذا كنت تبي شرح الفلتره راح اضع مقال في اخر الموضوع نتكلم عنه.

المهم نكمل

هذا التوضيح:

مثل موضح بالصوره الى فوق قاعده بيانات و الى تحت الكود الى كتبتها تبع php ويجب ان يكون نفسها بضبط

لانه بهذي طريقة اي مستخدم يدخل بيانات من خلال الويب البيانات نفسها تروح قاعده بيانات

و سوف اشرح عن id لاتقلق و ايضآ المعلومات بعد values.

الان نجي الى بعدها نروح فوق insert ونضع متغيرات بحيث نحفظ اسماء المتغير تبع form الى نشئناه من قبل

نكتب بهذي الطريقة ولكن غير مفلتره:

$id = $_POST['id'] = '';
$name = $_POST['customer'];
$carType = $_POST['cartype'];
$carYear = $_POST['years'];

هنا بطريقة مفلتره وللشرح لها سوف اضع رابط المقال في اخر الصفحة.

 $id =  $_POST['id'];
    $name = htmlspecialchars($_POST['customer']);
    $carType = htmlspecialchars($_POST['cartype']);
    $carYear = $_POST['years'];

Id لم نضعها في insert بسبب وضعنا قيود في قاعده بيانات اي بيانات تجي سوف ينشئ بشكل تلقائي بدون تدخل مننا.

ثم ننشئ اسم و نوع السياره و السنة يكون بعدها POST ليه لانه نوع form post اذا كان get نضع get في form

المهم عشان تضح الطريقه من وين جبت اسماء المتغير داخل [ ] مثل$_POST[‘customer’]

اسم customer هذا متغير موجود داخل form تلقاه بعد اسم name =’customer’

هنا التوضيح بشكل اكثر :

مثل موضح بالصوره:

يصير كل متغير قدام name الى موجود في form راح نحطه في البوست ال فوق مثل موضحه بالصوره ليه

لانه لما نعمل insert نضع المتغيرات name , cartype and caryear داخل values

values('$name', '$carType', '$carYear')

بكذا كل مره يدخل اليوزر المعلومات ويضغط submit المعلومات هذي تروح القواعد بيانات تبعنا

من خلال form ثم insert ثم ينحفظ في قاعده بيانات تمامآ

تجربه عملية بالصوره:

مثل ماتلاحظون هنا صار في كل مره يوزر يدخل المعلومات ثم يضغط Submit او ارسال البيانات تروح القاعده بيانات على طول بشكل سليم وسلس 🙂

هذا فقط عملية Insert هذي الكود في حال تبي تجرب

<?php
include_once 'config.php';
$id = $_POST['id'] = '';
$name = $_POST['customer'];
$carType = $_POST['cartype'];
$carYear = $_POST['years'];

$sq3 = "insert into customer(name, car_type, car_year) values('$name', '$carType', '$carYear')";

$mysqli->query($sq3);

?>
 <!doctype html>
<head>
     <meta charset="UTF-8">
    <title>Hello to my website</title>
  </head>
  <body>

<form action="" method="post">
<input type="hidden" name="id" value="">
<label>customer name</label><br>
<input type="text" name="customer"><br>
<label> Car type</label><br>
<input type="text" name="cartype"><br>
<label> year: </label><br>
<input type="number" name="years">
<button class="btn btn-primary" type="submit" name="submit">Send</button>
</form>
  </body>

</html>

كذا انتهينا من عملية ادخال البيانات

بس وش رايكم نظهر البيانات في نفس الصفحة و نكمل عليها؟

نبدء بسم الله


أول شي فوق عند include نعمل متغير جديد بحيث نعمل لوب لعرض كل البيانات الى محفوظة في قاعده بيانات

ونسميه $show

ونكتب SQL بهذي الطريقة

$show = $mysqli->query('select id, name, car_type, car_year from customer')->fetch_all(MYSQLI_ASSOC);

وايضآ لاتنسى نضع شرط بين المتغيرات الى وضعناها بالقبل

هذا الكود و الصوره :

$name = $carType = $carYear = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$id = $_POST['id'] = '';
$name = $_POST['customer'];
$carType = $_POST['cartype'];
$carYear = $_POST['years'];
}

اول شي قبل الشرط نضع اسماء المتغيره و بعدها يساوي ‘ ‘

ثم نضع الشرط الموضح بالصوره لانه هذي طريقة لو مادخلت اي بيانات ماراح يطلع لك خطأ المتغير Undefined index

بعد مانعمل هذا الشرط راح يختفي الخطأ << انقذتكم بالبدايه ههه 🙂

مثل موضحه بالصوره وضعنا الشرط وفوقها المتغيرات وبعدها يساوي ‘ ‘;

خلصنا من هنا 🙂 ننزل تحت عند form عشان نعمل value ونضع اسم المتغير الى عملناه فوق

هنا الكود

input type="hidden" name="id" value="<?php echo $id  ?>">
<label>customer name</label><br>
<input type="text" name="customer" value="<?php echo $name ?>"><br>
<label> Car type</label><br>
<input type="text" name="cartype" value="<?php echo $carType ?>"><br>
<label> year: </label><br>
<input type="number" name="years" value="<?php echo $carYear ?>">
<button class="btn btn-primary" type="submit" name="submit">Send</button>
</form>
<?php if(isset($_POST['submit'])) {
    header("location:index.php"); // your current page
} ?>

بتلاحظ في value مكتوب فيه المتغير ليش؟ بحيث بكل مره المستخدم يدخل البيانات راح تظهر بالصفحة

وبتلاحظ بعد كل متغير مختلف مثلآ اسم متغير اسم العملاء و اسم السياره و نوع وهكذا

طيب ياعبدالعزيز ليه انت حطيت هذا الكود و ايش عمله بضبط ؟

php if(isset($_POST['submit'])) {
    header("location:index.php")

هذا عشان مايبقى معلومات او يحصل خطأ تكرار في قاعده بيانات يصير بكل مره تسوي تحديث الصفحة راح يتكرر البيانات بشكل كبير ويسبب زحمه بالصفحة والقاعده بيانات.

وايضآ بكل مره تعمل ارسال تختفي بيانات بالخانة الى يكتب فيه اليوزر و مايحصل خطأ

ومعنى الشرط يعني في حال المستخدم ضغط submit راح يتحدث ويرجع على نفس الصفحة 🙂

هذا صوره form

form

طيب باقي اخر خطوه ايش هي؟

نعرض المعلومات في صفحتنا كيييف؟

كل الى علينا نختار اي نوع من العرض مثلآ انا ابي اعرض بيانات كاجدول

 <table style="width:20%">
  <tr>
    <th>#</th>
    <th>Customer name: </th>
    <th>Car type: </th>
    <th>year: </th>
  </tr>
//// php تحت هنا 🙂
  <tr>
    <td>id</td>
    <td>name</td>
    <td> car type </td>
    <td>year</td>
  </tr>

</table>

طيب انا بحط هذا الجدول و ابي استخدم فقط جدول الى تحت واحولها الى php مثل موضح فوق //// php تحت هنا 🙂

تحت هذا بضبط.

الان نضع لووب من نوع foreach ()

foreach($show  as $showme) 

$show هو تبع الى كتبناه فوق بحيث يظهرلنا كل المعلومات من select الى هو هذا

$show = $mysqli->query('select id, name, car_type, car_year from customer')->fetch_all(MYSQLI_ASSOC);

وبعدين يصير نحط الكود بهذي الطريقة وراح اشرح لكم بضبط

 <?php foreach($show  as $showme) { ?>
   <tr>
     <td><?php echo $showme['id'] ?></td>
     <td><?php echo $showme['name'] ?></td>
     <td><?php echo $showme['car_type']?> </td>
     <td><?php echo $showme['car_year']?> </td>
   </tr>
<?php } ?>

الان لما استخدمنا اللوب foreach () {

هنا نضع الاشياء بالصيغه PHP بحيث يظهر البيانات بالموقع

}

ولاتنسى تستخدم التاق php لانه انت الان بداخل التاق html

وهنا

$show as $showme

لما كتبت as showme هنا يعني انا وضعت متغير جديد خاص باللوب فقط

وداخل اللوب نكتب الكود بهذي الطريقة

<td><?php echo $showme['id'] ?></td>
     <td><?php echo $showme['name'] ?></td>
     <td><?php echo $showme['car_type']?> </td>
     <td><?php echo $showme['car_year']?> </td>

بتلاحظ داخل التاق <td> نضع التاق تبع php بحيث تظهر البيانات من قاعده البيانات تمام

ثم نكتب echo $showme و نكتب المتغير نفس column الى موجوده في قاعده بيانات بضبط

لانه الهدف نظهر البيانات من قواعد البيانات من خلال SQL

هذا الصوره من هنا والكود

<table style="width:20%">
   <tr>
     <th>#</th>
     <th>Customer name: </th>
     <th>Car type: </th>
     <th>year: </th>
   </tr>
   <?php foreach($show  as $showme) { ?>
   <tr>
     <td><?php echo $showme['id'] ?></td>
     <td><?php echo $showme['name'] ?></td>
     <td><?php echo $showme['car_type']?> </td>
     <td><?php echo $showme['car_year']?> </td>
   </tr>
<?php } ?>
 </table>

وكذا انتهينا من العملية من خلال php

وخلينا نشوف تجربه علميه مع بعض 🙂

مثل ماتلاحظون هنا

بكل مره ادخل البيانات يظهر تحت على شكل جدول و ايضآ ينحفظ بالقاعده بيانات 🙂

هذا طريقة ربط قاعده بيانات في الويب واظهارها بالصفحة.

وهذا كود كامل اذا حاب تجرب مع اظهار الصفحة 🙂

<?php
include_once 'config.php';

$name = $carType = $carYear = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$id = $_POST['id'] = '';
$name = $_POST['customer'];
$carType = $_POST['cartype'];
$carYear = $_POST['years'];
}
$sq3 = "insert into customer(name, car_type, car_year) values('$name', '$carType', '$carYear')";

$mysqli->query($sq3);

$show = $mysqli->query('select id, name, car_type, car_year from customer')->fetch_all(MYSQLI_ASSOC);

?>
 <!doctype html>
<head>
     <meta charset="UTF-8">
    <title>Hello to my website</title>
  </head>
  <body>

<form action="" method="post">
<input type="hidden" name="id" value="<?php echo $id  ?>">
<label>customer name</label><br>
<input type="text" name="customer" value="<?php echo $name ?>"><br>
<label> Car type</label><br>
<input type="text" name="cartype" value="<?php echo $carType ?>"><br>
<label> year: </label><br>
<input type="number" name="years" value="<?php echo $carYear ?>">
<button class="btn btn-primary" type="submit" name="submit">Send</button>
</form>
<?php if(isset($_POST['submit'])) {
    header("location:index.php"); // your current page
} ?>


  <table style="width:20%">
   <tr>
     <th>#</th>
     <th>Customer name: </th>
     <th>Car type: </th>
     <th>year: </th>
   </tr>
   <?php foreach($show  as $showme) { ?>
   <tr>
     <td><?php echo $showme['id'] ?></td>
     <td><?php echo $showme['name'] ?></td>
     <td><?php echo $showme['car_type']?> </td>
     <td><?php echo $showme['car_year']?> </td>
   </tr>
<?php } ?>
 </table>

</body>
</html>

أتمنى الشرح مفهوم وبسيط 🙂

ملاحظة مهمة: لايوجد اي حماية او امان في الاكواد لانه هذا مجرد مثال بسيط او نموذج بسيط.

اذا تبي شرح كامل عن فلتره تفضل من هنا

https://mrazizblog.com/2020/09/20/xss-and-sql-injection/

أشوفكم على خير.

رأيان حول “طريقة ربط قاعده بيانات في الويب واظهارها عن طريق PHP

التعليقات مغلقة.