Autor | Zpráva | ||
---|---|---|---|
SkyVessel Profil * |
#1 · Zasláno: 27. 1. 2010, 18:04:49
problém mám v tomhle kódu... po odeslání formuláře mě to hodí na podmínku na 24.řádku... Už si s tím nevím rady... Vyzkoušel jsem snad všechno, co mě napadlo (moc toho nebylo =D....)... Jo a vím, že ten kod je určitě zbytečně složitý
if (isset($_POST['create_users'])) { //zpracování formuláře vytvořit_users if (isset($_POST['nazev_dbs_u'])) { if ($_POST['nazev_dbs_u'] != "") { $nazev_dbs_u = trim($_POST['nazev_dbs_u']); if (file_exists('mysql_spojit.php')) { require_once('mysql_spojit.php'); $dotaz = "DESCRIBE users"; // zjištěění existence tabulky $vysledek = @mysql_query($dotaz); if(!$vysledek) { // jestli neexistuje $dotaz = "CREATE TABLE `".$nazev_dbs_u."`.`users` (`id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `nick` VARCHAR(20) CHARACTER SET cp1250 COLLATE cp1250_czech_cs NOT NULL, `name` VARCHAR(20) CHARACTER SET cp1250 COLLATE cp1250_czech_cs NOT NULL, `email` VARCHAR(35) CHARACTER SET cp1250 COLLATE cp1250_czech_cs NOT NULL, `password` VARCHAR(20) CHARACTER SET cp1250 COLLATE cp1250_czech_cs NOT NULL, `date` DATETIME NOT NULL, `member` TINYINT NOT NULL DEFAULT \'0\' COMMENT \'1 -člen RSF\') ENGINE = MyISAM CHARACTER SET cp1250 COLLATE cp1250_czech_cs;"; $vysledek = @mysql_query($dotaz); if ($vysledek) { $zprava = $zprava.'Tabulka <em>users</em> úspěšně vytvořena.<br />'; } else { $zprava = $zprava.'Při vytváření tabulky <em>users</em> se vyskytla chyba.<br />'; } } else { //jestli již tabulka existuje echo '<p>Tabulka již v této databázi existuje!! Již jste ji vytvořil.</p>'; } } else { $zprava = $zprava.'<p>Nejprve je potřeba vytvořit soubor <em>mysql_spojit.php</em> (tabulka č.1)</p>'; } } else { $zprava = $zprava.'Vyplň pole název databáze!<br />'; } } } |
||
panther Profil |
#2 · Zasláno: 27. 1. 2010, 18:11:07 · Upravil/a: panther
SkyVessel:
„po odeslání formuláře mě to hodí na podmínku na 24.řádku“ $vysledek = @mysql_query($dotaz); mysql_error() |
||
fajzen Profil |
#3 · Zasláno: 27. 1. 2010, 18:27:46
SkyVessel:
namiesto $vysledek = @mysql_query($dotaz); $vysledek = mysql_query($dotaz) or die(mysql_error()); ak by to bol 24. riadok podľa číslovania, čo je tu, tipujem, že je to notice o nedefinovanej premennej $zprava... pár postrehov: 1. ten SQL dotaz máš zlý - FAULT \'0\' COMMENT \'1 -člen RSF\') tie backslashe tam byť nemajú (ak sa nemýlim) 2. vytváraš novú tabuľu s názvom, ktorý je v premennej $_POST['nazev_dbs_u'], ale vždy kontroluješ, či existuje tabuľka users $dotaz = "DESCRIBE users"; // zjištěění existence tabulky 4. podľa PHP dokumentácie by dotaz vykonávaný pomocou mysql_query nemal končiť bodkočiarkou ; (ale myslím, že to zožerie aj tak) |
||
SkyVessel Profil * |
#4 · Zasláno: 27. 1. 2010, 22:40:21
ad2) vytvářím novou tabulku vždy users... v $_POST['nazev_dbs_u'] mám název databáze. Ten dotaz mi vyplivnul phpmyadmin se vším všudy (i ty divné backslashe) a začínal CREATE TABLE `nazev_databaze`.`nazev_tabulky`(.... Tím jsem došel k závěru že když mám více databází, tak můžu v tom dotazu zmínit, do které to chci...
ad3) rád se poučím... ukládám to ve smyslu PASSWORD($heslo)... to je v md5? Takže nastavit varchar(32)?? ad4) bez ; mi to hází chybu...!? Takže po doplnění mysql_error (užitečná funkce =D) jsem zjistil, že desátý řádek vyhazoval chybu jako že: Tabulka 'test.users' neexistuje... a tam to nějak končilo a zadrhávalo se... takže $dotaz = "DESCRIBE users"; // zjištěění existence tabulky $vysledek = @mysql_query($dotaz); if(!$vysledek) { // jestli neexistuje jsem dal pryč, vyhodil vadné \ a tabulka vytvořena... DÍKY Jak jinak mám ale zkontrolovat, jestli už náhodou ta tabulka neexistuje? |
||
fajzen Profil |
#5 · Zasláno: 28. 1. 2010, 09:05:14
SkyVessel:
ad2) sorry, to som si nevšimol... ale potom ten dotaz DESCRIBE users smeruješ na databázu test, nie na tú, ktorá je v $_POST['nazev_dbs_u']... dalo by sa to riešiť takto: mysql_select_db($_POST['nazev_dbs_u']); // vyberieme zvolenú databázu $vysledok = mysql_query("SHOW TABLES LIKE 'users'"); if(mysql_num_rows($vysledok)) { // existuje } else { // neexistuje } alebo možno by len stačilo pridať do toho vytváracieho dotazu CREATE TABLE IF NOT EXISTS ad3) priznám sa, že o mysql hashovacej funkcií PASSWORD som nevedel... ale podľa dokumentácie musí mať od verzie mysql 4.1 stĺpec dĺžku 41 znakov |
||
nightfish Profil |
#6 · Zasláno: 28. 1. 2010, 09:31:45
mimochodem k funkci password se v manuálu píše, že
The PASSWORD() function is used by the authentication system in MySQL Server; you should not use it in your own applications. Funkci PASSWORD() používá autentizační systém MySQL Serveru. Neměli byste ji používat ve vlastních aplikacích. |
||
SkyVessel Profil * |
#7 · Zasláno: 28. 1. 2010, 16:29:53
fajzen:
ad2) máš pravdu... To CREATE TABLE IF NOT EXISTS jsem našel taky, ale já z toho potřeboval vytáhnout minimálně chybovou hlášku, že už existuje, což ta ukázka výše splňuje. Fakt díky ;D a k tomu heslu... co tedy mám použít?? md5($heslo) s délkou varchar(32)...? |
||
fajzen Profil |
#8 · Zasláno: 28. 1. 2010, 19:08:09
SkyVessel:
záleží na tom, ako moc bezpečné to chceš mať... prečítaj si túto diskusiu a hlavne ten článok, na ktorý je tam odkaz |
||
SkyVessel Profil * |
#9 · Zasláno: 28. 1. 2010, 21:15:13
fajzen: Díky tobě a všem ostatním účastníkům této diskuse za rady...
btw sha1 se solí bude asi jasná volba :) |
||
Časová prodleva: 13 let
|
0