« 1 2 »
Autor Zpráva
Pavel Vodnář
Profil *
dobrý den, potřeboval by jsem poradit, když z databáze ověřím uživatele (správné heslo i přihlašovací jméno) jak po splnění této podmínky přesměrovat na script který obsahuje data přihlášeného uživatele? Děkuji Vám
Tori
Profil
Stav přihlášení + jméno/id uživatele ukládáte nejspíš do session? Tak potom použít
header("Location: $url_webu/skript.php");
. Dotyčný skript zjistí ze session, jestli je někdo přihlášen a kdo, a podle toho buď zobrazí jeho/její profil nebo ne.
Pavel Vodnář
Profil *
Mám tento script:

<?php
$submit = $_POST['submit'];
$name = $_POST['name'];
$password = $_POST['password'];




// kontrola údajů
if ($submit)
{



$connect = mysql_connect ("$localhost","$user","$pass") or die("Nepodařilo se připojit k databázi");

mysql_select_db ("databaze..."); //select database

//zkouka existence jmena

$zkouskajmena = mysql_query("SELECT uzivatelskejmeno FROM klienti WHERE uzivatelskejmeno='$name'");
$count = mysql_num_rows($zkouskajmena);	

// zkouska existence hesla u daného jména
$zkouskahesla= mysql_query("SELECT heslo FROM klienti WHERE heslo='$password'");
$count1 = mysql_num_rows($zkouskahesla);	

if ($count==0)
{

$obsazeno ="Uživatelské jméno nenalezeno";

}


if (($count!=0)&&($count1==0))

{

$uzivatelnalezen ="Zadali jste špatné heslo";

}




}




?>


Zde potřebuji pomoci jak to do toho zakombinovat aby mě to přesměrovalo na přihlášenou stránku když budou údaje ověřeny. Jak tedy nato? děkuji Vám
Tori
Profil
1. Použijte ten sql dotaz, co vám v předchozím vlákně radil xmark. Takhle by se každý uživatel mohl kromě svého hesla přihlásit i s heslem kteréhokoli jiného uživatele. Detto ošetření vstupu z formuláře zmiňované tamtéž.

2. Rámcově takto (↓neřeším ukládání stavu přihlášen/nepřihlášen ani používání session) :
$vysledekSql = mysql_query("SELECT jmeno, heslo FROM klienti WHERE jmeno = '$name' AND heslo = '$password'");
$uzivatelDb = mysql_fetch_assoc($vysledekSql);
if ($name == $uzivatelDb['uzivatelskejmeno'] && $password == $uzivatelDb['heslo'])
  header("Location: http://muj.web.cz/pouze-pro-prihlasene.php");
else
  echo "Špatné uživatelské jméno nebo heslo");

Taky se koukněte na hotový skript pro přihlašování uživatelů ve FAQ, pro inspiraci.
Radek Cvek
Profil
Podle mě to přesměrovávání je to krok navíc, který lze stejně obelstít. Taky by se mělo testovat v http://muj.web.cz/pouze-pro-prihlasene.php jestli je v session přihlášený, jinak by to do url mohl vložit kdokoliv.
pcmanik
Profil
Tato podmienka sa splni vzdy if ($submit) totizto aj keby post bol prazdny, tak sa ta premenna uz vyplni prazdna, a teda vyhovuje podmienke.
xmark
Profil
Pavel Vodnář
Doporučoval bych nastudovat si, jak se používá session. V hodně zahuštěné zkratce:
1. session je něco, co můžu vytvářet na serveru pro každého návštěvníka zvlášť. Kdykoliv to můžu vytvořit, přepsat, nebo načíst, aniž bych to musel předávat v adrese.
2. když návštěvník úspěšně vypíše přihlašovací formulář, vytvoříš mu session a dáš do ní třeba jeho ID
3. existenci a hodnotu té session ověřuješ a můžeš ji zpracovávat

Takže můžeš mít třeba adresu domena.cz/o-mne.php a můžeš zařídit, že tam nepřihlášený neuvidí nic a každý přihlášený tam uvidí svoje údaje.
Pavel Vodnář
Profil *
Tori: ze #4

Dobrý den, když vložím váš kód a zadam existující heslo a jméno píše mi to:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/web5/

Co znamená tato chyba?

Děkuji Vám
Radek Cvek
Profil
$vysledekSql = mysql_query("SELECT jmeno, heslo FROM klienti WHERE jmeno = '".$name."' AND heslo = '".$password."' ;");
Tori
Profil
Pavel Vodnář:
Asi jsem použila jiné názvy sloupců, než máte v db: jmeno misto uzivatelskejmeno. Je to tím?
Pavel Vodnář
Profil *
Tori:
Když to zaměním takto:
$vysledekSql = mysql_query("SELECT uzivatelskejmeno, heslo FROM klienti WHERE jmeno = '$name' AND heslo = '$password'");


pořád mi to píše chybu:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/web5/webovastranka.net/webovastranka.net/prihlaseni.php on line 23

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web5/prihlaseni.php:23) in /var/www/web5/prihlaseni.php on line 25

řádek 23 je tento:
$uzivatelDb = mysql_fetch_assoc($vysledekSql); 	


může to být ještě nečím jiným? Děkuji Vám
Tori
Profil
Pavel Vodnář:
$vysledekSql = mysql_query("SELECT uzivatelskejmeno, heslo FROM klienti WHERE uzivatelskejmeno = '$name' AND heslo = '$password'");
Pokud by to stále zlobilo, přidejte hned za tento řádek
echo mysql_error();
jakou chybu to vypíše.
xmark
Profil
Pavel Vodnář:
To SQL je syntakticky v pořádku. Jestli sedí názvy polí, to musíš ověřit sám. Až budeš mít jistotu, že je to v tomto směru v pořádku, dej sem tu část kódu, která začíná tím dotazem a končí tím 23. řádkem.

"Cannot modify header information" znamená, že se snažíš pracovat s hlavičkou po tom, co php už vytvořilo nějaký výstup pro prohlížeč - prostě proběhlo echo. To nelze. Dá se to ošetřit funkcí ob_start.
Radek Cvek
Profil
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in
za databázový dotaz mysql_query bych přidal or die(mysql_error()); - je jasné, že výsledek z databáze není MySQL result, ale bude to nejspíš pravdivostní hodnota
pro zkoušku je dobré vypsat si, co vlastně databázi posílám a jestli je to vůbec platný dotaz:
před mysql_query("SELECT uzivatelskejmeno, heslo FROM klienti WHERE uzivatelskejmeno = '".$name."' AND heslo = '".$password."' ;"); napíšu
echo "SELECT uzivatelskejmeno, heslo FROM klienti WHERE uzivatelskejmeno = '".$name."' AND heslo = '".$password."' ;"
a zkontroluji, co mi to vypsalo - platné sloupce, správná syntaxe
Cannot modify header information - headers already sent
buď byl výpis před odesíláním hlavičky nebo je php příkaz header ve skriptu až po html !DOCTYPE nebo výpisu - header by měl být jeden z prvních příkazů ve skriptu
Pavel Vodnář
Profil *
Děkuji Vám za veškeré informace - ani nevíte jak si jich vážím

Tori - výborně už to běží

Ještě by sem se chtěl zeptat - v případě úspěšně zadaného hesla a jména me to přesměruje na stránku uzivatel-prihlasen.php

Dalo by jse nějak zabránit tomu aby když uživatel vloží natvrdo adresu do url jako nepříhlášen tak aby ho to nepustilo na tuto stránku? respektive přesměrovalo na prihlaseni.php?

Děkuji Vám, moc.
Radek Cvek
Profil
Dalo by jse nějak zabránit tomu aby když uživatel vloží natvrdo adresu do url jako nepříhlášen tak aby ho to nepustilo na tuto stránku? respektive přesměrovalo na prihlaseni.php?
Jedině pomocí session - při správném přihlášení nastavit session a to potom na prvním řádku uzivatel-prihlasen.php kontrolovat.
Radek Cvek
Profil
prihlaseni.php
<?php
  session_start();
  ...
  $vysledekSql = mysql_query("SELECT uzivatelskejmeno, heslo FROM klienti WHERE uzivatelskejmeno = '".$name."' AND heslo = '".$password."' ;");
  if ($radek = mysql_fetch_row($vysledekSql)) $_SESSION["user"]=$radek["uzivatelskejmeno"]; 
  ...
?>

uzivatel-prihlasen.php
<?php
  session_start();
  if (!isset($_SESSION["user"])) header("Location: prihlaseni.php");
  echo 'Přihlášený uživatel: '.$_SESSION["user"];
  echo '<a href="logout.php">Odhlásit</a>'
?>

logout.php
<?php
  session_start();
  unset($_SESSION["user"]);
  header("Location: prihlaseni.php");
?>
Alphard
Profil
[#17] Aspoň to ošetřete na sql injection.

Radek Cvek:
Dotazy v mysql_query() se neukončují středníkem, je to dost neobvyklé, vždy to člověku padne do oka.

Pavel Vodnář:
Četl jste místní FAQ? Je tam hotový script na přihlášení.
Vzhledem k [#3] doporučuji začít odsazovat kód, až takto zanoříte do cyklu dvě podmínky, nikdo se v tom nevyzná.
xmark
Profil
Radek Cvek:
Jen doporučení: na webech, kde používám session_start(); to dávám přímo na konec config.php. Ušetří to spoustu případů, kdy by na to člověk zapomněl a musel doplňovat. A jak říká klasik: "Profíka i pár stovek milisekund zdržuje." :-)
Pavel Vodnář
Profil *
Radek Cvek:
Když vložím do kódu prihlaseni.php
<?php
  session_start();
  ...
  $vysledekSql = mysql_query("SELECT uzivatelskejmeno, heslo FROM klienti WHERE uzivatelskejmeno = '".$name."' AND heslo = '".$password."' ;");
  if ($radek = mysql_fetch_row($vysledekSql)) $_SESSION["user"]=$radek["uzivatelskejmeno"]; 
  ...
?>


a zadám správnou kombinaci hesla a jména vypíše mi to chybu:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Jak toto opravit? děkuji Vám
Radek Cvek
Profil
Zkusil bych za session_start(); vložit session_register("user");
Ale špíš pomůže novější verze PHP
Zkontroloval bych ještě, jestli se ve skriptu nepoužívá nějaká proměná $user - potom by se musela přejmenovat
Pavel Vodnář
Profil *
Radek Cvek:
ano používám proměnou $user, dá se přejmenovat toto: $_SESSION["user"]=$radek["uzivatelskejmeno"]; nebo se musí přejmenovat ta proměnná? Děkuji
Radek Cvek
Profil
Může se změnit $_SESSION["user"] - třeba na $_SESSION["loggeduser"] to není problém - v tom byla ta chyba. Starší verze PHP+nastavení register_globasl zapříčiní, že se na začátku snaží přejmenovat proměnné v programu těmi globálními a vypíše to varování. Nově by už register_globals nemělo vůbec v PHP existovat.
Tori
Profil
Radek Cvek:
Ad [#17]: Použijte buď
if ($radek = mysql_fetch_assoc($vysledekSql)) $_SESSION["user"]=$radek["uzivatelskejmeno"];
anebo
if ($radek = mysql_fetch_row($vysledekSql)) $_SESSION["user"]=$radek[0];
Funkce mysql_fetch_row vrací jen číslované pole.
Pavel Vodnář
Profil *
Radek Cvek:
Neběží mi to, mám tento kód:

<?php
 
session_start();
session_register("loggeduser"); 


$submit = $_POST['submit'];
$name = $_POST['name'];
$password = $_POST['password'];

// údaje pro připojení k DB
$localhost = "l---------------------";
$user ="---------------";
$pass = "-------------------------";


// kontrola údajů
if ($submit)
{



$connect = mysql_connect ("$localhost","$user","$pass") or die("Nepodařilo se připojit k databázi");

mysql_select_db ("-------------------"); //select database

$vysledekSql = mysql_query("SELECT uzivatelskejmeno, heslo FROM klienti WHERE uzivatelskejmeno = '".$name."' AND heslo = '".$password."';");
if ($radek = mysql_fetch_row($vysledekSql)) $_SESSION["loggeduser"]=$radek['uzivatelskejmeno'];

$uzivatelDb = mysql_fetch_assoc($vysledekSql); 										//23
if ($name == $uzivatelDb['uzivatelskejmeno'] && $password == $uzivatelDb['heslo'] && ($name!="") &&($password!="") )
  header("Location: http://sroty.net/uzivatel-prihlasen.php");
else
  $error = ("Špatné uživatelské jméno nebo heslo");

}




?>





Když změním třeba na $_SESSION["loggeduser"] tak mi to pak píše: Špatné uživatelské jméno nebo heslo.

Mohla by být chyba ještě v něčem jiném? Děkuji Vám
Tori
Profil
Pavel Vodnář:
Když změním třeba na $_SESSION["loggeduser"] tak mi to pak píše: Špatné uživatelské jméno nebo heslo.
Změnil jste to ve všech skriptech (přihlášení, stránka pro přihl.uživatele, odhlášení)?
Pavel Vodnář
Profil *
stránka po přihlášení:
<?php
  session_start();
  if (!isset($_SESSION["loggeduser"])) header("Location: prihlaseni.php");
  echo 'Přihlášený uživatel: '.$_SESSION["loggeduser"];
  echo '<a href="logout.php">Odhlásit</a>'
?>


skript odhlášéní jsem ješte neprogramoval, může to být tím?
Pavel Vodnář
Profil *
Když je session_register("user"); a zadám správnou kombinaci hesla a jména vyříše mi to chybu:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Když je session_register("neco"); a zadám správnou kombinaci hesla a jména vypíše mi to chybu: špatné uživatelské jméno nebo heslo

Proč to takto pracuje jak to opravit aby to pracovalo správně? Děkuji Vám
Radek Cvek
Profil
Problém toho kódu asi je, že se s výsledky databáze pracuje dvakrát:
<?php 
  session_start();
  session_register("loggeduser"); 
  
  $submit = $_POST['submit'];
  $name = $_POST['name'];
  $password = $_POST['password'];

  // údaje pro připojení k DB
  $localhost = "l---------------------";
  $user ="---------------";
  $pass = "-------------------------";


  // kontrola údajů
  if ($submit)
    {
    $connect = mysql_connect ("$localhost","$user","$pass") or die("Nepodařilo se připojit k databázi");

    mysql_select_db ("-------------------"); //select database

    $vysledekSql = mysql_query("SELECT uzivatelskejmeno, heslo FROM klienti WHERE uzivatelskejmeno = '".$name."' AND heslo = '".$password."';");
    if ($radek = mysql_fetch_row($vysledekSql)) 
      {
      $_SESSION["loggeduser"]=$radek['uzivatelskejmeno'];
      header("Location: http://sroty.net/uzivatel-prihlasen.php");
      }
/* toto všechno je tu navíc     
    $uzivatelDb = mysql_fetch_assoc($vysledekSql);                                         //23
    if ($name == $uzivatelDb['uzivatelskejmeno'] && $password == $uzivatelDb['heslo'] && ($name!="") &&($password!="") )
*/
     else
       $error = ("Špatné uživatelské jméno nebo heslo");

    }
?>
Pavel Vodnář
Profil *
Radek Cvek:
Ano máte pravdu, když tam nedám
 /* toto všechno je tu navíc     
    $uzivatelDb = mysql_fetch_assoc($vysledekSql);                                         //23
    if ($name == $uzivatelDb['uzivatelskejmeno'] && $password == $uzivatelDb['heslo'] && ($name!="") &&($password!="") )
*/
 


už to pracuje ale mám problémek se session - jakmile se přihlásím viz kód:
<?php
  session_start();

  if (!isset($_SESSION["user"])) header("Location: prihlaseni.php");
  echo 'Přihlášený uživatel: '.$_SESSION["user"];
  echo '<a href="logout.php">Odhlásit</a>'
?>


Načítá mi to do proměnné Přihlášený uživatel: '.$_SESSION["user"]; hodnotu z prihlaseni.php
 $user ="---------------";
, namísto $_SESSION["user"]=$radek['uzivatelskejmeno'];

Jakmile se mi to přihlásí píše mi to místo jména uživatele jméno: // údaje pro připojení k DB - $user ="---------------";

Pokouším se to upravit ale marně, jak to opravit? Děkuji Vám
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: