« 1 2 3 »
Autor Zpráva
Actimel
Profil
fili:
WHERE id='$id' and login='$login' and '$objekt' and '$meno' and '$zodpovedna_osoba' and '$ulica' and '$cislo' and '$mesto' and '$psc' and '$mail' and '$www' and '$mobil' and '$login' and '$ico' and '$dic' and '$ic_$dph'

1) Klazule WHERE ti má "vytřídit" výsledky podle hodnot sloupců. Když si přečteš co máš za WHERE ty, tak se snažíš vybírat podle "id, login, objekt, meno…", namísto toho aby jsi vybral řádek daného uživatele (podle nějakého identifikátoru - nejčastěji pomocí id).

2) Ve WHERE se dotaz píše takto WHERE sloupec='hodnota' AND sloupec='hodnota2' (v případě že hledáš sloupce se stejnou hodnotou, kterou požaduješ (jinak můžeš použít jiné operátory - '>', '<', '!='…).
Vždycky musíš definovat sloupec se kterým porovnáváš hodnotu, ne jako ty máš potom v dotazu …and '$objekt' and '$meno'

3) O SQL dotazech ti doporučuji si trochu něco přečíst, zatím ze začátku stačí základní věci. Potom si v phpmyadmin udělej databázi a na ní si zkoušej dotazy. Jestli ti to po chvíli začne vracet to co chceš, jsi na dobré cestě.
fili
Profil
Actimel:
Po prihlásení som schopný vypísať login aj hashované heslo,
pretože to posielam z prihlas. form. a mám zadefinované
$login = $_POST['login'];
$password = sha1($_POST['password']);

ale už neviem definovať id pre vypis.
To iste aj na stranke, kde chcem urobiť vypis udajov z DB,
vyhadzuje mi to:
Notice: Undefined login in ... on line 97

Notice: Undefined index: password in ... on line 98

Notice: Undefined variable: _SESSION in ... on line 101

Warning: mysql_fetch_row() expects parameter 1 to be resource, string given in ... on line 104

Notice: Use of undefined constant objekt - assumed 'objekt' in ... on line 10

Netuším ako to mám zadefinovať
Actimel
Profil
Actimel:
Chyba tady je ta, že při přihlášení uživateli nastavíš $_SESSION['prihlaseny'] = true;, což je blbost, protože když nastavíš uživateli že je přihlášen, tak nezjistíš jaké má id a nemůžeš s jeho účtem pracovat. Namísto toho nastav raději uživatelovu id (nejdřív ji s tím heslem vytáni z db, když heslo bude souhlasit, přidělíš mu id).

Amunak:
U přihlášení nevybírej heslo, ale nějaký unikátní identifikátor uživatele (tedy ID nebo login). Ten si ulož do $_SESSION['id']. To, jestli je uživatel přihlášen (tedy jestli se jméno a heslo shoduje) poznáš podle toho, kolik výsledků ti ten dotaz vrátí. A pak už víš, že je buď $_SESSION['id'] prázdné, a uživatel není přihlášen, nebo tam něco je, a uživatel je přihlášen, a zároveň podle toho jsi schopný poznat, kdo to je. Žádnou jinou session proměnnou tam pak už nepotřebuješ.

Kdyby jsi více četl a přemýšlel nad tím co ti píšeme, tak už nemáš co řešit… To na co se teď ptáš tu už bylo alespoň 2x zodpovězeno (viz. citace)
fili
Profil
Actimel:
Snažil som sa to upraviť, ale som jednoducho lama, neviem to.
Ako to má vyzerať v kóde? Ja mám takto:
$login = $_POST['login'];
$password = sha1($_POST['password']); 

$result = mysql_query("SELECT `login` FROM owners WHERE login='".mysql_real_escape_string($login)."' and password='".mysql_real_escape_string($password)."'");
$row = mysql_fetch_row($result);

 

if($login == $row[0]) 
{ 
   $_SESSION['$id'] = 'true';  
 
                       
echo "Prihlásený užívateľ: ".htmlspecialchars($login)."";
echo "Vaše id: ".htmlspecialchars($password).""; 
echo "Vaše id: ".htmlspecialchars($id)."";
....

vyhadzuje mi síce prihláseného užívateľa, ale zas to id

"NULL Prihlásený užívateľ: list Vaše heslo: 38b...
Notice: Undefined variable: id in ... on line 86
Vaše id: "

ak ho chem ťahať z dotazu, tiež mi vyhodí Undefined variable: id
Actimel
Profil
fili:
Jestli chceš používat jako identifikátor login (podle 4. řádku) tak si nastav (na ř. 11) $_SESSION['login'] = $row[0]; a podmínku na ř. 9 změň na if( isset( $row[0] ) )

A teď dva moje dotazy:
1) Proč jsi napsal na ř. 9 takovou podmínku, jakou si napsal?
2) Proč stále rveš do $_SESSION "stav" (true) jestli je uživatel přihlášen?

A ještě jedna moje rada (važ si jí, moje rady jsou drahé):
Jestli se hodláš učit s takovýmto přístupem „ale som jednoducho lama, neviem to.“, tak ti říkám na rovinu, že to nemá cenu a když nezměníš přístup, tak to zabal. Nechci tě demotivovat v programování, chci ti jen ukázat, že ten tvůj přístup je k ničemu. Začni nad kódem který píšeš i nad radami zde na fóru přemýšlet a nesnažit se je jen tupě kopírovat - takových sráčů je dost a nikdy se to nenaučí.
fili
Profil
Actimel:
Vďaka
1. pretože mi to poradili, prišlo mi to ok a aj to fungovalo
2.pretože už prihlaseny je alebo
else
{
    echo "Uviedli ste nesprávne meno alebo heslo!<a href=\"../prihlasenie.php\">Prihlásiť</a>";
}

Potreboval som definovať id, čo sa mi zrejme podarilo a už mi nevyhadzuje tu hlašku - pridal som na r.3 $id=(int)'id';

id mi už vypisuje, ale nesedi s loginom a heslom užívateľa
a síce "Vaše id: 0"
Actimel
Profil
Tak namísto loginu vytahuj z databáze id a nebo vytahuj jak login tak i id, a nadefinuj ho do $_SESSION.
fili
Profil
Actimel:
Samozrejme som to skúšal
$result = mysql_query("SELECT id FROM owners WHERE login='".mysql_real_escape_string($login)."' and password='".mysql_real_escape_string($password)."'");
$row = mysql_fetch_row($result)
 if( isset( $row[0] ) )
{
$_SESSION['id'] = $row[0];
...

Vyhadzuje mi id 0, ak dám id='$id' do dotazu za WHERE, tak
mi vyhadzuje, že bolo zle zadané meno alebo heslo
Amunak
Profil
fili:
Zkus méně zkoušet, co udělá která změna, a víc přemýšlej, co do toho kódu píšeš. Nebo alternativně zkoušej, co se to tam děje, ale neptej se nás pak, proč ti to nefunguje, když nepřemýšlíš. Proč bys dával za WHERE id='$id' když jde o přihlášení? Vždyť tam žádné ID ještě neznáš. Znáš ho až po přihlášení (a pak tam zase nepotřebuješ jméno a heslo)...
fili
Profil
To id mi tu stále predhadzujete. Ja si dám poradiť, nemám nikoho s kým si to môžem konzultovať.
Takže to prihlásenie je ok?
Zbytočne sa teda motám dookola.
Ale po if( isset( $row[0] ) )… som už prihlasený, alebo nie?
Teraz potrebujem v druhom súbore vypísať údaje z db do formulára a zas som pri tom id.
Actimel
Profil
fili:

No, jen pro jistotu, aby jsi to pochopil jak to je:
Máš soubor s formulářem (např. form.php) který, když ho odešleš, přesměruje na soubor se zpracováním vstupních hodnot - uživ. jména a hesla (např. authenticate.php), to jestli se uživatel přihlásil nebo ne (nastavíš mu $_SESSION['id'] nebo vypíšeš chybu při přihlášení), to jsme teď tady vyřešili.

A teď už na libovolné stránce nebo kousku stránky (kterou chceš zobrazit jen pro přihlášeného) zjistíš, jestli má uživatel nastavený $_SESSION (if( isset( $_SESSION['id'] ) )) - pokud podmínku splní je přihlášen, pokud ne, tak není.

Tudíž kdykoliv budeš chtít pracovat s uživatelem, zkontroluješ jestli je přihlášen (existuje $_SESSION['id']) a pak teprve můžeš bezpečně zjistit, jaké má id, se kterým dále můžešpracovat.

Takže jestli ti authenticate.php (příkladový název) nastaví správně $_SESSION['id'], tak máš přihlašování hotové a můžeš jít vesele na další metu :)
fili
Profil
Actimel:
V ďalšom súbore mám:
<?
 
   
  ini_set("display_errors", "On");
  error_reporting(E_ALL);
  
  if(isset( $_SESSION['id']))= true;
   {
   echo "Len pre prihlásených"; 
   else
   echo "Nie ste prihlásený";
   }  
   
?>

Je taký zápis správny, pretože mi zobrazuje prázdnu stranu.
Actimel
Profil
fili:
Mrkni jak se píší podmínky. I přes to, že jsem ti ji sem v minulém příspěvku napsal. Oprav si 7. ř. a bude po problému.
Actimel
Profil
Jinak ještě bych doplnil ať začínáš php <?php namísto kratšího <?
Taps
Profil
Actimel

Jinak ještě bych doplnil ať začínáš php <?php namísto kratšího <?
To není nezbytně nutné, důležité je mít povolené short_open_tag v php.ini
fili
Profil
Actimel:
Áno, skracujem <?php na<?, ale aj keď som to opravil a na r.7 napíšem čokoľvek, tak mám ako výsledok stále prázdnu stranu.
Nesúvisí to s tým, že mi už pri tom prihlasovaní mi var_dump($_SESSION); dáva NULL ?
Taps
echo phpinfo(8);
vypisuje
short_open_tag On On
martin1312
Profil
tak tam nepis čokoľvek ale podmienku tak, ako sa ma správne zapísať.
fili
Profil
martin1312:
if( isset( $_SESSION['id']) ) = $row['id'];

Nemalo by mi
ini_set("display_errors", "On");
error_reporting(E_ALL);
vyhodiť chybu ak tam je alebo var_dump($_SESSION);
niečo vypísať?
Tori
Profil
fili:
už pri tom prihlasovaní mi var_dump($_SESSION); dáva NULL
Máte na začátku toho skriptu session_start()?
juriad
Profil
Napřed to musíš opravit správně. Pokud správně chápu tvůj záměr, mělo by to být asi takto.
if(isset($_SESSION['id']) && $_SESSION['id'] == $row['id']) {
  echo "Len pre prihlásených"; 
} else {
  echo "Nie ste prihlásený";
}
Ale myslím si, že zvýrazněná část je zbytečná (lze ji bez újmy vynechat).
fili
Profil
juriad:
Vďaka.
Aj takú možnosť som tam skúšal napísať, ale asi nejak blbo.
Ale aj tak mi vyhadzuje "NULL Nie ste prihlásený"
Takže je niekde chyba, aj keď po odoslaní formulára sa mi otvorí stránka, kde mi vypíše login aj heslo, takže to vyzerá, že prihlásenie je ok. Ale keď na tej istej stránke kliknem na odkaz - ďalší súbor, kde som použil
if(isset($_SESSION['id']) && $_SESSION['id'] == $row['id']) {
  echo "Len pre prihlásených"; 
} else {
  echo "Nie ste prihlásený";
}
Tak vyhodí to "NULL Nie ste prihlásený"
Actimel
Profil
Taps:
To není nezbytně nutné, důležité je mít povolené short_open_tag v php.ini
Vím, že to není nutné, ale třeba já to na localhostu povolený nemám (což není problém), ale někdy pak nahraje jeho soubory na webhosting, kde je to zakázané a bude muset všude přepsat <? na <?php. A ještě se tomu prý nelíbí xhtml, ale to nemůžu z vlastní zkušenosti potvrdit - s tím jsem niky nedělal.

Jinak jak píše Tori, var_dump() ti vypisuje null, protože nestartuješ session.

To ale nic nemění na to, aby ses podíval jak se píší podmínky
fili
Profil
Actimel:
session startujem includovaným súborom do každého súboru,
ktorý má byť súčasťou používateľského účtu a dávam ho na začiatok pred html
<?php
  ini_set("display_errors", "On");
  error_reporting(E_ALL);
 
  if (session_start()) {
    echo "<p>session inicializovano";
  } else {
    echo "<p>chyba pri spusteni session<br>";
    print_r(error_get_last());
  }
  echo "<p>session_id(): " . session_id();
 
  echo "<p>short_open_tag: " . ini_get("short_open_tag");
 
  echo "<p>ted: " . date("r");
  if (!empty($_SESSION['session'])) {
    echo "<p>hodnota: $_SESSION[session]";
  }
  $_SESSION['session'] = date("r");


?>
Actimel
Profil
fili:
Aha… tak jestli se ti session nastartují a po odeslání formuláře ti to vypisuje null, i když tě to podle všeho přihlásilo, tak je něco špatně s tím přihlášením a nadefinování $_SESSION['id']
Tori
Profil
fili:
Jakou máte verzi PHP? (není podstatné)

Ještě doplňuji: Pořád jsem přesvědčená, že session nenastartuje. V opačném případě by totiž var_dump($_SESSION) mělo vracet array (size=0), tedy existující ale prázdné pole. NULL znamená, že proměnná není vůbec definovaná.

Má-li podmínka na ř.5 ve [#23] vracet správný výsledek, měla by vypadat takhle: if (!headers_sent() && session_start()). Funkce session_start() sice od verze PHP5.3 vrací false, pokud nelze session vytvořit, ale to se zřejmě týká jen načtení session ID nebo uložených dat z filesystému. Pokud session_start selže kvůli tomu, že už byl odeslaný nějaký text do prohlížeče, vrací normálně TRUE, jen by se mělo navíc zobrazit upozornění na chybu.

Dál záleží na tom, kolik dat už bylo odeslaných na výstup (tj. echo, prázdné řádky mimo PHP kód apod.). Server neposílá výstup po bajtech, ale v paketech po asi několika kB, nevím přesně. Takže pokud je před session_start() jen echo '<html><title>moje stranka</title>';, pravdědopodbně session nastartuje v pohodě. Pokud tam je víc znaků (asi víc, než velikost jednoho paketu), session nenastartuje. Ověřením pomocí headers_sent to právě zjistíte, jestli už byl ze serveru odeslán nějaký obsah, anebo se ještě můžou poslat HTTP hlavičky (tj. cookie se session ID).
fili
Profil
Actimel:
No, ale čo, ja to robím 1x tak nemám skúsenosti, z ktorých by som to vedel nejak zistiť. Inak mám to xhtml, ale aj keď som ho zmenil na html, tak to nijak nepomohlo.
Tori

ja to includujem takto:
<?php include "../ladenie.php"?>
<!DOCTYPE....
Skúsil som aj :
if (!headers_sent() && session_start())
ale stále rovnaký výsledok
fili
Profil
Nenájde sa nikto, kto by vedel v čom je chyba?
Actimel
Profil
fili:
Možná, když postneš všechny zdrojové soubory (předpokládám, že jen 3) na pastebin a hodíš nám sem odkaz a popis, co to dělá nedělá, tak si to třeba někdo projde a něco najde.
fili
Profil
Actimel:
http://pastebin.com/BSqyZ1rb
Actimel
Profil
fili:
ř. 24 - máš blbě komentář (resp. na tom řádku komentář není, ale vypadá to, že se o něj snažíš), který hodí parse error a nevidíš ho proto, protože nastavuješ zobrazení chybových hlášení až za ním (teda předpokládám).

ř. 31-32 - ještě než začneš $_POSTy přiřazovat do proměnných, ověřil bych si, jestli vůbec existují

r. 32 - blbost, nepotřebuješ si definovat proměnnou id, kterou dostaneš z databáze později. Navíc je to nesmyslně definovaný, co čekáš od stringu 'id', že ti vrátí jako integer?

ř. 42-44 - na konci před středníkem můžeš to ."" smazat, je zbytečné připínat k tomu prázdný string

ř. 44 - vypisuješ $id, který není definovaný, nejdřív si ho nadefinuj (ale ne tak jak na ř. 32)

Co se týká souboru vkald-skuska3.php, tak se mrkni jak se vytahuje více sloupců z databáze, k čemu a jak funguje funkce list() a napiš to znovu ;)
« 1 2 3 »

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: