Diskuze: Combobox s podmienkou
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 12 zpráv z 12.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj,
cmd1.CommandText = "select Meno from Zoznam where Pohlavie=@pohlavie";
cmd1.Parameters.AddWithValue("@pohlavie", x);
V tomto případě ti i SqlParameter "detekuje" typ hodnoty x a správně je předá SQL.
PS: combobox pro zobrazení předaných hodnot volá .ToString(), proto se ti text zobrazuje v combu dobře.
Ahoj
ďakujem za odpoveď, snažím sa porozumieť tomu čo si mi poradil a skutočne
premenná X je typu string a Pohlavie pri testovaní v comboboxe je class . Len
zaujímavé je že aj premenná x a aj comboHodnota je typu string (vidím to
pri písaní tak ako si mi radil) a aj keď si to upravím a pridám
SqlParameter funguje to správne len s premennou x, s premennou comboHodnota to
zobrazuje prázdny výber.
Zkus si třeba do MessageBoxu nechat vypsat, co ti vlastně ta tvoje "comboHodnota" vrací
Jasne. Ale nam by spis pomohlo videt i ten text, co ti to vypisuje. Treba tam mas preklep. Male velke pismenko nebo tak. A nebo primo si nech vypsat ten sql prikaz.
string x = "Muz";
cmd1.CommandText = "select Meno from Zoznam where Pohlavie='"+x+"'";
vypis (cmd1.CommandText)
cmd1.CommandText = "select Meno from Zoznam where Pohlavie='"+comboHodnota+"'";
vypis (cmd1.CommandText)
Podle toho kodu, co jsi poslal, se comboHodnota naplnuje az spustenim
funkce
comboPohlavie_SelectedIndexChanged, ktera se v tom kodu ale nespousti. Takze
by to melo byt prazdne.
A pro zapis sql prikazu bych pouzival konstrukci ala Don. Tam jde o to, ze si udela escapovani parametru sam. To je lepsi, nez nedelat ho vubec, jako to mas ty a spolehat se na bozi pomoc. Jakoze, pokud bys udelal hack typu
string x = "Muz' OR '1'='1";
cmd1.CommandText = "select Meno from Zoznam where Pohlavie='"+x+"'";
Tak ziskam kompletni vypis databaze nebo muzu spustit prikaz v prikazu...
string x = "Muz' OR (DELETE Zoznam) OR '1'='1";
Oddebuguj/odkrokuj to a popiš, kde (proměnná/properta, řádek, ...) jsou neočekávané hodnoty.
Naplnění toho druhého comboboxu musíš provádět v události změny toho prvního
private void comboPohlavie_SelectedIndexChanged(object sender, EventArgs e)
{
//uloží do comboHodnota hodnotu zvolenú v comboboxe Pohlavie + vypíše pre kontrolu do TextBoxu
comboHodnota = comboPohlavie.Text;
tbPohlavie.Text = comboHodnota;
comboMena.Items.Clear();
con.Open();
SqlCommand cmd1 = con.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = "select Meno from Zoznam where Pohlavie='"+comboHodnota+"'";
cmd1.ExecuteNonQuery();
DataTable dt1 = new DataTable();
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
da1.Fill(dt1);
foreach (DataRow dr1 in dt1.Rows)
{
comboMena.Items.Add(dr1["Meno"]);
}
}
Ten tvůj kód jsem pouze zkopíroval a teď jsem si všimnul, že tam
nemáš uzavřené spojení s DB.
A hlavně, měl bys používat "parametrizované" dotazy
místo:
SqlCommand cmd1 = con.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = "select Meno from Zoznam where Pohlavie='"+comboHodnota+"'";
to napiš třeba takto:
SqlCommand cmd1 = new SqlCommand("SELECT Meno FROM Zoznam WHERE Pohlavie = @pohlavie", con);
cmd1.Parameters.AddWithValue("@pohlavie", comboHodnota);
Ušetříš tím psaní kódu a vyhneš se SQL injection problémům...
Ahojte
ďakujem za pomoc a rady. Medzičasom po mnohých pokusoch som aj ja prišiel na
to že to musím robiť ako mi to píšete tu vyššie. A samozrejme tiež si
nechám poradiť a budem písať kód tak ako mi radíte, aby som sa vyhol
problémom SQL injection
SqlCommand cmd1 = new SqlCommand("SELECT Meno FROM Zoznam WHERE Pohlavie = @pohlavie", con);
cmd1.Parameters.AddWithValue("@pohlavie", comboHodnota);
Aspoň som sa naučil zase niečo nové ohľadom SQL injection.
Ďakujem ešte raz za všetky Vaše príspevky.
Áno funguje to už presne tak ako som si to predstavoval. Teraz sa už
trápim zase s iným
problémom, ale najskôr sa vždy pokúsim si to sám vyriešiť, poobzerať sa
po nete a až potom ak už všetko stroskotá napíšem sem. Pokúšam sa
urobiť si aplikáciu do práce ktorá by mi mala ušetriť kopu času a
zbytočnej námahy. Zatiaľ ti Michal a aj všetci ostatný ktorý sem prispeli
ďakujem.
Zobrazeno 12 zpráv z 12.