الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكله التحكم بالنص ( الاسطر) عند استخراج نص طويل من قاعده البيانات !

بدأه warning في 16 مايو 2010 · 3 رد · 507 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ...

بحثت عن حل لهذه المشكله فلم اجد ...

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

هذه المشكله الاولى والمهم حلها جداً ..

المشكله الثانيه وحلها لست مستعجل عليه .. اني اصلا قد قمت ببرمجه تكست ايريا ليقوم المستخدم بإدخال النص فيه , وبعد ذلك اقوم بأخذ هذا النص وحفظه في القاعده ..المشكله هي ان المستخدم عندما يقوم بقفز سطر فإذن التخزين بالقاعده لا يبين ذلك ! ارجو ان يكون سؤالي واضحاً

#2

وعليكم السلام ورحمة الله وبركاته

اخي بالنسبة للسؤال الاول فالحل يكون باستخدام الدالة التالية wordwrap

مثال على ذلك

لنفرض ان لدينا نص طويل مثل

$a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

عند طباعة هذا المتغير سيكون بالشكل التالي

aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaa

اما عند ادخال المتغير للدالة وتحديد عدد الحروف التي عند الوصول لها يتم القفز لسطر جديد سيكون بالشكل التالي

$text = wordwrap($a, 20, "<br />", true);
echo $text ;

سيكون الناتج بالشكل التالي

aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaa

=================================

اما بخصوص الطلب الثاني

فاستخدم فيها الدالة nl2br() وهي تفي بالغرض بإذن الله

مثلا هناك نص تم ارساله من قبل الزائر

نضع هذا النص داخل الدالة nl2br

مثل

$text = nl2br($_POST['textarea']);

الان يمكنك ادخال النص للقاعدة واخراجه وستجد انه ينزل سطر مع كل مره ضغط فيها المستخدم زر الانتر

1
#3

الله يحرم وجهك عن النار

#4

جيد أخي Sn1per

سأقوم بتفسير سبب المشكلة (وهي بالحقيقة ليست بمشكلة) الثانية:

إن كل (إنتر) بالنسبة للكيبورد في نظام ويندوز تمثل بعدد (2) بايت وهما على الشكل التالي (من اليسار إلى اليمين):

0xD 0xA

في النظام الست عشري

0xD تساوي 13 وهي (Carriage Return)

0xA تساوي 10 وهي (LineFeed)

ولمن يعرف لغة VB6 أو VB.Net

فما زال حتى الآن التعبير: vbCrLf

مستخدماً ويعني (إنتر) وهي عبارة عن محارف تحكم وليست محارف بيانات.

ولذلك فعندما تكون البيانات داخل الحقل في جدول ما، فإنها لن تنزل سطر ولن تعرض 0xD 0xA ولكنها موجودة.

أتمنى استيفاء الإجابة للمطلوب.

مؤسس شبكة مواقع إجابتي أول شبكة مواقع عربية للأسئلة والأجوبة

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…