الإدخال المتعدد إلى قاعدة البيانات عن طريق حقل نصي

في الكثير من الأحيان يلزمنا أن نضيف كمية من البيانات إلى قاعدة البيانات كأن نضيف مثلاً أسماء الدول في العالم و التي تقارب 200 دولة و في مثل هذه الحالة فإنه سيكون من الصعب علينا إدخالها واحدة في كل مرة أي أننا في كل مرة سنكتب اسم الدولة و سنضغط زر الارسال و سيتم استقبال اسم الدولة و ادخالها ضمن قاعدة البيانات و من ثم طباعة النتيجة في حال تم الإدخال و العودة إلى صفحة الإدخال مجدداً .. لذلك فإن لغة PHP تتيح لنا ببضعة أكواد إدخال الكمية التي نريد من حقل نصي على أن نحدد طريقة للفصل بين كل مدخل مثل أن نضع كل مدخل في سطر جديد أو أن نفصل بينها بعلامات مثل الفاصلة , أو اشارة زائد + أو أي شيء ..

لنقم بتطبيق مثال عملي على ما سبق و تكلمنا عنه و ليكن مثلاً ادخال اسماء الدول على ان نضع كل دولة في سطر ..

أولاً : قاعدة البيانات

نقوم بإنشاء قاعدة بيانات جديدة و لنسميها مثلاً test

ستحتوي على جدول واحد باسم countries و الجدول سيحتوي على حقلين : حقل id و حقل countryname طبعاً فإن حقل id سيكون من النوع الرقمي int و بقيمة لا تقل عن 3 أي عدد مكون من 3 خانات و كذلك فإن حقل countryname  سيكون من النوع النصي varchar ولتكن قيمته هي القيمة القصوى لهذا النوع من الحقول و هي 255

CREATE TABLE `countries` (
`id` int(3) NOT NULL auto_increment,
`countryname` varchar(255) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

ثانياً : صفحة نموذج ارسال البيانات

بعد أن أنشأنا قاعدة البيانات نقوم بكتابة كود النموذج و ليكن في صفحة مستقلة ( index.html ) :

<form method="POST" action="insert.php">
<textarea name="countryname" cols="50" rows="20"></textarea><br />
<input type="submit" name="submit" value="إضافة البيانات" />
</form>

قمنا بتحدبد طريقة الارسال POST و التنفيذ سيكون في الصفحة insert.php قمنا بإضافة حقل نصي من نوع textarea باسم cityname ثم أضفنا زر الارسال

ثالثاً : صفحة معالجة البيانات و إدخالها إلى قاعدة البيانات

في صفحة معالجة البيانات insert.php نقوم أولاً بالاتصال بقاعدة البيانات و تحديد قاعدة البيانات التي سنتعامل معها

$db = mysql_connect($dbhost,$dbuser,$dbpass) or die("Database error");
mysql_select_db($dbname, $db);

نقوم بعدها باستقبال محتوى الحقل النصي ووضعه في متغير

$countries = $_POST['countryname'];

ثم نقوم بتحويل المتغير إلى مصفوفة ليتم احتساب كل سطر على حدى و نقوم بذلك عن طريق الدالة explode
الدالة explode تقوم بتقسيم النص حسب معطيات معينة أو حسب علامات نحددها ضمن الدالة مثال على الدالة :

explode(",","first,second,third");

البارامتر الأول يكون عادة علامة التقسيم و هي في مثالنا هذه الفاصلة “,”
بينما البارامتر الثاني هو النص المراد تقسيمه إلى مصفوفة
بعد أن عرفنا ما هو استعمال الدالة explode نعود لنطبقها في درسنا

$arr = explode("\n",$countries);

الرمز \n يدل على سطر جديد أو New Line Break
أي أننا سنقوم بتقسيم المتغير الذي لدينا إلى مصفوفة بحيث يكون كل سطر عنصر في المصفوفة

نقوم باحتساب عدد عناصر المصفوفة عن طريق الدالة count التي ترجع لنا قيمة عددية و هي عدد العناصر ضمن المصفوفة

$rowsnumber = count($arr);

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

for($i=0;$i<$rowsnumber;$i++){
$country = trim($arr[$i]);
$insertdata = mysql_query("INSERT INTO countries (countryname) VALUES ('$country')");
}

قمنا بعمل تكرار حيث المتغير $i يبدأ من الصفر و هو أصغر من عدد العناصر في المصفوفة و هو قابل للزيادة بمقدار 1 كل مرة
أي أنه إذا كانت عناصر المصفوفة ثلاثة عناصر فإن $i يبدأ من صفر و ينتهي عند 2
كيلا تتعقد الأمور سأوضح شيئاً .. و هو أن المصفوفة تبدأ من الصفر أي أن العنصر الأول من المصفوفة دائماً يتخذ القيمة صفر

في المصفوفة التالية

$array = array(1, 2, 3, 4, 5);

لكي نصل الى العنصر 1 في المصفوفة فإن قيمة المصفوفة ستكون 0

echo $array[0]; // النتيجة ستكون 1

بعد أن حددنا حلقة التكرار نقوم بوضع عناصر المصفوفة في متغير و تمريرها على اي دالة حسب الحاجة و في هذا المثال قمت بتمرير عناصر المصفوفة على الدالة trim و التي تقوم بحذف الفراغات الزائدة من بداية و نهاية النص
بعدها نقوم بادخال البيانات إلى القاعدة عن طريق أمر SQL للإدخال و هو INSERT

لاحظ أنه يجب أن نضع المتغير الذي يحوي عناصر المصفوفة و أمر الإدخال إلى قاعدة البيانات ضمن حلقة التكرار و إلا فلن نستفيد شيئاً

في النهاية إليكم الكود كاملاً

mysql_connect($dbhost,$dbuser,$dbpass) or die("Database error"); // الاتصال بقاعدة البيانات
mysql_select_db($dbname); // اختيار قاعدة البيانات التي سيتم العمل عليها
$countries = $_POST['countryname']; // استقبال البيانات
$arr = explode("\n",$countries); // تحويلها إلى مصفوفة
$rowsnumber = count($arr);    // احتساب عدد عناصر المصفوفة
for($i=0;$i<$rowsnumber;$i++){ // انشاء حلقة تكرار
$country = trim($arr[$i]); // تعريف عناصر المصفوفة في متغير
$insertdata = mysql_query("INSERT INTO countries (countryname) VALUES ('$country')"); // ادخال البيانات إلى القاعدة
} // إغلاق حلقة التكرار

يمكننا الاستفادة من هذا الدرس في نواحٍ عملية عديدة منها على سبيل المثال : إنشاء حقل نصي لإضافة الكلمات المفتاحية Keywords بحيث تكون الكلمات مفصولة بفاصلة , و سيتم تخزينها كل كلمة في صف لوحدها ضمن الحقل المخصص لها في قاعدة البيانات ..

11 من التعليقات على الإدخال المتعدد إلى قاعدة البيانات عن طريق حقل نصي

  • Thank u so so much !!

    1 يونيو 2010Zakaria BOUDOUDOU

  • شرح ميز و كنت أبحت عنه … و أنا لدي فكرة أخرى يمكن عملها بهدا الكود و هي الـ Tags
    و دالك بفصلهم بفاصلة و أخير عملكود البحت مع أرسال الكلمة لهدا الرابط …

    8 أغسطس 2010ياسين

  • أهلا بك أخي زكريا .

    أخي ياسين يمكن عمل العديد من الأمور بهذا الكود كما وضحت سابقاً كما يمكنك استماله مع input و ليس فقط مع textarea ..

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

    15 أغسطس 2010pluscss

  • اذا ممكن اخوي تعطي كود اذا برسل بيانات من form الى قاعدة البيانات

    16 نوفمبر 2010hassan

  • أخي حسن طلبك غير واضح هل يمكنك التوضيح أكثر ؟؟

    25 نوفمبر 2010pluscss

  • استاذي الكريم شكرا جزيلا على الدرس القيم
    استفساري مثل الاخ hassan اذا كان لدينا form ويحتوي على العديد من input
    كيف يتم استقبال المدخلات وكيف يتم ادخالها في قاعدة البيانات على ان تكون تحمل id واحد كل المدخلات
    لان في شرحك يكون كل مدخل في id جديد

    اسف على الاطالة وشكرا لك لما تقدمه من فائدة

    17 مارس 2011سليمان

  • مثال:
    اذا كان لدينا form مخصص من اجل cv وبعد ان ملئ الزائر للفورم مثال 10 خانات في الفورم

    17 مارس 2011سليمان

  • اخي سليمان هذه تحتاج لدرس مستقل .. ساقوم بكتابته ما ان يكون لدي بعض الوقت

    17 مارس 2011pluscss

  • يعطيك العافية درس مفيد جداً
    لكن لدي استفسار لو الجدول كان به
    countryname و city
    واريد ان ادخلهم بنظام input او textarea وافصل بينهم “,”
    كيف تتم طريقة الادخال

    شكراً

    22 مايو 2011احمد

  • التعديل سيكون كالتالي :

    for($i=0;$i< $rowsnumber;$i++){
    $country = trim($arr[$i]);
    $arr2 = explode(",",$country); //  نقوم بتفكيك كل سطر الى قسمين بواسطة الفاصلة او اي علامة فاصلة
    $countryname = $arr2[0]; // الجزء الأول من المصفوفة هو النص على يمين الفاصلة
    $cityname = $arr2[1]; // الجزء الثاني من المصفوفة هو النص على يسار الفاصلة
    $insertdata = mysql_query("INSERT INTO countries (countryname,cityname) VALUES ('$countryname','$cityname')"); // نضيف ناتج الفصل الى قاعدة البيانات
    }
    

    أرجو ان اكون قد افدتك

    22 مايو 2011pluscss

  • السلام عليكم

    شكراً على الدرس لكن يبقى الإشكال الكبير هو تكرار الإستعلام ، فأن يكون الإستعلام بداخل التكرار هو شيئ مذموم تماماً

    تحياتي

    8 نوفمبر 2011محمد الشرقاوي

Proudly Using Wordpress
Theme Design By PlusCSS