PDA

View Full Version : كد ايجاد كامنت در يك وب سايت



zahraf
پنج شنبه 29 اردیبهشت 1390, 20:13 عصر
با عرض سلام و احترام خدمت دوستان گرامي

مي خواستم اگر ميدونيد در اين زمينه كمكم كنيد:

من در حال طراحي وب سايتي هستم كه متعلق به يك پزشكه و ميخواد قسمت "پرسش و پاسخ" داشته باشه. مثل همين سايتهاي خبري كه يك مطلب هست و تعداد زيادي كامنت در انتهاي مطلب.

ميشه اگر كسي ميدونه در ASP چه جوري ميشه اين كارو كرد كمكم كنه؟
من هر چي گشتم چيزي پيدا نكردم

b.paseban
پنج شنبه 29 اردیبهشت 1390, 20:47 عصر
سلام.
شما باید ابتدا یه دیتا بیس درست کنید و چندتا فیلد برای اون در نظر بگیرید.فیلدهایی مثل:
CommentID(pk),AddedByName,AddedByIp,AddedByEmailAd dress,AddedByDate,NewsID(Fk)
توی این جدول ما یه کلید اصلی بنام CommentID داریم و یه کلید خارجی هم به اسم NewsID.
NewsID کلید اصلی ما توی جدولی که ما میخواهیم برای مطلب اون جدول نظر بدیم هست.(مثلا توی اینجا جدولی بنام TblNews داریم که یسری خبر رو نمایش میده و NewsID کلید اصلی اون جدول هست)
بقیه فیلدها هم مربوط به اطلاعات کاربر میشه که کامنت میزاره.(نام،آدرس ایمیل،ای پی کاربر)
فیلد AddedByDate هم زمان درج کامنت رو درج میکنه.
برای طراحی فرم هم ما 3تا texbox میزاریم که برای نام و email و متن کامنت کاربر هست.(textbox متن کامنت باید texmode=multiline داشته باشه)
برای درج نظر ما از یه sp استفاده میکنیم به شکل زیر:


ALTER Procedure [dbo].[sp_News_Comment_Insert]
@AddedByName nvarchar(250),
@AddedByEmail nvarchar(2),
@AddedByIP nvarchar(15),
@NewsID int,
@Body ntext,
As
Begin
Insert Into News_Comment
([AddedDate],[AddedByName],[AddedByEmail],[AddedByIP],[NewsID],[Body])
Values
(GETDATE(),@AddedByName,@AddedByEmail,@AddedByIP,@ NewsID,@Body)
End

sp_News_Comment_Insert اسم استور پروسیجر ماهست.
News_Comment هم اسم جدول کامنت های ما(جدول طراحی شده در مرحله قبلی)
توی رویداد کلیک ما میاییم به اینصورت عمل میکنیم:


if (Page.IsValid)
{
try
{
SqlConnection conect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["conectionstring"].ConnectionString);
conect.Open();
string commandinsertcomment = "sp_News_Comment_Insert";
SqlCommand command = new SqlCommand(commandinsertcomment, conect);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("AddedBy", txtname.text);
command.Parameters.AddWithValue("AddedByEmail", txtemail.text);
command.Parameters.AddWithValue("AddedByIP", Request.UserHostAddress);
command.Parameters.AddWithValue("NewsID", NewsID);
command.Parameters.AddWithValue("Body", txtbody.text);
command.ExecuteReader();
}
catch (Exception ex)
{
}

شما میتونید برای بدست آوردن NewsID و درج مقدار اون اگر از querystring برای ارسال مقدار استفاده کردین مقدار اون رو با استفاده از:


string ID = Page.Request.QueryString.Get("ID");
Int NewsID=convert.toint32(Id);

بدست بیارید.
خوب تا اینجا ما دیتای مورد نظر رو درج کردیم.
اگر میخواستیم بعد از درج نظر کاربر را با تایید نمایش بدیم فقط کافیه یه فیلد از نوع bit برای دیتا بس کامنت ها در نظر بگیریم که مقدار اولیه false و در صورت تائید مدیر مقدار اون true میشه.
حالا برای نمایش نطر مربوط به خبر مورد نظر ما میاییم موقع خوندن داده ها یه شرط میزاریم که اگر NewsID=@NewsID بود کامنت ها مربوط به اون رو بخونه.
اگر هم تائیدیه برای نطر گذاشتیم یه فیلد دیگه هم برای خوندن توی شرط قرار میدیم که status=true بود نمایش بده.
منبع:سورس جناب فتح اللهی (http://barnamenevis.org/showthread.php?124503-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%DB%8C%DA%A9-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86)

dontspeak
پنج شنبه 29 اردیبهشت 1390, 21:46 عصر
برای درج نظر ما از یه sp استفاده میکنیم به شکل زیر:
من دارم توی code-behind اینارو مینویسم مشکلی نداره که؟

arta.nasiri
پنج شنبه 29 اردیبهشت 1390, 22:40 عصر
سلام

sp رو تو دیتابیس مورد نظر در قسمت Programmability >> Stored Procedures بنویسید.

dontspeak
پنج شنبه 29 اردیبهشت 1390, 23:02 عصر
سلام

sp رو تو دیتابیس مورد نظر در قسمت Programmability >> Stored Procedures بنویسید.
sp رو میدونم کجا باید نوشت و میدونم که برای امنیت توی سورس صفحه ات باید پروسیجر بکار ببری. سوالم اینه که آیا من که توی code-behind دستورات sql رو نوشتم از نظر امنیتی مشکلی نداره؟ یا کلا نکته امنیتی داره که رعایت کنم؟
ممنون

dontspeak
پنج شنبه 29 اردیبهشت 1390, 23:11 عصر
برای ایجاد تاریخ توی کامنتها برای ستون تاریخم چه نوعی رو باید در نظر بگیرم؟ من datetime در نظر گرفتم و موقعی که می خوام بریزمش توی دیتابیس به DateTime.Now.ToShortDateString(); تنبدیلش میکنم اما همه ساعتها رو 12:00:00 میزنه!

arta.nasiri
پنج شنبه 29 اردیبهشت 1390, 23:22 عصر
sp رو میدونم کجا باید نوشت و میدونم که برای امنیت توی سورس صفحه ات باید پروسیجر بکار ببری. سوالم اینه که آیا من که توی code-behind دستورات sql رو نوشتم از نظر امنیتی مشکلی نداره؟ یا کلا نکته امنیتی داره که رعایت کنم؟
ممنون

کلا به نحوه کدنویسی شما بستگی داره. شاید کدی بنویسید که از کنترل های خود دات نت بهتر عمل کنه، شاید هم طوری باشه که خیلی راحت قابل نفوذ باشه.

majnun
پنج شنبه 29 اردیبهشت 1390, 23:45 عصر
برای گرفتن تاریخ ثبت کامنت نیاز نیست تاریخ رو به بانک ارسال کنی

در مقدار پیش فرض فیلد تاریخ این رو بنویس getdate()

خودش اتوماتیک تاریخ رو میگیره

dontspeak
پنج شنبه 29 اردیبهشت 1390, 23:59 عصر
خوب اینو میدونم ولی من دارم واسه بعد فکر میکنم. که ممکنه این تاریخ بدردم بخوره. به هر دلیلی مثل سرچ بر اساس تاریخ یا ...

dontspeak
جمعه 30 اردیبهشت 1390, 02:11 صبح
برای گرفتن تاریخ ثبت کامنت نیاز نیست تاریخ رو به بانک ارسال کنی

در مقدار پیش فرض فیلد تاریخ این رو بنویس getdate()

خودش اتوماتیک تاریخ رو میگیره
داداش ممنون. اول فکر کردم منظورت اینه که کلا تاریخو وارد نکنم. بعد کلی سرچ متوجه شدم منظورت چیه

zahraf
شنبه 07 خرداد 1390, 20:10 عصر
خيلي ممنونم دوست عزيز

اما مشكل من بيشتر روي نمايش كامنتهاست نه ذخيره ي اونها :افسرده:

ميخوام بدونم چه جوري گريدويو رو به شكلي دربيارم كه نويسنده بالا قرار بگيره و متن در پايين مثل شكل زير:

70490

در ضمن اگر كسي ميدونه چه جوري ميتونم براي هر كامنت امكان نقل قول بذارم هم خيلي ممنونم يعني در هر سطر گريدويو يه دكمه باشه كه بشه به سؤال فرد پاسخ داد

در حال حاضر گريدويو من اين شكليه يعني نويسنده و تاريخ مثل ستون در كنار نظر يا سؤال فرده اما من ميخوام بالاش باشه:

70492

zahraf
شنبه 07 خرداد 1390, 23:55 عصر
دوستان اگر ميدونيد منو راهنمايي كنيد خدا خيرتون بده :لبخندساده:

zahraf
یک شنبه 08 خرداد 1390, 23:43 عصر
دوستاي گلم بازم سلام
اگر قسمت اول سؤالم رو نميدونيد لااقل قسمت دومش رو جواب بدين خواهش ميكنم اگر كسي ميدونه كمكم كنه:

تكرار سؤال:
چه جوري ميتونم براي هر كامنت امكان نقل قول بذارم يعني در هر سطر گريدويو يه دكمه باشه كه بشه به سؤال فرد پاسخ داد

karim orooji
دوشنبه 09 خرداد 1390, 00:36 صبح
خوب شما برای این کار از tempaletfilds استفاده کردید
در همون قسمت میتونید یک دکمه بزارید و برای دکمه یک command argemante تعریف کنید با توجه به id پست مریوطه
و زمانی که دکمه زده میشه میاد id پست رو شناسایی میکنه توی یک متغییری و یا هرچیزی میریزه
تا اینجا داشته باش
برای هر نظر یا همون سوال یک شما یک فیلد یک شماره محنصر به فرد داشته باشه
با توجه به اون شماره اطلاعات رو ذخیره و لود میکنید

زمانی که کسی یک سوال رو ایجاد میکنه یک شماره به صورت رندوم و غیر تکراری در فیلد برای تعریف کردیم ایجاد میشه واطلاعات ذخیره میشه
یعنی زمانیکه فردی که میخواد سوالی رو پاسخ بده زمانی دکمه رو میزنه با همون command argemante اون شماره شماره رندوم و غیر تکراری ایجاد شده در سوال دریافت میکنه

زمانی کاربر میبینه جواب سوالش دادندخوشحال میشه سریع روی اون لینک کلیک میکنه
و زمانی روی کلیک میکنه با توجه به اون شماره رندوم و غیر تکراری بوسیله command argemante شماره مربوطه رو دریافت میشه و میتونی اطلاعات با توجه به اون کد فراخوانی کنی مثلا در یک گرید

مثلا در بالا من گفتم id میتونه هر چیز دیگه ای هم باشه اون با خوده برنامه نویسه
امیدوارم متوجه شده باشی

zahraf
دوشنبه 09 خرداد 1390, 00:46 صبح
يعني منظور شما اينه كه من دو تا جدول در ديتابيسم داشته باشم يكي براي سؤال و يكي براي جواب و id سؤال به عنوان كليد خارجي در جواب موجود باشه و بعد با كدنويسي و از روي اون id يكسان هر دو سؤال و جواب رو پشت سر هم بكشم داخل يك گريدويو درسته؟
اينجوري ظاهرش قشنگ ميشه؟
اصلا كسي ميفهمه كه اون پاسخ مال اون سؤال هست؟ نميشه با يك كادري چيزي پاسخ رو از سؤال جدا كرد؟
شما چه طور متوجه منظورم شدين؟:لبخند:

zahraf
دوشنبه 09 خرداد 1390, 00:52 صبح
عذرمي خوام حالا كه پستتونو دقيق تر خوندم متوجه شدم كه شما اشاره به دو فيلد جداگانه كردين و نه جدول بله تا اينجاشو كامل فهميدم و خيلي ممنونم
حالا چه جوري ميشه اين دو فيلد رو از هم كاملا تفكيك كرد تا زيبا بشه شما ميدونيد منظورم همون كادره يا ... خلاصه چيزي كه پاسخ رو واضح تر و زيباتر نشون بده

karim orooji
دوشنبه 09 خرداد 1390, 00:55 صبح
صلا كسي ميفهمه كه اون پاسخ مال اون سؤال هست؟ نميشه با يك كادري چيزي پاسخ رو از سؤال جدا كرد؟
آره درسته
ببخششید از جدولا یادم رفت بگم دوتا جدول ایجاد کن
همون جوری که خودت گفتی سوال و پاسخ با کلید خارجی به یکدیگر متصل کن

من گفتم برای این یک فیلد درست که یک شماره به صورت رندوم و غیر تکراری در اون فیلد ذخیره بشه حالا id یا هر چیز دیگه
زمانی که میخوای لود اطلاعات رو لود کنی با توجه به اون شماره لودشون کن

zahraf
دوشنبه 09 خرداد 1390, 01:07 صبح
متاسفانه اين بار متوجه منظورتون نشدم
يعني نفهميدم جواب شما به اون سؤالي كه من پرسيدم چه ربطي داشت
ولي در هر حال ازتون تشكر ميكنم

karim orooji
دوشنبه 09 خرداد 1390, 01:15 صبح
حالا چه جوري ميشه اين دو فيلد رو از هم كاملا تفكيك كرد تا زيبا بشه شما ميدونيد منظورم همون كادره يا ... خلاصه چيزي كه پاسخ رو واضح تر و زيباتر نشون بده
احتیاجی به تفکیک نیست
تفکیک ما همون فیلدی هم در پپاسخ و هم در سوال به صورت برابر یک کد قرار میگیره

zahraf
دوشنبه 09 خرداد 1390, 20:37 عصر
مشكل اينجاست كه پاسخها رو در يك ستون جداگانه و در كنار سؤال مينويسه اما من ميخوام در زير سؤال ، پاسخ قرار بگيره :گریه:

لطفا به عكس موجود در پست 11 نگاه كنيد تا منظورم رو متوجه بشين