Autor | Zpráva | ||
---|---|---|---|
peter_r Profil |
prosím o pomoc, takto mám vytvorenú ponuku na výber ponuky do formulára:
<select name="tvrdost" size="1"> <option value="">- <option value="T2">T2 <option value="T3">T3 <option value="T4">T4 <option value="T5">T5 <option value="H2">H2 <option value="H3">H3 <option value="H4">H4 <option value="H5">H5 </select> ale tých tvrdostí môže byť veľmi veľa, a nechce sa mi to vypisovať ručne, preto by som to vytvoril do tabuľky ale potom neviem ako to z tej tabuľky do ponuky vyťiahnuť if ($_POST) { Db::query(' INSERT INTO latky (nazov, typ, cislo_obj, datum_zap) VALUES (?, ?, ?, ?) ', $_POST['nazov'], $_POST['typ'], $_POST['cislo_obj'], $dt); echo('<p>Objednávka bola úspešne pridaná.</p>'); } $ponuka = Db::queryAll(' SELECT * FROM tabulka '); Tvrdosť: <select name="tvrdost" size="1"> <option value="">- <option value="T2">T2 <option value="T3">T3 <option value="T4">T4 <option value="T5">T5 <option value="H2">H2 <option value="H3">H3 <option value="H4">H4 <option value="H5">H5 </select> a neviem ako tam $ponuka dostať tabuľka s tvrdosťami sa volá tabulka a má 3 položky (id, nazov, vyrobca) |
||
Taps Profil |
#2 · Zasláno: 21. 3. 2022, 10:06:36
peter_r:
zkus Tvrdosť: <select name="tvrdost" size="1"> <option value="">-</option> <?php $ponuka = Db::queryAll(' SELECT * FROM tabulka '); foreach($ponuka as $polozka){ ?> <option value="<?php echo $polozka['nazov']; ?>"><?php echo $polozka['nazov']; ?></option> <?php } ?> </select> |
||
peter_r Profil |
super, ďakujem
ešte ale potrebujem, aby priradilo podľa výberu aj výrobcu a zapísalo to do tabuľky, niečo ako $vyber=$polozka['vyrobca'] a neviem ako na to a kde to dať |
||
peter_r Profil |
#4 · Zasláno: 22. 3. 2022, 07:03:50
nepomôže mi prosím niekto s tým? :-(
|
||
Kajman Profil |
Musíte to lépe vysvětlit, křišťálovou kouli nemáme.
Obecně byste měl mít v html atributu value jedinečné id tvrdosti a s tím v programu pracovat. Uživateli zobrazit popisný text (tedy asi ten nazov mezi <option> ). Pokud pak někde v tabulce zobrazujete název nebo výrobce, tak byste ho měl jednoduše najít dle toho jedinečného id v oné číselníkové tabulce tvrdostí, ze kterého ten <select> generujete.
|
||
peter_r Profil |
ospravedlňujem sa, myslel som že som to vysvetlil dobre, tak to skúsim rozpísať ...
Mám tabuľku s názvom tabulka, kde sú 3 stlpce: ID...nazov_tvrdost....vyrobca 1....t2.....................matador 2....t3.....................michelin 3....t4.....................continental atď Pri zapisovaní inej položky pri výbere tvrdosti ponúkne na výber tvrdosti z uvedenej tabuľky zo stĺpca názov_tvrdost (t2, t3 .....), toto už mám vyriešené vyššie, čiže zapíše to do tabuľky: Db::query(' INSERT INTO latky (nazov, typ, cislo_obj, datum_zap) VALUES (?, ?, ?, ?) ', $_POST['nazov'], $_POST['typ'], $_POST['cislo_obj'], $dt); kde do položky nazov zapise hodnotu zo <select name="nazov" size="1"> <option value="">-</option> <?php $ponuka = Db::queryAll(' SELECT * FROM tabulka '); foreach($ponuka as $polozka){ ?> <option value="<?php echo $polozka['nazov_tvrdost']; ?>"><?php echo $polozka['nazov_tvrdost']; ?></option> <?php } ?> </select> a potrebujem, aby mi do tabuľky latky ešte zapísalo výrobcu podľa zvolenej tvrdosti, čiže Db::query(' INSERT INTO latky (nazov, typ, cislo_obj, datum_zap, vyrobca) VALUES (?, ?, ?, ?) ', $_POST['nazov'], $_POST['typ'], $_POST['cislo_obj'], $dt, .......?????......); a toto neviem .......?????...... |
||
anonym_ Profil * |
#7 · Zasláno: 22. 3. 2022, 11:09:17
peter_r:
Vždyť to je přeci zbytečné. Výrobce a tvrdost je definovaná už tím ID v tabulce tabulka . Je hloupost ta data duplikovat ještě ve druhé tabulce latky , tam si ukládej pouze to ID z první tabulky.
|
||
peter_r Profil |
#8 · Zasláno: 22. 3. 2022, 11:14:58
tie dve tabuľky nemajú nič spoločné, iba to, že pri zapisovaní do druhej tabuľky pre hodnotu nazov ponúka výber z tej prvej tabuľky
|
||
anonym_ Profil * |
#9 · Zasláno: 22. 3. 2022, 11:30:19
peter_r:
Mají společné to, že obě už nyní obsahují duplicitní data ve sloupci nazov/nazov_tvrdost . Ty k tomu chceš duplikovat ještě další sloupec.
Správné řešení je mít tabulku tabulka tak, jak ji máš ty (pravděpodobně, bez dalšího kontextu jen hádám), a v tabulce latky mít sloupce tabulka_id | typ | cislo_obj | datum . Typ a výrobce pak získáš na základě toho cizího klíče tabulka_id .
|
||
peter_r Profil |
#10 · Zasláno: 22. 3. 2022, 15:09:21
už som z toho mimo aj ja, musím si to premyslieť
|
||
Kajman Profil |
Přečtěte si nějakou knížku o relačních databázích, při dodržování normálních forem vám takové řešení bude jasné.
en.wikipedia.org/wiki/Database_normalization |
||
Časová prodleva: 10 dní
|
|||
peter_r Profil |
#12 · Zasláno: 1. 4. 2022, 12:08:15
aj keď tvrdíte, že je to zbytočné, chcel by som aj tak poprosiť o radu, ako to urobiť, napíšem nový príklad:
mám tabuľku druhy_latky id_druh nazov_latky dodavatel_latky 1 Madryd Davis 2 Infinity Toptextil 3 Magic velvet Davis 4 Vienna Fargotex 5 Etna Fargotex 6 Granada Davis druhá tabuľka je latky, kde zapisujem objednávky a pri vypisovaní do poľa nazov vyberám z ponuky z prvej tabuľky Db::query(' INSERT INTO latky (nazov, metre) VALUES (?) ', $_POST['nazov'], $_POST['metre']); echo('<p>Objednávka bola úspešne pridaná.</p>'); <form method="post"> Názov látky:<select name="nazov" size="1"> <option value="">- <?php $ponuka = Db::queryAll(' SELECT * FROM druhy_latky '); foreach($ponuka as $polozka){ ?> <option value="<?php echo $polozka['nazov_latky']; ?>"><?php echo $polozka['nazov_latky']; ?></option> <?php } ?> </select> Metre:<input type="text" name="metre" /> <input type="submit" value="Pridať" /> </form> a teraz chcem aby do tabuľky latky do stĺpca dodavatel zapísalo dodávateľa z tabuľky druhy_latky podľa výberu budem vám nesmierne vďačný |
||
Serg Profil |
Máš pro to v té druhé tabulce vytvořený sloupec?
Můžeš buď (1) v php jedním SQL dotazem najít řádek vybrané látky, a dalším SQL dotazem provést INSERT. (2) Nebo lépe: neukládat redundantní (stejný) textový data ve dvou tabulkách, a při SELECTu použít JOIN :) Pro obě možnosti ale bude potřeba, abys ve value <option>u měl id_druh místo nazov_latky (jak už psal [#5] Kajman a [#7] anonym), protože id_druh je primární klíč, a tím pádem bude vyhledávání mnohem rychlejší než podle jména. <select name="latka" size="1"> ... <option value="<?php echo $polozka['id_druh']; ?>"><?php echo $polozka['nazov_latky']; ?></option> (1) <?php if (isset($_POST['latka'])) { $latky = Db::queryAll("SELECT * FROM druhy_latky WHERE id_druh = ?", intval($_POST['latka'])); if ( ! isset($latky[0])) die("Latka nenalezena."); $latka = $latky[0]; Db::query("INSERT INTO latky (nazov, dodavatel, typ, cislo_obj, datum_zap) VALUES (?, ?, ?, ?, ?)", $latka['nazov_latky'], $latka['dodavatel_latky'], $_POST['typ'], $_POST['cislo_obj'], $dt ); echo('<p>Objednávka bola úspešne pridaná.</p>'); } (2) pokud se rozhodneš jít touto cestou, tak bude potřeba upravit tabulku latky, aby se místo názvu ukládalo id_druh <?php if (isset($_POST['latka'])) { Db::query("INSERT INTO latky (id_druh, typ, cislo_obj, datum_zap) VALUES (?, ?, ?, ?)", intval($_POST['latka']), $_POST['typ'], $_POST['cislo_obj'], $dt ); echo('<p>Objednávka bola úspešne pridaná.</p>'); } výběr by se pak realizoval pomocí SELECTu ze 2 tabulek spojených pomocí JOINu: $objednavky = Db::queryAll("SELECT * FROM latky LEFT JOIN druhy_latky USING(id_druh)"); Edit: sry, trochu tam míchám id_druh a id_latky, ale předpokládám že to u tebe bude asi jedno a to samý, akroát jsi to v průběhu času přejmenoval, že? Edit 2: přepsáno vše na id_druh, protože pro použití USING je potřeba, aby se sloupce v obou tabulkách jmenovaly stejně / alternativně by šlo použít ON kde to není nutný, akorát je to delší zápis
|
||
Časová prodleva: 2 roky
|
0