Autor Zpráva
jirivo
Profil *
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ĹľĂ&shy;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&amp;id=".$lastid."&amp;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
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
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

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: