Autor Zpráva
mjausB
Profil
Prosim o radu nakolko uz som vyskusal asi vsetko. Pouzivam prihlasenie kde po prihlaseni mi ulozi do premennej $_SESSION['user']; priezvisko prihlaseneho uzivatela.

Nasledne na to (po klikniti) nacitavam data z databazy kde kazdy prihlaseny uzivatel ma svoje data (stlpec "zak_obchodnik" v tabulke):

$user_loged = $_SESSION['user'];
$query = "SELECT * FROM zakaznici WHERE zak_obchodnik = '$user_loged' ORDER BY zak_id";

tento prikaz vsak nacita len data kde je v tabulke zak_obchodnik prazdny. Ako keby nepriradil hodnotu SESSION do premennej. Pre kontrolu vypisujem premennu <?php echo $_SESSION["user"] ?> a v premennej priezvisko prihlaseneho je.

Dakujem za pomoc.
Keeehi
Profil
echo $query; Výstup z toho vem a pusť ručně v databázi (PMA, Adminer, nebo prostě to co používáš). Ukáže ti to správné řádky?
mjausB
Profil
Praveze vystup z databazy je nespravny. Napriklad ked je v SESSION ulozene meno "Fero" tak z databazy by malo nacitat len riadky kde "zak_obchodnik" = Fero. Namiesto toho vsak vystup su riadky kde "zak_obchodnik" = "", pritom echo SESSION vypisuje "Fero"

Ked vsak spravim toto $user_loged = "Fero"; vystup z databazy je spravny - riadky kde "zak_obchodnik" = "Fero".
Taps
Profil
mas na zacatku skriptu session_start()?
Keeehi
Profil
mjausB:
Praveze vystup z databazy je nespravny.
Na to jsem se neptal. Dal jsem ti poměrně jasný postup, co máš udělat. Nevím, proč jsi to neudělal, takže ti zkusím vysvětlit, proč je potřeba udělat to, co jsem napsal.

Hlavní problém je v tom, že si myslíš že víš kde je chyba. Důležité je si tím být jistý. Když by někde něco mělo být, tak to ještě neznamená, že to tam je. Je tedy potřeba otestovat, zda to tam opravdu je.
echo $query; - Je potřeba si vypsat dotaz. Nejlépe řádek před tím, než ho předáváš funkci mysqli_query nebo něčemu jinému co dotaz provádí. Proč? Protože to je to, co se do databáze pošle. Je naprosto jedno, co se stalo kdykoli před tím, jak ten dotaz vznikl. Důležité je, co přesně je v proměnné $query teď protože to je to, co se vykoná a nic jiného.

Výstup z toho vem“ - Tím myslím zkopíruj, to jen tak pro pořádek. A to je zase důležité. 1) Zabrání se tím chybám v přepisu. 2) Mohou tam být teoreticky nějaké neviditelné znaky, které je potřeba taky mít.

a pusť ručně v databázi (PMA, Adminer, nebo prostě to co používáš)“ - Jelikož tvůj kód nedává správné výsledky, nedá se mu věřit. Proto je potřeba použít prověřený software někoho jiného u kterého si můžeš výt jistý, že vždy zobrazí korektně výsledek pro zadaný dotaz.

Ukáže ti to správné řádky?“ No a tady se konečně dostáváme k samotnému hledání chyby. Možnosti:
1) Už když si vypíšeš proměnnou $query uvidíš, že s dotazem není něco v pořádku => chyba se bude nalézat v části, která vytváří ten dotaz
2) Zkopírovaný dotaz nelze spustit => V SQL dotazu je nějaká syntaktická chyba
3) Výstupem je tabulka ale jsou v ní špatná data => Máš špatně SQL dotaz, napiš ho správně.
4) Výstupem je tabulka se správnými daty => chyba je v části, kde se data vypisují.

Jak vidíš, velmi jednoduchým postupem se dá ověřit, co tu chybu způsobuje. Já vím, že se ti to zdá zbytečné, ale bylo by mnohem jednodušší a rychlejší, kdyby jsi udělal to, co po tobě někdo chce, když chceš od něj poradit.
T-fon
Profil
Já si myslím Keeehi, že tohle mu nepomůže, protože on píše, že když do proměnný napíše přímo jméno, tak výpis funguje (Ked vsak spravim toto $user_loged = "Fero"; vystup z databazy je spravny). Na druhou stranu píše, že echo session mu jméno vypisuje, ale dle syntaxe to vypisuje někde v šabloně. Takže je možný, že spíš chyba bude v session, např. jak píše Taps, že mu ve scriptu, který používá na sql dotaz, chybí session_start.
mjausB
Profil
Vdaka za moc inspirujuce odpovede. Presne ako pise T-fon: chyba je v session nakolko query je spravne. Zistil som to prave tym ze som premennu vrazil napriamo a nie zo SESSION.

No hodne mi pomohlo to SESSION_START. Presne som hladal chybu kde nebola. Takze vdaka velka vsetko uz funguje ako ma... Bolo to tym SESSION_START...
Keeehi
Profil
mjausB:
pritom echo SESSION vypisuje "Fero"
A můžeš mi vysvětlit, jak je toto možné? Jediné co mě napadá je, že jsi to pouštěl na stránce přihlášení a ne na stránce s dotazem. Jestli ano, tak to příště zkontroluj na obou místech. Jak jsem psal, to že čekáš, že někde má něco být ještě neznamená, že to tam taky bude.

T-fon:
Já si myslím Keeehi, že tohle mu nepomůže
Ale pomohlo by mu to. Kdyby si ten dotaz vypsal, jak jsem napsal, tak by viděl, že s tím dotazem není něco v pořádku ( 1) možnost ). Že mu v něm chybí to jméno. Takže by to sem buď napsal, nebo by zjišťoval proč to tam není a přišel by ma to, že SESSION je prázdná.

Když už jsme u toho - mjausB zapni si vypisování všech chybových hlášek. V tomto případě by ti to totiž vyhodilo error závažnosti NOTICE, který by říkal že taková hodnota v poli SESSION neexistuje.
mjausB
Profil
no aby som pravdu povedal tak vypisoval som to (echo) na rovnakej stranke ako je tabulka z databazy. Avsak query sa vykonava na inej stranke, kde chybalo SESSION_START.

Takze na stranke s tabulkou sa SESSION tvarilo normalne ale na stranke query to nefungovalo a neposielalo spravne data do tabulky....
Inak ziadnu chybu to nevypisovalo pretoze hodnota v poli SESSION bola = "". Totiz ono nacitavalo data z databazy kde user nemal zadane nic.

Ale vdaka. Ja som bol v tom ze SESSION_START staci aby bola sesion aktivna napriek vsetkymi strankami... No uz viem ze tomu tak nie je.
Keeehi
Profil
mjausB:
vypisoval som to (echo) na rovnakej stranke ako je tabulka z databazy. Avsak query sa vykonava na inej stranke,
Query a tabulka musejí být na jedné a té samé stránce, jinak to nemůže fungovat. Což oni zřejmě jsou ale my se lišíme v terminologii. Ty stránkou myslíš zřejmě jeden PHP soubor. Já zase jeden HTTP požadavek.

Inak ziadnu chybu to nevypisovalo pretoze hodnota v poli SESSION bola = "".
Jsem si celkem jistý, že takto to nebylo. Ono totiž nedefinovaný hodnota pole je null a ne prázdný řetězec. Aby tam byl prázdný řetězec, tak by jsi ho tam sám musel přiřadit. Což předpokládám není tvůj případ. Co se podle mě stalo je následující: Vyhodila se chyba o přístupu k neexistujícímu prvku pole. Tato chyba nebyla zobrazena, jelikož v defaultním nastavení PHP se chyby úrovně NOTICE nevypisují a ty sám jsi to neměnil. Do proměnné $user_loged se přiřadilo null. Hodnota null se při zřetězení přetypovala na prázdný řetězec.

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: