Autor Zpráva
Pevel.Sojak
Profil *
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
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
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 *
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
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 *
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
[#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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0