Gå til innhold

Anbefalte innlegg

Hei!

 

Jeg Har en side med to DropDownList på seg. Den ene listen populeres i Page_Load() med informasjon som hentes fra en database.

 

Det jeg ønsker er at jeg ved å velge et element på DropDownListen min kan bruke det som står i den i en SQL spørring for å populere den andre boksen.

 

 

		protected void Page_Load(object sender, EventArgs e)
	{
		dbConn = tcObj.returnConnection();

		try
		{
			dbConn.Open();
		}
		catch (Exception connectionException) { }

		populateClientDropdown();
	}

 

 

		private void populateClientDropdown()
	{
		clientDownList.Items.Clear();
		executeReader("SELECT Company FROM Client");
		dropDownElements.Clear();

		while (dbReader.Read())
		{
			dropDownElements.Add(dbReader["Company"].ToString());
		}

		dbReader.Close();

		for (int i = 0; i < dropDownElements.Count; i++)
		{
			ListItem lstItem = new ListItem(dropDownElements[i].ToString());
			clientDownList.Items.Add(lstItem);
		}
	}

 

 

		private void populateSubClientDropdown()
	{
		subClientDropDownList.Items.Clear();
		executeReader("SELECT Client_Location.Sub_Company_Name FROM Client_Location, Client WHERE Client_Location.Client_ID = Client.ID_Client AND Client.Company = '" + clientDownList.Text +"'");
		dropDownElements.Clear();

		while (dbReader.Read())
		{
			dropDownElements.Add(dbReader["Sub_Company_Name"].ToString());
		}

		for (int i = 0; i < dropDownElements.Count; i++)
		{
			ListItem lstItem = new ListItem(dropDownElements[i].ToString());
			subClientDropDownList.Items.Add(lstItem);
		}
	}

 

 

		protected void clientDownList_SelectedIndexChanged(object sender, EventArgs e)
	{
		populateSubClientDropdown();
	}

 

 

<asp:DropDownList ID="clientDownList" runat="server" AutoPostBack="True" 
onselectedindexchanged="clientDownList_SelectedIndexChanged"> 
</asp:DropDownList>

 

Det som skjer nå, er at Page_Load() kjøres hver gang jeg endrer element i DropDownListen min, noe som resulterer i at feil verdi blir brukt når jeg bruker clientDownList.Text i spørringen min.

 

Håper at noen tar seg tid til å hjelpe meg :)

 

Mvh

 

Francis

Endret av :Francis:
Lenke til kommentar
Videoannonse
Annonse

Ellers: Pass på SQL injection.. ;)

Parameteriser alltid alltid alltid alltid samtlige sql-parametre:

 

SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT Client_Location.Sub_Company_Name FROM Client_Location, Client WHERE Client_Location.Client_ID = Client.ID_Client AND Client.Company = @Company";
cmd.Parameters.AddWithValue("@Company", clientDownList.Text);

 

Husk Bobby Tables... :)

Lenke til kommentar

Tusen tusen takk!

 

Dette løste problemet:

 

 

		private void populateClientDropdown()
	{
		if (clientDownList.Text == "")
		{
			clientDownList.Items.Clear();
			executeReader(getClientString);
			dropDownElements.Clear();

			while (dbReader.Read())
			{
				dropDownElements.Add(dbReader["Company"].ToString());
			}

			dbReader.Close();

			for (int i = 0; i < dropDownElements.Count; i++)
			{
				ListItem lstItem = new ListItem(dropDownElements[i].ToString());
				clientDownList.Items.Add(lstItem);
			}
		}
	}

 

Francis

Endret av :Francis:
Lenke til kommentar
Tusen tusen takk!

 

Dette løste problemet:

Nja - "" kan også potensielt være en gyldig verdi - pleier selv da heller å teste på om Count == 0 ;)

 

Av paranoia-hensyn, så pleier jeg å ikke lese verdien fra dropdown'en - pleier heller å lagre det internt i en array/liste, og lagrer indekset i listen i dropdown'en. Da kan man ikke hacke seg til ugyldige verdier.. ;)

 

Bra det fungerer igjen! Men - parameteriser SQL-queriene dine, ellers vanker det kokos og sprekker i objektivet!

Lenke til kommentar

Jeg er 110% sikker på at brukerne av systemet ikke kan SQL, men det er kanskje ikke så dumt å gardere seg mot det i tilfelle rottefelle. Jeg hadde helt ærlig ikke tenkt tanken en gang.

 

Når jeg programmerte websiden min brukte jeg PHP sin innebygde funksjon for å unngå denne problematikken:

 

$name_bad = mysql_real_escape_string($name_bad);

 

Mvh

 

Francis

Endret av :Francis:
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...