Autor Zpráva
Cup
Profil
Chci si napsat jednoduchou funkci na přihlašování, ... napsal sem jen malý kousek

function login($email, $pass, $spojeni){
     $result = mysql_query ("SELECT idUser FROM user 
                            WHERE emailUser = '".addslashes($email)."' 
                            AND hesloUser='".md5($pass)."'";
     if(!$dotaz){showerror();}
     $num_rows = mysql_num_rows($result);
     if($num_rows==1)
      return true;
     else
     return false;
}


jako je to jednoduchy, ale nevim co tam více vymýšlet ... nebo je nějaký důvod proč bych to neměl použít? díky
Nox
Profil
nemáš ukončenou závorku u query, $num_rows je trochu navíc...ale hlavně ta funkce nijak nepřihlašuje... jen autentizuje
Cup
Profil
dobře za chvilku to skusím znovu :)
Cup
Profil
function login($email, $pass, $spojeni){
     $result = mysql_query ("SELECT * FROM user 
                            WHERE emailUser = '".addslashes($email)."' 
                            AND hesloUser='".md5($pass)."'");
     if(!$dotaz){showerror();}
     $row = mysql_fetch_array($result);
     if(isset($row["idUser"]))
      {
       Session_Start();
        $_SESSION["idUser"]=$row["idUser"];
        $_SESSION["jmenoUser"]=$row["jmenoUser"];
        $_SESSION["prijmeniUser"]=$row["prijmeniUser"];
        $_SESSION["hodnostUser"]=$row["hodnostUser"];
        $_SESSION["cas_relace"]=Time()+3600;
      return true;
      }
     else
      {return false;}
     
}


Tak ještě jednou, můžu toto bezpečně používat?
Cup
Profil
jde mi hlavne o tento řádek
 if(isset($row["idUser"])) 

co mi to hodí při NULLovém záznamu? false? ... pokud ano tak nevidím důvod proč to nepoužívat
Majkl578
Profil
[#1]
Kromě toho co řekl Nox:
Funkce addslashes neprovede dostatečné ošetření řetězce. K tomu slouží funkce mysql_real_escape_string.
Pak také nechápu proč je povinný parametr $spojeni, když není nikdy použit.
Další věc je $result a $dotaz, nemá to být nahodou jedno a to samé? Není.

Proč to nenapsat takto?
function login($email, $password){
  $result = mysql_query ("SELECT `idUser` FROM `user` 
                                         WHERE `emailUser` = '" . mysql_real_escape_string($email) . "' 
                                               && `hesloUser` = '" . md5($pass) . "'";
  if(!$result) {
    showerror();
  }
  
  return mysql_num_rows($result) === 1;
}
Cup
Profil
Majkl578:
jo to ošetření vstupu mě taky zajímalo nevěděl jsem jakou fci použít, díky ... jo s tím nepoviným parametrem je to překlep psal sem to narychlo ... tak sem to tam zapoměl mám to takto ...
function login($email, $pass, $spojeni){
     $result = mysql_query ("SELECT * FROM user 
                            WHERE emailUser = '".mysql_real_escape_string($email)."' 
                            AND hesloUser='".md5($pass)."'", $spojeni);
     if(!$result){showerror();}
     $row = mysql_fetch_array($result);
     if(isset($row["idUser"]))
      {
       Session_Start();
        $_SESSION["idUser"]=$row["idUser"];
        $_SESSION["jmenoUser"]=$row["jmenoUser"];
        $_SESSION["prijmeniUser"]=$row["prijmeniUser"];
        $_SESSION["hodnostUser"]=$row["hodnostUser"];
        if($row["hodnostUser"]==1){$_SESSION["casRelace"]=Time()+3600;}
      return true;
      }
     else
      {return false;}
     
}
Jan Tvrdík
Profil
Cup:
Trochu jsem to zpřehlednil a drobně upravil:
function login($email, $pass, $spojeni = null) {
    $result = mysql_query("
        SELECT * FROM user
        WHERE emailUser = '" . mysql_real_escape_string($email) . "' 
            AND hesloUser='" . md5($pass) . "'
    ", $spojeni);

    if (!$result) showerror();    
    
    if (mysql_num_rows($result) === 1)
    {
       $row = mysql_fetch_array($result);
       Session_Start();    // tohle bych dal jinam, na globálnější úroveň
       $_SESSION["idUser"] = $row["idUser"];
       $_SESSION["jmenoUser"] = $row["jmenoUser"];
       $_SESSION["prijmeniUser"] = $row["prijmeniUser"];
       $_SESSION["hodnostUser"] = $row["hodnostUser"];
       if ($row["hodnostUser"] == 1) $_SESSION["casRelace"] = Time() + 3600;
       
	   return true;
    }
    
    return false;
}
Cup
Profil
děkuji ... ale jednu věc nechápu ... jaktože $spojeni = null ? potřbuji ho přece aby se dotaz vykonal nebo ne? ... spojeni je spojeni s databází. jinak ... na globálnější úroveň myslíte kam?
Jan Tvrdík
Profil
Cup:
jaktože $spojeni = null
Čekal jsem, že to funkce mysql_query bude akceptovat jako neuvedený parametr, ale bohužel to nejde. Asi bude tedy lepší, když ten parametr spojení úplně vyhodíš. Nečekám, že budeš pracovat s více než jedním spojením zároveň.

potřebuji ho přece, aby se dotaz vykonal
Nepotřebuješ, druhý parametr funkce mysql_query je nepovinný. Pokud ho neuvedeš, použije se aktuální spojení.

na globálnější úroveň myslíte kam?
Do nějakého skriptu, který se spouští vždy a zajišťuje takové ty obvyklé věci jako připojení k DB apod.
Cup
Profil
Jan Tvrdík:
Ok

druhý parametr funkce mysql_query je nepovinný
to jsem nevěděl, díky

Do nějakého skriptu, který se spouští vždy a zajišťuje takové ty obvyklé věci jako připojení k DB apod.
to jsem si myslel, díky moc

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: