Autor | Zpráva | ||
---|---|---|---|
Mortem Profil |
#1 · Zasláno: 8. 3. 2016, 18:12:23
Zdravím mám školní projekt udělat školní knihovku udělal jsem knihy, kde jsem dal obsah z danych knih. Přidal jsem do databaze sloupec "zivotopis" a chtěl bych tam zapsat něco o autorovi atd. Ale jelikož mám pár případů kde autor napsal třebas 2 knihy. Tak se chci zeptat jestli by nějak udělat, aby se mi zobrazil jenom 1x v seznamu autorů, ale zapsal se k oboum knihám.
|
||
juriad Profil |
#2 · Zasláno: 8. 3. 2016, 18:26:29
To je samozřejmé, pokud máš správně navrženou databázovou strukturu. Jak vypadá tvá databáze (tabulky, sloupce a jejich datové typy)?
Přečti si první polovinu programujte.com/clanek/2008071900-normalizace-relacnich-databazi. |
||
Mortem Profil |
#3 · Zasláno: 8. 3. 2016, 18:31:32
juriad:
„pokud máš správně navrženou databázovou strukturu. Jak vypadá tvá databáze (tabulky, sloupce a jejich datové typy)?“ To je moje databáze, kod v php mám napsaný jako normální výpis. |
||
juriad Profil |
Tak to je úplně špatně.
Máš tam mít několik tabulek: kniha (id INT PK, autor_id INT, zanr_id INT, obsah TEXT, rok_vydani YEAR) autor (id INT PK, jmeno VARCHAR, zivotopis TEXT) zanr (id INT PK, nazev VARCHAR) Tabulky potom při SELECTech budeš spojovat pomocí JOINů. Toto zajistí, že všechny údaje budou v databázi právě jednou. |
||
Mortem Profil |
#5 · Zasláno: 8. 3. 2016, 19:20:24
juriad:
„Přičemž akceptovatelné by ještě bylo nemít tabulku pro žánry, ale rovnou je uvádět v tabulce kniha.“ A mužu se zeptat jak to teda potom propojím? Když si vytvořím tydle tabulky |
||
juriad Profil |
#6 · Zasláno: 8. 3. 2016, 19:28:57
Seznam autorů je zřejmý. Seznam žánrů také. To jsou dotazy z jediné tabulky.
Seznam knih: SELECT k.*, a.jmeno, z.nazev FROM kniha k JOIN autor a ON k.autor_id = a.id JOIN zanr z ON k.zanr_id = z.id # můžeš si přidat filtrování třeba podle autora: # WHERE a.id = 42 # nebo podle žánru: # WHERE z.id = 3 |
||
Mortem Profil |
vytvořil jsem si teda ty dvě tabulky, autor a kniha. Ale mám problem hned s tím autorem přitom to nevypisuje žádnou chybu nebo tak .. Když chci přidat autora. Tak vlastně všechno proběhne v pohodě, až na to že se nepřidá. Předtím mi to tímto způsobem fungovalo bezproblému neví někdo v čem muže byt chyba?
Kod mám takhle Tabulku takhle Dobrý příště se lépe podívám chyběl mi tam apostrof :D |
||
juriad Profil |
#8 · Zasláno: 8. 3. 2016, 20:52:14
Mortem:
Nevkládej sem obrázky zdrojáku! Kdo to má číst? V INSERTu ti chybí apostrof. A zapomínáš kontrolovat a escapovat uživatelské vstupy. |
||
Kajman Profil |
#9 · Zasláno: 9. 3. 2016, 00:39:29
Možná bude chtít vyučující přidat jedné knize více autorů nebo žánrů. Pak potřebujete ještě více tabulek.
kniha (id INT PK, obsah TEXT, rok_vydani YEAR) autor (id INT PK, jmeno VARCHAR, zivotopis TEXT) zanr (id INT PK, nazev VARCHAR) kniha_autor (kniha_id INT, autor_id INT) kniha_zanr (kniha_id INT, zanr_id INT) A pak stejná kniha může mít opakované vydání v různých rocích (ale může říct vyučujícímu, že může mít i jiný překlad, takže potřebujete jiný obsah). |
||
Mortem Profil |
#10 · Zasláno: 9. 3. 2016, 15:11:45
juriad:
Máš pravdu screenovat kod je blbost omlovám se. Autori fungujou jak mají teď se dostávám k problemu jak přidat tu knihu aji s autorem do db, nevím jak jak na to. <?php $errors = array(); $pom = "1"; if (isset($_POST['pridat'])) { $nazev = $_POST['nazev']; $rok = $_POST['rok']; $obsah = $_POST['obsah']; if (empty($nazev)) { array_push($errors, 'Nazev knihy musí byt vyplněný!'); } if (empty($errors)) { $zapis = mysqli_query($con, "INSERT INTO kniha (autor,obsah,rok_vydani,nazev) VALUES ('$obsah','$rok','$nazev');"); echo "<p class='hlaska'>Kniha byla úspěšně přidána do DB. <a class='hlaska' href='administrace.php?stranka=Sprava-knih'>Přejít zpět</a></p>"; echo "<meta http-equiv='refresh' content='1;url=administrace.php?stranka=Sprava-knih'>"; die(); $pom = "0"; } } if ($pom == "1") { ?> Takhle to mám napsané, ale to je jenom na vložení knihy a já tam chci vybrat i autora třebas ze seznamu rozbalovacího, ale nevím jak jej tam vypsat popř připojit. |
||
juriad Profil |
Takovýto select dokážeš vygenerovat pomocí PHP jednoduchým dotazem do tabulky autorů.
<select name="autor"> <option value="1">Franta</option> <option value="2">Pepa</option> ... </select> Při přidávání autora pak už budeš pracovat jen s id autora, zkontroluješ jen, zda id autora existuje v databázi. (Pokud si do databáze přidáš cizí klíče, bude ti databáze pak sama kontrolovat, aby autor skutečně existoval. Ale to je asi příliš pokročilá technika.) |
||
Časová prodleva: 9 let
|
0