Autor | Zpráva | ||
---|---|---|---|
Pevel.Sojak Profil * |
#1 · Zasláno: 12. 7. 2011, 16:59:09
Dobrý den,
znovu se na vás obracím s dotazem. Následující kód by měl vložit data do již existující tabulky a zároveň vytvořit novou tabulku. Problém je v tom, že do tabulky se data vloží úspěšně. Nová tabulka se však nevytvoří :( Předem děkuji za pomoc. $sql['categories_save'] = mysql_query ('INSERT INTO admin_web_categories (categories_name,categories_seo,categories_author) VALUES (\''.addslashes($_REQUEST['categories_add']).'\',\''.$seo.'\',\''.$_SESSION['login'].'\')'); $sql['categories_create'] = mysql_query("CREATE TABLE IF NOT EXIST `admin_web_categories_".$seo."` (id int(0) NOT NULL AUTO_INCREMENT,nazev varchar(50) COLLATE utf8_czech_ci NOT NULL,author varchar(30) utf8_czech_ci NOT NULL,content text COLLATE utf8_czech_ci NOT NULL,datum timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,seo varchar(700) COLLATE utf8_czech_ci NOT NULL)"); if ($sql['categories_save'] && $sql['categories_create']) { require ('./err/err_cat_main_done.php'); echo $form; } else { $error_h = 'Kategorie již existuje'; $error_log = 'Bohužel, vámi zadaný název kategorie již existuje.'; require ('./err/err_document.php'); echo $form; } |
||
Taps Profil |
#2 · Zasláno: 12. 7. 2011, 17:36:15 · Upravil/a: Taps
Pevel.Sojak:
jako první si vypiš mysql_error a uvidíš co je za problém $sql['categories_create'] = mysql_query("CREATE TABLE IF NOT EXIST `admin_web_categories_".$seo."` (id int(0) NOT NULL AUTO_INCREMENT,nazev varchar(50) COLLATE utf8_czech_ci NOT NULL,author varchar(30) utf8_czech_ci NOT NULL,content text COLLATE utf8_czech_ci NOT NULL,datum timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,seo varchar(700) COLLATE utf8_czech_ci NOT NULL)") or die (mysql_error()); |
||
Alphard Profil |
#3 · Zasláno: 12. 7. 2011, 17:39:16
Napíšu víc návrhů:
• Místo addslashes používeje mysql_real_escape_string(), je přímo určená pro MySQL. • Když to dáte do uvozovek, nebudete muset escapovat apostrofy, tj. mysql_query("select 'neco'");
• Moc se nespoléhejte, že např. login je ošetřený jinde, escapujte všechno • Když selhává dotaz, vypište si mysql_error(), nebo si ho vypište po dosazení proměnných a spusťte v nějakém adminu • Takto vytvořená tabulka je na 99 % naprosto špatný databázový návrh. |
||
Pevel.Sojak Profil * |
#4 · Zasláno: 12. 7. 2011, 18:05:48
Taps:
Děkuji za návrh Alphard Návrhy mě velice zaujaly a určitě je aplikuji, jen by mě zajímalo, v čem je vytvořená tabulka špatný databázový návrh? Děkuji |
||
Alphard Profil |
#5 · Zasláno: 12. 7. 2011, 20:13:56
Pevel.Sojak:
„... v čem je vytvořená tabulka špatný databázový návrh?“ Dlouhodobou prací s relačními databázemi vznikla jistá normalizační pravidla (která databázoví teoretici místy dovedli trochu do extrému). Jejich cílem je usnadnit návrh databází s ohledem na jejich použitelnost. To, o co se snažíte, by se zřejmě mělo vytvořit pomocí M:N relací. Dynamická tvorba tabulek je zpravidla cesta do pekel, protože nebude možné provádět některé operace (a jakékoliv souhrnné) nad daty. |
||
Pevel.Sojak Profil * |
#6 · Zasláno: 13. 7. 2011, 04:14:52
Alphard:
Děkuji za reakci, řešení M:N se mi velice líbí a má něco do sebe. Nejspíš zcela přehodnotím momentální funkčnost a ještě dnes si s tím pohraji... Z komentářů jsem pochopil, že v tomto oboru nejste nováčkem, mohu se s případnými dotazy obrátit na Vás? :) Děkuji |
||
Alphard Profil |
#7 · Zasláno: 13. 7. 2011, 10:30:25
[#6] Pevel.Sojak
Toto fórum má docela tradici, je tady hodně šikovných lidí. Na databázové věci se můžete ptát v Databáze na webu. Odpoví někdo, kdo bude mít zrovna čas. Já samozřejmě rád poradím, ale nemohu tady být nonstop. Jsme rádi za každého, kdo se chce učit a jen nelepí kousky kódu. V přistupu k databázi z PHP by vás mohlo zajímat http://dibiphp.com/cs/quick-start. Hlavní výhoda je, že jsou automaticky ošetřeny všechny vstupy, nemusíte ručně psát mysql_error() apod. V návodu bohužel není popsané tzv. fluent rozhraní, ale po stažení je v adresáři examples v souboru using-fluent-syntax.php, užitečné hlavně při postupné skládání dotazu v závislosti na podmínkách. Pokud jde o samotné MySQL, je dobré mít pro začátek přehled aspoň o prvních cca 30-35 dílech v seriálu na linuxsoftu. |
||
Časová prodleva: 13 let
|
0