Autor | Zpráva | ||
---|---|---|---|
undisputed Profil |
#1 · Zasláno: 31. 5. 2011, 19:32:04
Stále tomu nerozumiem,niekto sa na moju stránku prihlási,vypíše mu to "ahoj a jeho nick"následne sa presunem na stránku kde je tento kód:
<?php session_start(); include 'connect.php'; $h=$_SESSION['nick']['nick']; echo $h; $vyslee = mysql_query("select drevo_uroven from sklad where nick = '$h'"); $radoe = mysql_fetch_assoc ($vyslee); $no = $radoe['sklad_uroven']; echo $no; ?> Výsledok-skúšal som len taký virtuálny "sklad" na serveri-výsledom skriptu má byť vypísanie nicku-to ide,a vypísanie čísla z db -to nie nerozumiem prečo kto mi poradí?podotykam že session je registrovaná(logicky ked mi vypíše nick)a aj súbor connect.php je vporiadku. Diky za rady. |
||
Spectator Profil |
#2 · Zasláno: 31. 5. 2011, 19:41:24
Zkus si ten SQL dotaz v nějakém phpMyadminu jestli to bere správný hodnoty z db.
Možná jsem slepej, ale nějak taky nevidim, co nefunguje. |
||
Tori Profil |
#3 · Zasláno: 31. 5. 2011, 19:45:41
undisputed:
$vyslee = mysql_query("select drevo_uroven from sklad where nick = '$h'"); $radoe = mysql_fetch_assoc ($vyslee); $no = $radoe['sklad_uroven']; |
||
undisputed Profil |
#4 · Zasláno: 31. 5. 2011, 19:50:26
Chyba nepozornosti,najprv som chcel drevo,ale do db som si spravil sklad tak som to zabudol opraviť :Ddiky za opravu.
|
||
undisputed Profil |
#5 · Zasláno: 1. 6. 2011, 15:25:55 · Upravil/a: undisputed
Mám s tým ďalší problém viď kód,session sa uloží prejdem na stránku kde je tento kód
<?php session_start(); include "connect.php"; $id=$_GET['id']; $nick=$_SESSION['nick']['nick']; echo $nick; ?> +ostatné je len html kód skoro(na konci ešte php podmienka ak je nick taký taký ukáže to a to) no presunem sa na tú stránku vypíše mi môj nick(funguje)obnovím stránku a zrazu mi vypíše "a" (do session je zrazu uložené a) neviete prečo?nedáme mi to zmysel :D |
||
undisputed Profil |
#6 · Zasláno: 1. 6. 2011, 19:06:05
Pomôže mi niekto?
|
||
Tori Profil |
#7 · Zasláno: 1. 6. 2011, 20:00:01
V kódu v [#1] ani [#5] se nikde nepřepisuje $_SESSION. Pokud se obsah session změní až po obnovení stránky, tak zřejmě někde dál v kódu ukládáte něco do $_SESSION. Buď si můžete v editoru vyhledat všechny výskyty $_SESSION v chybovém skriptu a zkontrolovat, jestli se někde nepřepisují, anebo na několik míst ve skriptu přidat
echo "řádek č. ".__LINE__.", session: ".print_r($_SESSION,1); |
||
undisputed Profil |
#8 · Zasláno: 1. 6. 2011, 20:10:48
No len práveže tam sa to nikde neprepisuje čisto html kód a vypís údajov pomocou while nič iné
|
||
Tori Profil |
#9 · Zasláno: 1. 6. 2011, 20:17:05
undisputed:
A ta podmínka na konci skriptu? Není v ní omylem = místo ==? |
||
undisputed Profil |
#10 · Zasláno: 1. 6. 2011, 20:23:03
No prišiel som na jednu vec,ale nerozumiem ako je to možné naozaj,v session som mal uložené nick admin obnovil som stránku a zrazu je tam "a" potom som si do session uložil nick "peter" ,obnovil stránku a zrazu mi vypísalo "p" ?to ako začiatočné písmeno vždy ako prečo?nerozumiem
|
||
undisputed Profil |
#11 · Zasláno: 1. 6. 2011, 20:24:15
A v podmienke je len ak premenna a je rovná premennej b tak sa update-tne db
|
||
Tori Profil |
#12 · Zasláno: 1. 6. 2011, 20:41:45 · Upravil/a: Tori
Taková zajímavá věc, možná vás to přivede na chybu:
$a['nick'] = "asdfgh"; echo $a['nick']; // vypíše "asdfgh" echo $a['nick']['nick']; // vypíše "a" // edit: $a = 'asdfgghjj'; // V případě, že se k řetězci přistupuje jako k poli, se zřejmě nepoužije přímo zadaný zápis: $a['neco']; // ..ale požadovaný index se nejdřív převede na celé číslo (což je celkem logické). $a[intval('neco')]; => $a[0] => "a" |
||
undisputed Profil |
#13 · Zasláno: 1. 6. 2011, 20:53:38
Nie nie,všade je
$nick=$_SESSION['nick']['nick']; Ale nech sa prihlasim pod akýmkoľvek nickom vždy po obnove stránky mi to uloží do session len prvé písmeno,ale dal som to tak aj na ďalšie 2stránky na skúšku a výsledok je presne taký istý :(som bezradný z toho už:(nevie niekto pomôcť?neviem možno nastaveniami servera alebo už neviem:( |
||
Tori Profil |
#14 · Zasláno: 1. 6. 2011, 20:57:22
undisputed:
A jak ten nick ukládáte do session? Chyba by mohla vznikat už tam. |
||
undisputed Profil |
#15 · Zasláno: 1. 6. 2011, 21:06:03
Tam je to dobre 100%
Len overujem či heslo a nick je dobre a potom sa to uloží tu je kúsok toho $cosi = mysql_fetch_array($result); if ($cosi['heslo'] == ($_POST['heslo'])){ $_SESSION["nick"] = $cosi; |
||
undisputed Profil |
#16 · Zasláno: 2. 6. 2011, 18:52:50
Vie niekto kde je chyba?
|
||
jenikkozak Profil |
#17 · Zasláno: 2. 6. 2011, 20:30:00 · Upravil/a: jenikkozak
|
||
undisputed Profil |
#18 · Zasláno: 3. 6. 2011, 17:04:33
V [#15] to funguje všetko dobre z db sa vybere nick a zmení sa to na premennu a následne tá premenná sa uloží do session,
A v [#13] keby som dal $_SESSION['nick']; $_SESSION['nick']['nick']; |
||
Alphard Profil |
#19 · Zasláno: 4. 6. 2011, 10:54:21
Dejte si do kódu pár výpisů
print_r($_SESSION); , zjistíte, jak tam vlastně máte ty klíče a jak se mění hodnoty
„$_SESSION['nick']['nick'];“ Je v tom strašný zmatek, nebylo by lepší pojmenovat to $_SESSION['user']['nick'] ?
|
||
undisputed Profil |
#20 · Zasláno: 4. 6. 2011, 15:32:07
SESSION[user] ?asi nie keď tam takú nemám spravenu
|
||
undisputed Profil |
#21 · Zasláno: 4. 6. 2011, 15:55:54
No takže spravil som to najprimitivnejšie ako to viem:
Prvý kód(kde sa registruje session) <?php session_start(); echo "<html><body>"; echo "<form action='#' method='post'><input type='text' name='nick'><input type='submit' value='ok'></form>"; if(!empty($_POST['nick'])){ $nick=$_POST['nick']; // Takze sessny fungujou } $_SESSION["nick"] = $nick; session_register("nick"); echo $_SESSION["nick"]; ?> </body> </html> Tam keď obnovím stránku tak mi stale ukazuje ten nick čo si zaregistrujem ale akonáhle sa presunem na skript číslo 2: <?php session_start(); $nick=$_SESSION['nick']['nick']; echo $nick; ?> Toto bolo posledná vec ako som to mohol otestovať nefunguje nefunguje nefunguje:(prečo?serverom to nieje skúsil som to aj na inom hostingu.diky za odpoveď |
||
Tori Profil |
#22 · Zasláno: 4. 6. 2011, 16:05:40
// První skript: session_start(); echo "<html><body>"; echo "<form action='#' method='post'><input type='text' name='nick'><input type='submit' value='ok'></form>"; if(!empty($_POST['nick'])){ // Tohle musí být ještě uvnitř podmínky, jinak si pokaždé, pokud nebude // odeslaný formulář přepíšete SESSION[nick] na prázdný řetězec. $_SESSION["nick"] = $_POST['nick']; } session_register("nick"); // Tenhle řádek vyhoďte úplně. echo $_SESSION["nick"]; // Druhý skript: session_start(); $nick = $_SESSION['nick']; // V předchozím skriptu ukládáte do SESSION[nick] a tady jste četl ze SESSION[nick][nick]: Vizte znova #12. echo $nick; |
||
undisputed Profil |
#23 · Zasláno: 4. 6. 2011, 16:15:47
Zaujímavé lebo ten prvý skript som mal tak isto ako ste napísala:)a iba vtom druhom som to upravil a funguje to ale ked som to predtým tak spravil mi vypísalo Array,
Nechápem..,už to len musím dať do toho prihlasovacieho skriptu |
||
undisputed Profil |
#24 · Zasláno: 4. 6. 2011, 17:00:39
Tori?
A ako to tuto upraviť? <?php session_start(); // prihlasenie if (isset($_POST['nick']) && isset($_POST['heslo'])){ include "connect.php"; @$query = "SELECT * FROM uzivatelia WHERE nick=\"".$_POST['nick']."\""; if (!$query) { echo "Spojenie z databázou sa nepodarilo"; } @$result = mysql_query($query, $link); if (!$query) { echo "Vyber z databázi sa nepodaril"; } $cosi = mysql_fetch_array($result); if ($cosi['heslo'] == ($_POST['heslo'])){ $nick=$cosi; session_register('nick'); $_SESSION['nick'] = $cosi; header("Location:main.php"); } else { header("Location:index.php"); } } else { header("Location:index.php"); } ?> Ďakujem |
||
Tori Profil |
#25 · Zasláno: 4. 6. 2011, 17:38:26 · Upravil/a: Tori
session_start(); if (isset($_POST['nick']) && isset($_POST['heslo'])){ include "connect.php"; // Ověření hesla i nicku může být v jednom dotazu + ochrana proti SQL injection $query = "SELECT * FROM uzivatelia WHERE nick='" . mysql_real_escape_string($_POST['nick']) . "' AND heslo = '" . mysql_real_escape_string($_POST['heslo']) . "'"; $result = mysql_query($query, $link); // Tyhle dva řádky jsou jen pro ladění na localhostu! Na ostrém webu je zakomentujte. if (mysql_error()) die("Chyba sql dotazu: " . mysql_error()); if (mysql_num_rows($result) > 0) { $user = mysql_fetch_assoc($result); // trochu smysluplnější název proměnné než $cosi $_SESSION['nick'] = $user['nick']; header("Location:main.php"); } else { // Pokud dotaz nevráti žádné řádky výsledku, bylo špatné buď heslo nebo nick. // Nějak byste mohl v index.php rozlišit, jestli uživatel přišel poprvé, anebo se vrátil po neúspěšném přihlášení, např. tímhle: // v index.php by pak bylo: if (isset($_GET['chybaPrihlaseni'])) ... header("Location:index.php?chybaPrihlaseni=1"); } } else { header("Location:index.php"); } |
||
undisputed Profil |
#26 · Zasláno: 4. 6. 2011, 18:08:08
Aha,ďakujem zajtra skúsim dnes už nestíham
|
||
undisputed Profil |
#27 · Zasláno: 4. 6. 2011, 20:50:33
No neviem niekde musí byť vtom vašom skripte chyba lebo nefunguje pretože ma to nepresune nikam ostanem stať na tom skripte
|
||
Časová prodleva: 13 let
|
0