ورود

View Full Version : مبتدی: ساخت صفحه جستجوی پیشرفته



sara70
شنبه 20 شهریور 1389, 09:05 صبح
سلام به همه اساتید

صفحه جستجوی پیشرفته سایتم رو با کد زیر ساختم اما در بیشتر مواقع عبارت مورد جستجو رو پیدا نمی کنه در حالی که آن عبارت در پایگاه داده ام وجود داره.



SqlDataSource1.SelectCommand = "SELECT Name,Translate,ID_book FROM book WHERE (Name like '%'+'" + TextBox1.Text + "'+'%' AND Auther like '%'+'" + TextBox2.Text + "'+'%' AND ID_Cat=" + Int32.Parse(DropDownList1.SelectedValue) + ")";



کدهام چه ایرادی داره؟

Mostafa_Dindar
شنبه 20 شهریور 1389, 10:02 صبح
سلام به همه اساتید

صفحه جستجوی پیشرفته سایتم رو با کد زیر ساختم اما در بیشتر مواقع عبارت مورد جستجو رو پیدا نمی کنه در حالی که آن عبارت در پایگاه داده ام وجود داره.


SqlDataSource1.SelectCommand = "SELECT Name,Translate,ID_book FROM book WHERE (Name like '%'+'" + TextBox1.Text + "'+'%' AND Auther like '%'+'" + TextBox2.Text + "'+'%' AND ID_Cat=" + Int32.Parse(DropDownList1.SelectedValue) + ")";

کدهام چه ایرادی داره؟

چرا AND ? از OR استفاده کن .

همچنین بهتره از Stored Procedure استفاده کنی

تکنیکی بسیار ساده و کاربردی برای جستجوی پویا (http://www.30sharp.com/article/13/252/11/%D8%AA%DA%A9%D9%86%DB%8C%DA%A9%DB%8C-%D8%A8%D8%B3%DB%8C%D8%A7%D8%B1-%D8%B3%D8%A7%D8%AF%D9%87-%D9%88-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%D9%88%DB%8C%D8%A7.aspx)

موفق باشید

صادق صدقی
شنبه 20 شهریور 1389, 10:03 صبح
سلام
جستجوت درسته
چون دوتا like داری و هر و رو گفتی شبییه یک رشته باشن
ممکنه یک فیلدت باشه اما اون فیلده دیگه شبیه اون نباشه

در ضمن با Stored Procedure کار کن
امنیتت افتضاحه ها!!!!
باید پارامتر بفرستی
به راحتی دیتا بیست هک می شه ها
با یک خط کد تمامه اطلاعاتت پخ پخ می شه:بامزه:

موفق باشی

sara70
شنبه 20 شهریور 1389, 10:20 صبح
سلام

در ضمن با Stored Procedure کار کن
امنیتت افتضاحه ها!!!!
باید پارامتر بفرستی
به راحتی دیتا بیست هک می شه ها
با یک خط کد تمامه اطلاعاتت پخ پخ می شه:بامزه:

موفق باشی

متشکرم. خیلی مبتدی ام چرا امنیت به خطر می افته؟ باید چه کاری براش انجام بدم؟ تمام اتصالات به دیتا بیسم رو همین فرمی نوشتم. یکم بیشتر راهنمایی لطفا

صادق صدقی
شنبه 20 شهریور 1389, 11:03 صبح
متشکرم. خیلی مبتدی ام چرا امنیت به خطر می افته؟ باید چه کاری براش انجام بدم؟ تمام اتصالات به دیتا بیسم رو همین فرمی نوشتم. یکم بیشتر راهنمایی لطفا


ببین کلا امنیت زیره صفره اینطوری
با یک خط کد تمامه اطلاعاتت می پره!!!!!

خیلی باید کار کنی
منم اولا از تو بدتر بودم
تحقیق کن
خیلی باید کار کنی
---------------------------------------------------------------------
کتاب های فارسی Asp.Net (http://barnamenevis.org/forum/showthread.php?t=243542)

sara70
شنبه 20 شهریور 1389, 11:41 صبح
سلام
جستجوت درسته

در ضمن با Stored Procedure کار کن
باید پارامتر بفرستی


ببینید این دستور stored procedure درسته؟ در مواقعی که کد قبلیم کار می کرد هم کار نمی کنه.



ALTER PROCEDURE AdvanceSearch
(
@name ntext ,
@auther ntext,
@category int
)

AS
SELECT ID_Cat,Auther,Price,Img,Name1,Translate,ID_book
FROM book
WHERE (Name1 like '%'+'@name'+'%' OR Auther like '%'+'"+@auther+"'+'%' AND ID_Cat=@category)

RETURN



توی فایل c# هم از این کدها استفاده کردم.




SqlCommand com = new SqlCommand("",con);
com.Parameters.AddWithValue("@name", TextBox1.Text);
com.Parameters.AddWithValue("@auther", TextBox2.Text);
com.Parameters.AddWithValue("@category", Int32.Parse(DropDownList1.SelectedValue));
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "AdvanceSearch";
SqlDataReader dr = com.ExecuteReader();
DataList1.DataSource = dr;
DataList1.DataBind();

صادق صدقی
شنبه 20 شهریور 1389, 14:09 عصر
احسنت
حالا شددددددددد

اینطوری امنیت دیگه در حده صفر نیست

در مورده سرچت هم من از دیتا بیست خبر ندارم
دیتا بیست رو واسم میل کن
تا کوئریتو چک کنم
(sedghi2070@gmail.com)


-------------------------------------------------------------------

کتاب های فارسی ASP (http://barnamenevis.org/forum/showthread.php?t=243542)

صادق صدقی
شنبه 20 شهریور 1389, 16:42 عصر
مشکل رو حل کردم و فرستادم


-------------------------------------------------------------------

کتاب های فارسی ASP (http://barnamenevis.org/forum/showthread.php?t=243542)

sara70
شنبه 20 شهریور 1389, 20:55 عصر
ضمن تشکر از صادق صدقی

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

کدهای C# همونیه که بالا نوشتم.
کدهای درون Stored Prosedure هم همونه فقط باید نوع ntext رو به نوع nvarchar(MAX) تغییر داد. به گفته آقای صدقی عملگر like با نوع داده ntext کار نمی کنه.

مشخصه که باید نوع داده های درون پایگاه داده رو هم به nvarchar(MAX) تغییر داد.




ALTER PROCEDURE AdvanceSearch
(
@name nvarchar(MAX) ,
@auther nvarchar(MAX),
@category int
)

AS
SELECT ID_Cat,Auther,Price,Img,Name,Translate,ID_book
FROM book
WHERE (Name like '%'+@name+'%' AND Auther like '%'+@auther+'%' AND ID_Cat=@category AND Allow_Show='true')

RETURN