Problema IsPostBack

venerdì 27 giugno 2008 - 13.42

Anonimo Profilo | Senior Member

Salve, io ho un problema come dice il titolo.

Perchè ogni volta che invio e modifico un dato devo fare F5 dal browser per aggiornare quello che gli ho scritto dopo avere premuto il pulsante di modifica?.
il passaggio è cosi: http://localhost:82/admin/user/user_update.aspx?user=luigi
grazie, vi posto il codice:
user_update.aspx
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
user_update.aspx.cs
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.Odbc; public partial class admin_user_user_update : System.Web.UI.Page { string ConnectionString = ConfigurationManager.AppSettings["DBConnectionString"]; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Popola(); } } private void Popola() { string str_name = Request.QueryString["user"]; string str_query = "SELECT * FROM user WHERE user_name='" + str_name + "'"; OdbcConnection conn = new OdbcConnection(ConnectionString); OdbcCommand command = new OdbcCommand(str_query, conn); command.Connection.Open(); OdbcDataReader reader = command.ExecuteReader(); while (reader.Read()) { name.Text = "" + reader["user_name"] + ""; Firstname.Text = "" + reader["user_firstname"] + ""; sex.Text = "" + reader["user_sex"] + ""; birthday.Text = "" + reader["user_birthday"] + ""; username.Text = "" + reader["user_username"] + ""; password.Text = "" + reader["user_password"] + ""; email.Text = "" + reader["user_email"] + ""; skype.Text = "" + reader["user_skype"] + ""; msn.Text = "" + reader["user_msn"] + ""; other.Text = "" + reader["user_other"] + ""; photo.Text = "" + reader["user_photo"] + ""; city.Text = "" + reader["user_city"] + ""; cap.Text = "" + reader["user_cap"] + ""; address.Text = "" + reader["user_address"] + ""; telephone.Text = "" + reader["user_telephone"] + ""; info.Text = "" + reader["user_info"] + ""; suffering.Text = "" + reader["user_suffering"] + ""; hate.Text = "" + reader["user_hate"] + ""; friends.Text = "" + reader["user_friends"] + ""; } command.Connection.Close(); } protected void Button2_Click(object sender, EventArgs e) { //string str_id = Request.QueryString["id"]; string str_name = Request.QueryString["user"]; OdbcConnection conn = new OdbcConnection(ConnectionString); string str_query = "UPDATE user SET user_name='" + name.Text + "'," + "user_firstname='" + Firstname.Text + "'," + "user_sex='" + sex.Text + "'," + "user_birthday='" + birthday.Text + "'," + "user_username='" + username.Text + "'," + "user_password='" + password.Text + "'," + "user_email='" + email.Text + "'," + "user_skype='" + skype.Text + "'," + "user_msn='" + msn.Text + "'," + "user_other='" + other.Text + "'," + "user_photo='" + photo.Text + "'," + "user_city='" + city.Text + "'," + "user_cap='" + cap.Text + "'," + "user_address='" + address.Text + "'," + "user_telephone='" + telephone.Text + "'," + "user_info='" + info.Text + "'," + "user_suffering='" + suffering.Text + "'," + "user_hate='" + hate.Text + "'," + "user_friends='" + friends.Text + "' WHERE user_name='" + str_name + "'"; OdbcCommand command = new OdbcCommand(str_query, conn); command.Connection.Open(); command.ExecuteNonQuery(); Response.Write(str_query); command.Connection.Close(); Response.Redirect("Default.aspx"); } }

Mi sapete dire qual'è il problema?.
grazie mille!!

rossimarko Profilo | Guru

Ciao,

se devi ricaricare i dati da db puoi richiamare direttamente la funzione Popola all'interno del codice del pulsante che hai premuto, invece che fare il redirect

protected void Button2_Click(object sender, EventArgs e) { //string str_id = Request.QueryString["id"]; string str_name = Request.QueryString["user"]; //..... codice aggiornamento Popola(); }


PS: un piccolo consiglio. Non creare i command delle query accodando il testo. Ti suggerisco di leggere questo post: http://blogs.dotnethell.it/suxstellino/SQL-Injection-sottovalutare-Mai__13727.aspx

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Anonimo Profilo | Senior Member

ok,
grazie per il consiglio....

ma per l'SQL Injection ... non è che c'è una bellina classe che fa tutto lei?.

grazie.

rossimarko Profilo | Guru

No, ma è molto semplice da gestire.

Devi semplicemente definire i parametri nel commandText, ad esempio:
SELECT <campi> FROM <tabella> WHERE campo1 = @parametro1 AND campo2 = @parametro2..

e poi nel tuo command aggiungi i parametri con il relativo valore.

Qui puoi trovare degli esempi: http://www.microsoft.com/italy/technet/security/guidance/secmod87.mspx#E5FAC
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Anonimo Profilo | Senior Member

grazie,

per adesso ho fatto una prova cosi:
mi dici se va bene:
OdbcParameter paramPN = command.Parameters.Add("@name", OdbcType.VarChar, 255);

user_name='" + name.Text + "'

questo lo devo far diventare cosi:
user_name='@name'
giusto?.

rossimarko Profilo | Guru

>
>questo lo devo far diventare cosi:
>user_name='@name'
>giusto?.


Si, devi però togliere gli apici, ovvero farlo diventare
user_name=@name


Una domanda: su che database ti stai collegando? Sql, access, oracle... ?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Anonimo Profilo | Senior Member

Mysql con odbc, perchè l'hoster non mi fa installare nulla. e se voglio installare qualcosa, devo prendere Server virtuale e Server Dedicato (Ma non ho soldi per questi due).

Anonimo Profilo | Senior Member

ci stiamo sbagliando tutte due,
la faccenda per mysql via odbc e cosi:

OdbcParameter param1 = command.Parameters.Add("name", OdbcType.VarChar, 255); param1.Value = name.Text;
e la query cosi:
string str_query = "UPDATE user SET user_name=?,"
cosi funziona per mysql quello di prima forse era per SQL2005, perchè non mi prendeva il valore , mettendo ? mi funziona.
ti linko un'articolo di msdn:

http://msdn.microsoft.com/en-us/library/cc676512.aspx

e questo:
http://blog.html.it/archivi/2008/06/27/un-tool-microsoft-contro-la-sql-injection.php

rossimarko Profilo | Guru

>ci stiamo sbagliando tutte due,
>la faccenda per mysql via odbc e cosi:
>
>
> OdbcParameter param1 =
>command.Parameters.Add("name", OdbcType.VarChar, 255);
> param1.Value = name.Text;
>
>e la query cosi:
>
>string str_query = "UPDATE user SET user_name=?,"
>
>cosi funziona per mysql quello di prima forse era per SQL2005,

Infatti, era per quello che ti ho chiesto che database usavi, perchè ogni db ha la sua sintassi nella definizione dei parametri.
Meglio così...
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5