PDA

View Full Version : نحوه استفاده از خاصیت Request.QueryString جهت دریافت مقادیر مورد نظر



davood59
چهارشنبه 04 آبان 1390, 14:34 عصر
سلام دوستان؛
وفتتون بخیر باشه
امروز تو یه pdf یه مثالی دیدم که شرط و عبارت مورد نظر رو اینجوری چک می کرد:


sql_query= "SELECT ProductName, ProductDescription FROM Products WHERE
ProductNumber " & Request.QueryString("ProductID")

من هم میخواستم طبق همین دستور کد خودم رو بنویسم(با توضیح اینکه کد من میخواد پسورد ورودی رو با پسورد موجود توی بانک از نظر یکسان بودن بررسی کنه) ولی از کدم ایراد گرفت؛ میگه که عبارت آخری بعنوان یک property هستش که من دارم به اشتباه از اون به عنوان متد استفاده می کنم؛
کد من :


string strQry = "SELECT Count(*) FROM MyTable WHERE Password" & Request.QueryString("'" + TextBox2.Text + "'");

ممنون میشم اگه توضیحی دارید بفرمایید.
ضمنا به چه دلیل داره مقادیر رو به اینصورت میگیره؟ خب به همون روش معمول اگه بگیره ایرادی داره؟ اینجا میخواد قبل از دریافت رشته مورد نظر ، شرایطی رو بررسی کنه و بعدش پاس بده به اینجا؟

smm2006sh
چهارشنبه 04 آبان 1390, 15:20 عصر
سلام

equest.QueryString("ProductID")
ببین دوست کم اینجوری صدا زدن یه مقدار به وسیله رشته تقاضا باید حتما
response.redirect(رشته مورد نظر) را داشته باشه . توی اون مثالی که شما چک کردید و خواستید مثل اون عمل کنید باید حتما رشته تقاظا را برای اون ارسال کنید

Saman Hashemi
چهارشنبه 04 آبان 1390, 15:27 عصر
Request.QueryString("'" + TextBox2.Text + "'")
اینجا مقدار از روی url میخونه شما نباید بهش مقدار بدید...!

farhud
چهارشنبه 04 آبان 1390, 18:13 عصر
Request.QueryString[stringName]

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


Response.Redirect("Page2.aspx?ID=bh3hb");



در صفحه دوم از این مقدار به صورت زیر استفاده می کنید:



TextBox1.Tex=Request.QueryString["ID"].ToString();

asif1358
چهارشنبه 04 آبان 1390, 20:17 عصر
سلام
هر دو اشتباه است؛ هم مثال پی دی اف که علامت مساوی نداره؛ بعد از WHERE ProductNumber یک علامت مساوی لازم داره.
در مورد شما عرض کنم: که در مثال پی دی اف از ویژوال بیسیک استفاده شده اما شما با سی شارپ کار می کنید؛ بعلاوه که Request.QueryString برای گرفتن رشته ای است که از یک صفحه ای دیگر درون یک متغیر گذاشته شده و ارسال شده است؛ پس در صفحه مقصد باید بنویسید:


string strQry = "SELECT Count(*) FROM MyTable WHERE Password = '" + Request.QueryString["pass"] + "'";

MiladSe7en
چهارشنبه 04 آبان 1390, 20:19 عصر
سلام
هر دو اشتباه است؛ هم مثال پی دی اف که علامت مساوی نداره؛ بعد از WHERE ProductNumber یک علامت مساوی لازم داره.
در مورد شما عرض کنم: که در مثال پی دی اف از ویژوال بیسیک استفاده شده اما شما با سی شارپ کار می کنید؛ بعلاوه که Request.QueryString برای گرفتن رشته ای است که از یک صفحه ای دیگر درون یک متغیر گذاشته شده و ارسال شده است؛ پس در صفحه مقصد باید بنویسید:


string strQry = "SELECT Count(*) FROM MyTable WHERE Password = " + Request.QueryString["pass"];



البته برای پسورد که معمولا از نوع nchar یا nvarchar یا از این قبیل است دستور زیر درسته:
string strQry = "SELECT Count(*) FROM MyTable WHERE Password = '" + Request.QueryString["pass"] + "'";
یا
string strQry = "SELECT Count(*) FROM MyTable WHERE Password = N'" + Request.QueryString["pass"] + "'";

البته این رو هم بگم که اصلا از نظر امنیتی این راه توصیه نمیشه.

asif1358
چهارشنبه 04 آبان 1390, 22:26 عصر
سلام
روش دوم بهتره. از نظر امنیتی هم اصلا درست نیست

davood59
شنبه 07 آبان 1390, 11:43 صبح
ضمن تشکر از همه دوستان عزیز؛
پس طبق گفته های شما:

اینجا مقدار از روی url میخونه شما نباید بهش مقدار بدید...!
یعنی هیچوقت نمیشه بطور مستقیم بهش مقدار داد و همیشه باید از طریق url باشه !

روش دوم بهتره. از نظر امنیتی هم اصلا درست نیست
به نظر شما جهت اینکه امنیت رو هم حفظ کرده باشیم از stored procedure استفاده کنیم؟
مجددا از شما سپاسگزارم.

mehdi.mousavi
شنبه 07 آبان 1390, 17:23 عصر
به نظر شما جهت اینکه امنیت رو هم حفظ کرده باشیم از stored procedure استفاده کنیم؟

سلام.
هم می تونید از Stored Procedure استفاده کنید، هم از Parametric Command (http://www.dotnetperls.com/sqlparameter) ها.
اما هرگز از Dynamic SQL بدین شکلی که در مثالهای فوق آورده شده، استفاده نکنید.

موفق باشید.

programer-ir
شنبه 07 آبان 1390, 20:44 عصر
سلام دوستان؛
وفتتون بخیر باشه
امروز تو یه pdf یه مثالی دیدم که شرط و عبارت مورد نظر رو اینجوری چک می کرد:


sql_query= "SELECT ProductName, ProductDescription FROM Products WHERE
ProductNumber " & Request.QueryString("ProductID")

من هم میخواستم طبق همین دستور کد خودم رو بنویسم(با توضیح اینکه کد من میخواد پسورد ورودی رو با پسورد موجود توی بانک از نظر یکسان بودن بررسی کنه) ولی از کدم ایراد گرفت؛ میگه که عبارت آخری بعنوان یک property هستش که من دارم به اشتباه از اون به عنوان متد استفاده می کنم؛
کد من :


string strQry = "SELECT Count(*) FROM MyTable WHERE Password" & Request.QueryString("'" + TextBox2.Text + "'");

ممنون میشم اگه توضیحی دارید بفرمایید.
ضمنا به چه دلیل داره مقادیر رو به اینصورت میگیره؟ خب به همون روش معمول اگه بگیره ایرادی داره؟ اینجا میخواد قبل از دریافت رشته مورد نظر ، شرایطی رو بررسی کنه و بعدش پاس بده به اینجا؟



این حالت وقتی که متد فرم روی حالت پست کار می کنه ولی موقعی که روی گت کار نمی کنه راهش چیه؟؟؟؟