صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 17

الموضوع: حلول برمجية (1) PHP

  1. #1
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998

    حلول برمجية (1) PHP



    حلول برمجية (1) :

    كثيرا ما تعترض المبرمج مشكلات في برنامجه، فيبحث عن حلول لها، والبرمجة فكر مفتوح يختلف المبرمجون في إيجاد الحل، وإن اتفقوا في النتيجة.

    من المشكلات التي واجهتني، ووجهت غيري هي مشكلة النصوص المضبوطة بالشكل.
    فبعد أن انتهيت من برمجة برنامجي الشعر والنثر ، وانتقلت إلى مرحلة التجربة تبين لي أن محرك البحث لا يبحث في النصوص المضبوطة بالشكل.
    فمثلا القصيدة مضبوطة بالشكل، والزائر يبحث عن كلمة، ومن المعتاد أنه لن يضبط الكلمة بالشكل. فلهذا لا تظهر له نتيجة.

    أول أمر فكرت فيه هو البحث عن أوامر SQL تتجاهل بعض الحروف، بحيث توضع قائمة بالحروف، تُتَجاهل من قبل مزود القاعدة.
    لكنني لم أفلح من في العثور على هذا الأمر في Mysql
    وقد يرجع هذا إلى أن هذه المشكلة ليست في اللغة الإنجليزية، فهم لن يتطرقوا إليها، ولو كان مبرمجو قاعدة Mysql عربًا لوضعوا هذا في حسبانهم.

    المرحلة الثانية :
    بما أن أمر التجاهل ليس متوفرًا، فعليَّ أن أبحث عن حل، فتوصلت إلى زيادة حقل في جدول النص يتضمن النص مضبوطا بالشكل.
    فالجدول مثلا يتكون من :
    Id,author,text
    فزدت عليه
    text_ta

    بحيث يكون text_a لعرض النص أمام الزائر، و text للبحث من قبل قاعدة البيانات.

    ولست أول من توصل إلى هذا الحل، فقد توصل إليه آخرون؛ لكن اختلف الطريقة، فالأخ قهوة نت عمل جدولين كاملين لبرنامج القرآن الكريم أحدهما فيه النص مضبوطا، والآخر دون ضبط.
    وكان يمكنه الاختصار بحيث يضع جدولا وحدا، وحقلين للنص.

    هذه الطريقة حلَّت المشكلة؛ لكن فيها عيبا، وهو أن قاعدة البيانات ستتضخم لوجود نصين بالحجم نفسه.

    لكنه أهون من ألا يجد الزائر بغيته وهي متوفرة!

    هل انعدمت الحلول؟

    لا

    فكرت في حل آخر.
    من المعلوم أن البحث في القاعدة لا يكون عن طريق مترجم php بل عن طريق مزود القاعدة. وهذا يعني أن عملية البحث ليست من اختصاصك، بل من اختصاص القاعدة.
    وعلى هذا فالبحث في القاعدة أفضل، وأهون من البحث في الملفات النصية.
    نتيجة لما سبق :
    فكرت في إنشاء ملف نصي للنصوص المضبوطة بالشكل، والجدول تكون فيه النصوص غير مضبوطة بالشكل.
    فالنصوص التي في القاعدة للبحث، والنصوص التي في الملفات للعرض.
    وتكون الملفات النصية في مجلد اسمه text_ta
    يكون الرقم التسلسلي (id) هو اسم الملف
    1.text
    2.text
    3.text

    وعند عرض النص، يطلب الملف

    Include "$id.text";

    حيث $id هو الرقم التسلسلي.

    هذا حل جيد.

    لكن فيه عيبا

    وهو أنه يمكن استعراض هذه الملفات النصية.

    لكن هناك حل

    وهو جعل هذه الملفات بامتداد .php

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

    $data

    يحتوي على النص المضبوط

    ويطلب الملف


    Include "$id.php";


    ثم يطبع النص


    Echo $data;

    يلزمك في هذه الطريقة إنشاء ملف مستقل في لوحة التحكم من أجل التعامل مع هذه الملفات إضافة، وتحريرًا، وحذفًا.


    هل انتهت الحلول؟

    لا

    هناك حل آخر توصلت إليه لا يعتمد على الملفات النصية بل يعتمد على القاعدة نفسها، وبجدول واحد فقط!

    ولكي يسهل الفهم، فإني سأطبق على برنامج القرآن الكريم من برمجة الأخ فهوة نت.

    تتكون القاعدة من جدولين :
    quran

    وفيه النصوص مضبوطة بالشكل

    و
    quran1

    وفيه النصوص مجردة من الشكل.

    وإليك طريقة البحث :



    function dosearch ($searchterm) {

    هنا دالة البحث (dosearch) تتضمن متغيرًا؛ وهو ($searchterm) وهي الكلمة المراد بحثها


    top_part ();

    إحالة على هذه الدالة لطباعة رأس الصفحة.

    $xyz = mysql_query ("select q1.chapter,q1.soraano,q1.pageno,q1.soraaname,q.ayaa,q1.ayaano from quran1 as q1 left join quran as q on q1.id=q.id where q1.ayaa like '%$searchterm%'");

    طلب البحث من قاعدة البيانات عن الكلمة المدخلة، حيث يبحث في الحقل quran1 لأن النص فيه غير مضبوط بالشكل، ثم يدمجها الحقول بـ quran حيث النص فيه مضبوط في الشكل.



    if (mysql_num_rows($xyz) != 0) {


    الاستعلام عن عدد النتائج، فإن كانت هناك نتيجة :

    echo "عدد نتائج البحث: " . mysql_num_rows($xyz);
    echo "<table width=\"80%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">"
    ."<tr><td><ul>";

    طباعة عدد النتائج، ثم رأس الجدول


    while(list($chapter,$soraano,$pageno,$soraaname,$ayaa,$ayaano)=mysql_fetch_row($xyz)) {

    حلقة تكرار لعرض النصوص

    ثم :

    $partofayaa = substr($ayaa, 0, 30);

    اقتطاع جزء من الآية ( لا أعلم لماذا أدرجه الأخ قهوة نت )

    ثم :


    echo "<li><a href=\"quran.php?doWhat=gosoorah&amp;soraahno=$soraano&amp;ayaahno=$ayaano\"><font color=green>$ayaa ... </font></a>"
    ." ($soraaname-$chapter) </li>";
    }

    طباعة النتائج، ثم إغلاق حلقة التكرار

    ثم :

    echo "</ul></td></tr></table>";

    إغلاق الجدول

    فإن لم تكن هناك نتائج


    } else {
    echo "لا يوجد نتائج للبحث";
    }

    طباعة الرسالة.

    ثم :


    mysql_free_result($xyz);
    lower_part (0);

    تحرير قاعدة البيانات، ثم طباعة الجزء السفلي

    ثم

    }

    إغلاق الدالة.

    انتهى

    الفكرة التي توصلت إليها، هي سرد القاعدة كاملة!، ثم تجريد كل آية من علامات التشكيل، فإن حصل توافق بين الكلمة المدخلة وجزء من الآية فإنه يطبع النتيجة

    وإليك التطبيق :

    function dosearch ($searchterm) {


    هنا دالة البحث (dosearch) تتضمن متغيرًا؛ وهو ($searchterm) وهي الكلمة المراد بحثها


    top_part ();

    إحالة على هذه الدالة لطباعة رأس الصفحة.

    ثم :


    $xyz = mysql_query ("
    SELECT chapter,soraano,pageno,soraaname,ayaa,ayaano FROM quran");

    طلب استعلام القاعدة كاملة.
    ثم :


    echo "<table width=\"80%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">"
    ."<tr><td><ul>";

    طباعة رأس الجدول.

    ثم

    تحديد عدد النتائج بصفر :


    $result=0;

    ثم

    حلقة تكرار لما للطلب السابق :


    while(list($chapter,$soraano,$pageno,$soraaname,$ayaa,$ayaano)=mysql_fetch_row($xyz)) {



    ثم

    $old_ayaa =$ayaa;

    تحديد قيمة $old_ayaa لتوافق $ayaa من أجل طباعة النتائج مشكلة

    ثم :

    تحديد خانات علامات التشكيل :


    $tashkeel = array(
    "/ّ/",
    "/َ/",
    "/ً/",
    "/ُ/",
    "/ٌ/",
    "/ِ/",
    "/ٍ/",
    "/ُ/",
    "/ْ/",
    "/ُ/",
    );


    ثم :



    $re = "";
    $old_ayaa=preg_replace($tashkeel, $re, $old_ayaa);


    وضع الاستبدال بفراغ، ثم استبدال علامات التشكيل في كل آية بفراغ، بحيث تكون مجردة من العلامات.

    ثم

    ننظر :

    if (preg_match("/$searchterm/i","$old_ayaa")) {


    إذا كانت الكلمة المدخلة توافق الآية المجردة من علامات التشكيل


    $result=$result+1;


    فنجعل عدد النتائج يزداد بقيمة واحدة

    ثم نحدد الطباعة الأخيرة


    $show_search .= "<li><a href=\"q_1.php?doWhat=gosoorah&amp;soraahno=$soraano&amp;ayaahno=$ayaano\"><font color=green>$ayaa ... </font></a>"
    ." ($soraaname-$chapter) </li>";
    }

    مع إغلاق شرط المطابقة.

    ثم إغلاق شرط التكرار



    }

    ثم ننظر :
    /code]
    if ($result) {
    echo "عدد نتائج البحث: " . $result;
    } else {
    echo "ليست هناك نتائج للبحث";

    }

    إن كانت هناك نتائج للبحث فإننا نطبع عددها، فإن لم يكن هناك نتائج فنطبع الرسالة.

    ثم

    echo $show_search;

    نطبع النتائج المتحصلة في حلقة التكرار السابقة

    ثم

    echo "</ul></td></tr></table>";

    نغلق الجدول

    ثم :

    mysql_free_result($xyz);
    lower_part (0);


    نحرر قاعدة البيانات، ثم نطبع الجزء السفلي

    ثم


    {

    نغلق الدالة

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

    لكن فيها عيبا

    اتركه لكم

    هل انتهت الحلول؟

    لا

    قد يعثر أحدكم على حل

    هل أنت في حيرة؟

    لا

    اختر الطريقة التي تراها مناسبة .


    ختاما:

    مصدر البرمجتين :

    الأصلية :

    function dosearch ($searchterm) {

    top_part ();

    $xyz = mysql_query ("select q1.chapter,q1.soraano,q1.pageno,q1.soraaname,q.ayaa,q1.ayaano from quran1 as q1 left join quran as q on q1.id=q.id where q1.ayaa like '%$searchterm%'");
    if (mysql_num_rows($xyz) != 0) {
    echo "عدد نتائج البحث: " . mysql_num_rows($xyz);
    echo "<table width=\"80%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">"
    ."<tr><td><ul>";
    while(list($chapter,$soraano,$pageno,$soraaname,$ayaa,$ayaano)=mysql_fetch_row($xyz)) {
    $partofayaa = substr($ayaa, 0, 30);
    echo "<li><a href=\"quran.php?doWhat=gosoorah&amp;soraahno=$soraano&amp;ayaahno=$ayaano\"><font color=green>$ayaa ... </font></a>"
    ." ($soraaname-$chapter) </li>";
    }
    echo "</ul></td></tr></table>";
    } else {
    echo "لا يوجد نتائج للبحث";
    }
    mysql_free_result($xyz);
    lower_part (0);

    }


    طريقتي :


    function dosearch ($searchterm) {

    top_part ();

    $xyz = mysql_query ("
    SELECT chapter,soraano,pageno,soraaname,ayaa,ayaano FROM quran");

    mysql_num_rows($xyz);
    echo "<table width=\"80%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">"
    ."<tr><td><ul>";
    $result=0; while(list($chapter,$soraano,$pageno,$soraaname,$ayaa,$ayaano)=mysql_fetch_row($xyz)) {
    $partofayaa = substr($ayaa, 0, 30);
    $old_ayaa =$ayaa;
    $tashkeel = array(
    "/ّ/",
    "/َ/",
    "/ً/",
    "/ُ/",
    "/ٌ/",
    "/ِ/",
    "/ٍ/",
    "/ُ/",
    "/ْ/",
    "/ُ/",
    );
    $re = "";
    $old_ayaa=preg_replace($tashkeel, $re, $old_ayaa);

    if (preg_match("/$searchterm/i","$old_ayaa")) {
    $result=$result+1;
    $show_search .= "<li><a href=\"q_1.php?doWhat=gosoorah&amp;soraahno=$soraano&amp;ayaahno=$ayaano\"><font color=green>$ayaa ... </font></a>"
    ." ($soraaname-$chapter) </li>";
    }
    }

    if ($result) {
    echo "عدد نتائج البحث: " . $result;
    } else {
    echo "ليست هناك نتائج للبحث";

    }

    echo $show_search;
    echo "</ul></td></tr></table>";
    mysql_free_result($xyz);
    lower_part (0);

    }

    إذا طبقتها، فاحذف جدول quran1 من قاعدة البيانات، وتمتع بمساحة إضافية!





    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً


  2. #2
    Banned
    تاريخ التسجيل
    Nov 2002
    المشاركات
    242


    قرأت الدرس كاملاً و بصراحه درس مفيد و زاد من معلوماتي الكثير


    و بصراحه درس تستحق عليه الشكر و التقدير





    The Legend غير متواجد حالياً

  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2000
    المشاركات
    411


    درس جميل بالفعل الله يعطيك ألف عافية.





    زاجل غير متواجد حالياً



  4. استاذي عبدالرحمن .
    بارك الله فيك و لا عدمناك .

    درس متقدم و رائع .


    ننتظر قريباً ( حلول برمجية (2) PHP )

    تحياتي
    اخوك ابو مشعل





    __________________
    أخوكم ابو مشعل
    ملاحظات لتنظيم المنتدى:
    http://www.swalif.net/softs/showthread.php?s=&threadid=42612
    ---------------
    ابو مشعل غير متواجد حالياً

  5. #5
    عضو سوبر نشيط
    تاريخ التسجيل
    Mar 2002
    المشاركات
    693


    جزاك الله خيرا على الدرس الجميل أخى عبد الرحمن
    وننتظر المزيد من الدروس أنشاء الله





    php master غير متواجد حالياً

  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2000
    المشاركات
    539


    الله يعطيك العافية ،،

    موفقين إن شاء الله





    __________________
    Q8CaSh
    Q8CaSh غير متواجد حالياً

  7. #7
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    شكرا لم جميعا

    هناك تنبيه لمن أراد استخدام طريقتي

    عليه أن يغير اسم الملف :

    q_1.php?

    إلى الاسم الأصلي

    أو يستبدل ما سبق :

    $PHP_SELF

    فهذه تغني.


    العيب الذي في طريقتي، أن البحث سيكون عن طريق مترجم PHP وليس عن طريق القاعدة، وهذا يعني ضغطا على القاعدة في البيانات الكبيرة؛ لأنه يتطلب استعرض البيانات كلها.

    لكن هناك حل

    وهو إيقاف عملية الاستعراض كل 500 نتيجة؛ لكي تلتتقط القاعدة أنفاسها؛ وذلك باستخدام أمر

    sleep (30);

    حيث يتوقف الاستعراض ثلاثين ثانية.

    تحتاج هذه إلى برمجة معينة لتنفيذ الأمر كل 500 نتيجة.





    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً

  8. #8
    عضو نشيط
    تاريخ التسجيل
    Sep 2002
    المشاركات
    77


    السلام عليكم

    ماشاء الله عليك أخ عبد الرحمن.

    لوكان الـ Mysql تدعم الـ Regular Expressions كانت انحلت القصة .

    يعطيك العافية و الله ينور عليك.

    تحياتي





    rocker غير متواجد حالياً

  9. #9
    عضو فعال
    تاريخ التسجيل
    Aug 2000
    المشاركات
    1,382


    ما شاءالله

    جزاك الله الف خير

    فعلا درس مفيد جدا


    تسلم عبد الرحمن.





    __________________
    http://www.bokhalifa.com
    شبكة بوخليفه
    ((( من استغفر للمؤمنين والمؤمنات كتب الله له بكل مؤمن ومؤمنه حسنه )))
    Admin5 غير متواجد حالياً

  10. #10
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    الأخ rocker

    بحثت في موقع Mysql عن Regular Expressions

    فوجدت أن القاعدة تدعمها


    http://www.mysql.com/doc/en/Regexp.html


    قرأت الدليل، لكنني لم أتوصل إلى حل مشكلة الحركات

    فالذي فهمته من الدليل أن الأمر REGEXP يساعدك في البحث من خلال مدى الحروف في الكلمة

    فمثلا :

    كود:
    regexp B[an]*s
    يعطيك الكلمات التي تبدأ بـ B

    وتنتهي بـ s


    Bananas, Baaaaas, Bs


    هذه فكرة الأمر مختصرة


    هناك أمور أخرى لم أفهمها



    وهي أسماء الحروف :

    Name Name Name
    alnum digit punct
    alpha graph space
    blank lower upper
    cntrl print xdigit


    المسألة تحتاج إلى إعمال فكر

    سوف أحاول جاهدا أن أستعين بهذا الأمر، ولعل غيري يحاول فيفيد الجميع





    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً

  11. #11
    عضو نشيط
    تاريخ التسجيل
    Sep 2002
    المشاركات
    77


    السلام عليكم

    قرأت الصفحة
    لكن المشكلة بأنها غير واضحة تماماً و غير مفصلة بشكل جيد أو بسبب أن معلوماتي بسيطة بقواعد البيانات.

    لكن إن كان يدعم الـ REGEXP بشكلها القياسي فهذا يعني بأن الحل قد يكون التالي :
    عند البحث عن كلمة تضع بعد كل حرف التالي :
    كود:
    ضع كل حركات التشكيل داخل المجال عندها يتحقق من وجود أو عدم وجود أحدى هذه الحركات 
    [ُ|ِ|ْ]*
    مثلاً:
    نريد البحث عن كلمة الطارق:
    عندما يدخل المستخدم هذه الكلمة نولد نص البحث التالي:
    كود:
    $search_str="ا[ُ|ِ|ْ]*ل[ُ|ِ|ْ]*ط[ُ|ِ|ْ]*ا[ُ|ِ|ْ]*ر[ُ|ِ|ْ]*ق[ُ|ِ|ْ]*";
    بس استعلام قاعدة البيانات مابعرف إذا صح
    select * from q where ayaa REGEXP '$search_str';
    على أي حال راح جرب و أبحث و بخبرك إن شاء الله.

    بالنسبة للـ character class فيحدد مجالات من الأحرف لكن على الأغلب لا يدعم العربية .
    على حسب ما فهمت
    digit مثلاً تقابل [0-9]
    upper مثلاً تقابل [A-Z]





    rocker غير متواجد حالياً

  12. #12
    عضو نشيط
    تاريخ التسجيل
    Sep 2002
    المشاركات
    77


    الخط ما بعرف ليش هيك مو مظبوط .

    و الحركات ما ظهرت





    rocker غير متواجد حالياً

  13. #13
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    رد مقتبس من rocker
    الخط ما بعرف ليش هيك مو مظبوط .

    و الحركات ما ظهرت
    لا عليك نسختها في المفكرة وظهرت

    أخي الكريم

    حاولت أكثر من 30 محاولة مقلبا أوامر REGEXP فلم أفلح!

    ومن خلال قراءتي له اتضح لي أنه لا يدعم البحث في نطاق علامات التشكيل

    لأنك لو نظرت إلى علامة التشكيل من زاوية تقنية لعلمت أنها حرف!

    فما يظهر أمامك في النص العربي على أنه حرف واحد مثل

    بٌ

    فإنه في البرمجة حرفان.

    ولهذا لا يمكن البحث في النصوص المضبوطة في الشكل إلا إذا كان هناك أمر بتجاهل بعض الحروف.

    هذا فهمي، وهذه استطاعتي

    ولم أصل إلى حل سوى الحل المذكور أعلاه.

    بقيت مسألة :

    في برنامج مايكروسفت خاصية البحث قوية، حيث يبحث في النصوص المضبوطة بالشكل ويعطيك النتيجة دقيقة.

    وتستطيع اختيار البحث في نصوص مضبوطة أو غير مضبوطة.

    ما التقنية التي يستخدمها وورد؟

    لا أعلم ...

    أخيرا :

    أشكر كل من شارك في الموضوع، ومن كان لديه حل للمشكلة فأنا أول الشاكرين...





    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً

  14. #14
    عضو نشيط
    تاريخ التسجيل
    Sep 2002
    المشاركات
    77


    يا هلا

    التشكيل كما قلت هو فعلاً حرف و لم أقل غير ذلك و كود البحث اللي حطيته يقوم بتجاهل وجود هذه الأحرف.
    طيب أخ عبد الرحمن انتظر يومين و أنا راح جربها بإذن الله.
    و بخبرك

    و لا يأس مع البرمجة.

    تحياتي





    rocker غير متواجد حالياً

  15. #15
    عضو نشيط
    تاريخ التسجيل
    Sep 2002
    المشاركات
    77


    السلام عليكم
    أخ عبد الرحمن أبشر.

    جرب هذا المثال الذي يحوي الحل بشكل كامل.
    استعملت الـ Regular expression العادية.
    [.]* نريد أي عدد من الأحرف يسبق كلمة البحث و يجوز أن يكون عدد الأحرف السابقة صفراً.
    [ّ|َ|ً|ُ|ٌ|ِ|ُ|ْ|ُ]* مجال يحدد الحرف الذي يلي كل حرف في كلمة البحث و هنا يتحقق إذا وجد أو لم يوجد أحد أحرف التشكيل هذه.


    كود PHP:
    <?php
    $find_str
    ="الطارق";

    $search_str="[.]*";
    for(
    $i=0;$i<strlen($find_str);$i++){
        
    $search_str.=substr($find_str,$i,1) . '[ّ|َ|ً|ُ|ٌ|ِ|ُ|ْ|ُ]*';
    }
    $search_str.="[.]*";

    $query="SELECT * FROM quran WHERE ayaa REGEXP '$search_str'";
    echo 
    "$query\r\n<br><br>";
    flush();
    $con=mysql_connect("localhost","root"."");
    $sel=mysql_select_db("q");
    $res=mysql_query($query);

    while(list(
    $id,$chapter,$soraano,$pageno,$soraaname,$ayaano,$ayaa)= mysql_fetch_array($res)){
        echo 
    "$id,$chapter,$soraano,$pageno,$soraaname,$ayaano,$ayaa\r\n<br>";
    }
    ?>
    لكن توقع أن يكون عمله أبطء من البحث العادي و هذا متوقع لذلك اعمل هذه الطريقة بالبحث خيارية و أضف بخيارات البحث تحديد السورة أو الجزء فتخفف العبئ على قاعدة البيانات :


    لا تنسونا من صالح الدعاء.

    و أتمنى أن يستمر هذا البحث العلمي المثمر الذي يغني الكل و شكراً لك على هذا الموضوع.

    تحياتي





    rocker غير متواجد حالياً





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض