2016-12-02 3 views
0

Wenn ich mich anmelden möchte ich das Bild des Benutzers anzeigen.
Ich benutze Zeilen [0], aber wenn ich den Benutzer in Zeile [1] ändern, zeigt es mir die Zeile [0] Bild.
Wie implementiere ich einen Code, um die Zeilen zu wechseln und zu wissen, welcher Benutzer angemeldet ist.
Ich bin ein Anfänger hier, also nehmen Sie es langsam.Wenn ich mich mit dem Benutzer aus Zeile [0] aus der Datenbank anmelde, wird das Bild angezeigt, aber wenn ich mit dem Benutzer aus Zeile [1] das Bild loggte wird es nicht angezeigt

`C# 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["Username"] != null) 
    { 
     String a = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(a)) 
     { 
      DataTable dt = new DataTable(); 
      SqlDataAdapter comanda = new SqlDataAdapter("SELECT *FROM Register", con); 
      comanda.Fill(dt); 


      if (dt.Rows.Count > 0) 
      { 
       emailutilizator.Text = dt.Rows[0]["Email"].ToString(); 
      } 

      if (dt.Rows[0]["ImageData"].ToString().Length > 1) 
      { 
       Image1.ImageUrl = dt.Rows[0]["ImageData"].ToString(); 
      } 
      else 
      { 
       Image1.ImageUrl = "~/images/defaultuserimg.png"; 
      } 
     }` 
    } 

Die Datenbank sieht wie folgt aus

`Tabel 

CREATE TABLE [dbo].[Register] (
    [Uid]  INT   IDENTITY (1, 1) NOT NULL, 
    [Username] NVARCHAR (MAX) NULL, 
    [Email]  NVARCHAR (MAX) NULL, 
    [Password] NVARCHAR (MAX) NULL, 
    [ImageData] NVARCHAR (MAX) NULL, 
    PRIMARY KEY CLUSTERED ([Uid] ASC) 
); 
` 

[Die Informationen aus der Datenbank] [enter image description here] 2

+0

Es sieht so aus, als ob Sie den aktuellen Benutzer benötigen. Sie machen einen Vergleich der Bilddatenlänge, aber nur in Zeile0, die das Bild für den Benutzer in Zeile0 ist. Sie müssen herausfinden, in welcher Zeile sich der aktuelle Benutzer befindet. Mit diesen Daten, sollten Sie auch Ihre SQL-Anweisung verengen, versuchen Sie auf der Antwort auf diese Frage suchen: http://stackoverflow.com/questions/19078072/best-way-to-protect-against-sql-injection- in-sqldataadapter – Robbie

Antwort

1

Zuerst verwenden Sie in Ihrer SQL-Anweisung eine WHERE-Bedingung, um den angemeldeten Benutzer zurück zu holen. z.

SqlDataAdapter comanda = new SqlDataAdapter("SELECT * FROM Register WHERE [email protected]", con); 
comanda.SelectCommand.Parameters.AddWithValue("@username",Session["Username"]); 

Dann können Sie immer Zeile [0] verwenden, da nur der aktuelle Benutzer zurückgegeben wird.

Diese Lösung enthält SQL Injection Protection.

+1

danke für die Informationen ... ich schätze – Daniel

+0

@SereDaniel sollten Sie als Antwort markieren, wo immer jemand Lösung Ihr Problem gelöst hat. – Robbie

+1

Entschuldigung es ist mein erster Beitrag hier ... thx für das Erzählen ... – Daniel

2

Sie erhalten alle Zeilen mit

SELECT * FROM Register 

aber dann immer die erste Zeile auswählen Zeile [0 ].

Sie sollten es ändern zu

SELECT * FROM Register WHERE Username = ' + Session["Username"] + ' 

Auf diese Weise werden Sie nur so eine Zeile bekommen es mit Row Auswahl von [0] in Ordnung sein wird.

... aber es ist nicht genau tun so, als offen für SQL-Injection-Angriffe. Siehe What are good ways to prevent SQL injection?

+0

Vielen Dank, ich versuchte eines Tages, es zu verstehen .... thx wieder: D – Daniel

+1

Dort gehen wir, ich wusste, jemand würde die Lücken füllen - siehe Lösung von @Robbie –

+0

Ich sah es, es ist gelaufen perfekt – Daniel

Verwandte Themen