Autor Zpráva
SkyVessel
Profil *
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
SkyVessel:
po odeslání formuláře mě to hodí na podmínku na 24.řádku
$vysledek = @mysql_query($dotaz);
Začni tím, že nebudeš potlačovat chybové hlášky, přidej
mysql_error()
fajzen
Profil
SkyVessel:
namiesto
$vysledek = @mysql_query($dotaz);
si daj všade
$vysledek = mysql_query($dotaz) or die(mysql_error());
a uvidíš...
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
3. na heslo 20 znakov? aké používaš šifrovanie? pokiaľ viem, tak md5 má 32 a sha1 40 znakov...
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 *
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
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
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 *
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
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 *
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 :)

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: