PDA

View Full Version : سوال: چك نكردن اطلاعات فرم لاگين از ديتابيس



oghab1
جمعه 01 بهمن 1389, 03:30 صبح
سلام

من يه صفحه لاگين درست كردم كه كدهاي html آن شامل


<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Default3" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<table border="0" style="width: 100%; height: 504px">
<tr>
<td align="center" style="width: 100%">
<fieldset style="width: 296px; height: 112px" dir="rtl">
<legend dir="rtl">ورود به سایت</legend>
<table border="0">
<tr>
<td>
نام کاربری :</td>
<td align="right">
<asp:TextBox ID="txt_uid" runat="server" Width="144px"></asp:TextBox></td>
<td>
</td>
</tr>
<tr>
<td>
رمز عبور :</td>
<td align="right">
<asp:TextBox ID="txt_pwd" runat="server" TextMode="Password" Width="144px"></asp:TextBox></td>
<td>
</td>
</tr>
<tr>
<td colspan="2">
<asp:CheckBox ID="chk_member" runat="server" Text="مرابه خاطر بسپار" /></td>
<td>
</td>
</tr>
<tr>
<td colspan="3">
<asp:Label ID="lbl" runat="server" ForeColor="Red" Text="نام کاربری یا رمز عبور نادرست می باشد"
Visible="False"></asp:Label></td>
</tr>
<tr>
<td>
</td>
<td align="center">
<asp:Button ID="btn_submit" runat="server" CssClass="button" Text="ورود" OnClick="btn_submit_Click" /></td>
<td>
</td>
</tr>
</table>
</fieldset>
</td>
</tr>
</table>
</asp:Content>


كدهاي زدن دكمه ورود به شكل زير


OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\\Inetpub\\wwwroot\\login\\login.mdb");
OleDbCommand cmd = new OleDbCommand("select count(*) from tbl_members where uid=? and pwd=?", con);
cmd.Parameters.AddWithValue("uid", txt_uid.Text);
cmd.Parameters.AddWithValue("pwd", txt_pwd.Text);
con.Open();

object o = null;
o = cmd.ExecuteScalar();
if (o != null)
{
FormsAuthentication.RedirectFromLoginPage(txt_uid. Text, chk_member.Checked);
}
else if (o == null)
{
lbl.Visible = true;
}
con.Close();

}
و تنظيمات فايل كانفيگم به اين صورت است


<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
<authentication mode="Forms">
<forms name="MyAppCookie" loginUrl="Login.aspx" protection="All" timeout="30" defaultUrl="Default.aspx"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<compilation debug="true"/></system.web>
<location path="Register.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>

اين دستورات مشكلي ندارن و اجرا ميشن هر صفحه اي فراخواني شود صفحه لاگين ميايد

مشكل من اينجا است كه در صفحه لاگين با توجه به اينكه اطلاعات بانك اطلاعاتي اكسس را داده ام اطلاعات را نميخواند و چه فرم لاگين را خالي بذاريم يا اشتباه پر كنيم دكمه ورود را بزنيم كاربران وارد ميشوند

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

sonixax
جمعه 01 بهمن 1389, 04:02 صبح
یه سوال
ما توی PHP بسته به متد ارسال اطلاعات فرممون مثل GET یا POST از متغیر های سراسری $_GET و $_POST استفاده میکنیم . یعنی بین ارسال اطلاعات از طریق GET و POST فرق هست و باید هم باشه .
چرا اینجا همچین خبری نیست ؟

javad.nic63
شنبه 02 بهمن 1389, 08:43 صبح
من اينطوري استفاده مي کنم.



OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\\Inetpub\\wwwroot\\login\\login.mdb");
OleDbCommand cmd = new OleDbCommand("select count(*) as number from tbl_members where uid=@uid and pwd=@pwd", con);
cmd.Parameters.AddWithValue("@uid", txt_uid.Text);
cmd.Parameters.AddWithValue("@pwd", txt_pwd.Text);
con.Open();
OleDbDataReader dr=cmd.executeReader();
if (dr.HasRows)
{
dr.read();
if (Convert.ToInt32(dr["number"])>1)
lbl.Text = "شما با موفقيت وارد شديد";

}
else
{
lbl.Text ="نام کاربري يا رمز عبور صحيح نمي باشد. ";
}
con.Close();

}



ضمنا دستور sql اشتباه است. بايد اينطوري باشد.



select count(*) as number from tbl_members where uid=@uid and pwd=@pwd


و در قسمت اضافه کردن پارامترها اينطوري بنويسي



cmd.Parameters.AddWithValue("@uid", txt_uid.Text);
cmd.Parameters.AddWithValue("@pwd", txt_pwd.Text);



اینو قبلاً هم بهت گفته بودم. صدا زدن پارامترهات مشکل داشت. من توی دستور sql تعداد userها رو گرفتم و اونو توی number ریختم داخل if اون number رو چک کردم که بیشتر از 0 باشه.

oghab1
یک شنبه 03 بهمن 1389, 22:43 عصر
آقا من از كد شما استفاده ميكنم ولي وقتي اطلاعات وارد ميكنم و دكمه ورود ميزنم يا حتي خالي دكمه ورود بزنم از اين خط ارور ميگيره


OleDbDataReader dr = cmd.ExecuteReader();

ميگه

Exception Details: System.Data.OleDb.OleDbException: The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.


من كه زبون اين نميفهمم شما اگر ميفهميد بفرماييد مشكلش چيه

javad.nic63
دوشنبه 04 بهمن 1389, 07:57 صبح
مطمئنی دستور sqlت درسته. من فکر میکنم از اون خطا میگیره