Autor | Zpráva | ||
---|---|---|---|
jirivo Profil * |
#1 · Zasláno: 23. 1. 2010, 13:12:51
Mám tento kód na registraci uživatele, ale zobrazuje se mi chyba s přístupem k mysql databázi, ale nemůžu zjistit v čem je problém
Chyba: Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /mnt/data/accounts/c/click4relax/data/www/registrace.php on line 110 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/data/accounts/c/click4relax/data/www/registrace.php on line 111 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /mnt/data/accounts/c/click4relax/data/www/registrace.php on line 117 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/data/accounts/c/click4relax/data/www/registrace.php on line 118 Kód: DEFINE ('DB_UZIVATEL', 'uzivatel'); DEFINE ('DB_HESLO', 'heslo'); DEFINE ('DB_HOSTITEL', 'hostitel'); DEFINE ('DB_NAZEVDATABAZE', 'databaze'); // Vytvoote poipojení a vyberte pracovní databázi. $link = mysql_connect (DB_HOSTITEL, DB_UZIVATEL, DB_HESLO); mysql_select_db (DB_NAZEVDATABAZE); function JeEmail ($cislo) { return ereg("^.+@.+..+$",$cislo); } function emailvdb ($email) { $vysledek = mysql_query("select * from uzivatele where email='".$email."'", $link); return (boolean) mysql_num_rows($vysledek); } function prezdivkavdb ($uzjmeno) { echo "select * from uzivatele where uzjmeno='".$uzjmeno."'"; $vysledek = mysql_query("select * from uzivatele where uzjmeno='".$uzjmeno."'", $link); return (boolean) mysql_num_rows($vysledek); } $BudemeZobrazovat=true; if (!empty($_POST)) // uĹľ se odeslalo { if (!JeEmail ($_POST["email"])) echo "Zadaly jste špatný tvar e-mailové adresy"; elseif (emailvdb ($_POST["email"])) echo "Uvedený email je již registrován"; elseif (prezdivkavdb ($_POST["uzjmeno"])) { echo "Uvedené uživatelské jméno je již registrováno, zvolte jiné"; } elseif ((strlen ($_POST["uzjmeno"])>50) | strlen ($_POST["uzjmeno"]) < 3)echo "Uživateslké jméno musí obsahovat 3 - 50 znaků"; elseif ((strlen ($_POST["heslo"])>50) | strlen ($_POST["heslo"]) < 3) echo "Heslo musí obsahovat 3 - 50 znaků"; else { echo "Děkujeme za registraci. Na vaši adresu ".$_POST["email"]." byly zaslány informace pro dokončení registrace."; // uložíme to do databáze mysql_query ("insert into uzivatele (typ, email, uzjmeno, heslo) values ('uzivatel, ".$_POST["email"]."', '".$_POST["uzjmeno"]."', '".$_POST["heslo"]."');", $link); $lastid=mysql_insert_id(); $path="http://".$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["SCRIPT_NAME"]."?clanek=registracedokoncena&id=".$lastid."&email=".$_POST["email"]; $telo = "Dekujeme Vam za registraci na serveru click4relax.cz Pro dokonceni ". "registrace klepnete na nasledujici odkaz". "<a href=".$path.">$path</a>n". @mail ($_POST["email"], "Registrace na serveru", $telo); } } |
||
mckay Profil |
#2 · Zasláno: 23. 1. 2010, 13:21:36 · Upravil/a: mckay
Nevím, jestli to dělá přesně tento řádek, ale dá se napsat chytřeji
//Edit: Jo, určitě tenhle řádek není v pohodě. mysql_query ("insert into uzivatele (typ, email, uzjmeno, heslo) values ('uzivatel, ".$_POST["email"]."', '".$_POST["uzjmeno"]."', '".$_POST["heslo"]."');", $link); bych přepsal na mysql_query ("insert into uzivatele (typ, email, uzjmeno, heslo) values ('uzivatel', '$_POST["email"]', '$_POST["uzjmeno"]', '$_POST["heslo"]');", $link); |
||
fajzen Profil |
#3 · Zasláno: 23. 1. 2010, 13:24:44
jirivo:
bude to viditeľnosťou premenných v PHP: aj keď je premenná definovaná mimo funkcie, nie je viditeľná vo funkcií... takže vo funkciách emailvdb() a prezdivkavdb() neexistuje premenná $link. V ukladaní do DB potom chýbajú apostrofy: values ('uzivatel', '".$_POST["email"]."', na margo bezpečnosti by som poznamenal, že je to celé náchylné na SQL injection a následné XSS |
||
Časová prodleva: 14 let
|
0