Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobieranie danych z bazy
Forum PHP.pl > Forum > Przedszkole
Mamazur
Chcę aby po zalogowaniu wyświetliło się "Jesteś zalogowany jako NAZWAUŻYTKOWNIKA"

Jednak w moim skrypcie logowania w bazie danych jest osobne pole login i osobne pole nick, więc
  1. $nick = $_POST['login'];
  2. $_SESSION['nick'] = $nick;
  3. echo "<br>Jesteś zalogowany jako ";
  4. echo $_SESSION['nick'];

nie wchodzi w grę. Nie mam też zamiaru zmieniać skryptu logowania, gdyż potrzebuję osobnego loginu i nicka. Robię więc tak
  1. $zap = "select nick from dane where login = '".$_POST["login"]."'";
  2. $dane = mysql_fetch_row(mysql_query($zap));
  3. $_SESSION['nick'] = $dane[0];
  4. echo $_SESSION['nick'];

tak naprawdę nie wiem dlaczego
  1. $dane[0]

jednak to nie działa. Oto fragment kodu źródłowego strony:
  1. <br>Jesteśœ zalogowany jako: //i nic nie ma
  2. <a href='index.php?tryb=index&wyloguj=1'>
  3. Wyloguj się</a>
sadistic_son
  1. $zap = "select nick from dane where login = '".$_POST["login"]."' LIMIT 1";
  2. $wynik=mysql_query($zap);
  3. $dane = mysql_fetch_array($wynik,MYSQL_NUM);
  4. $nick=$dane
  5. $_SESSION['nick'] = $nick;
  6.  
  7.  
  8. <br>Jesteś zalogowany jako: '.$_SESSION['nick'][0].'
  9. <a href="index.php?tryb=index&wyloguj=1">
  10. Wyloguj się</a>
  11. ';
Mamazur
nie działa nic nie wypisuje
emtiej
login powinien być unikalny, więc poco limit? Wyświetlaj wyniki funkcją print_r()
PawelC
  1. $login=htmlspecialchars($_POST['login']);
  2. $zap = mysql_query("select nick from dane where login ='$login'");
  3. $dane = mysql_fetch_array($zap); 
  4. $_SESSION['nick'] = $dane['nick']; 
  5. echo $_SESSION['nick'];



Sprawdź tak i filtruj dane pochodzące z formularza. Rozumiem, że na początku skryptu masz odpalenie sesji.
Mamazur
nadal nie chodzi

pomocy
nospor
Cytat
login powinien być unikalny, więc poco limit?
Po to, by nie przeszukiwał nadaremno całej tabeli po znalezieniu rekordu.No wiesz, potocznie mówią na to "optymalizacja" winksmiley.jpg

Tak to można do usranej smierci tu pisac. Nie dziala, nie dziala. Moze byc podał wiecej informacji...
  1. $login=htmlspecialchars($_POST['login']);
  2. echo 'Login to:'.$login;
  3. $zap = mysql_query("select nick from dane where login ='$login'") or die(mysql_error());
  4. $dane = mysql_fetch_array($zap);
  5. echo 'Pobrane dane:';
  6. print_r($dane);
  7. $_SESSION['nick'] = $dane['nick'];
  8. echo $_SESSION['nick'];

Co ci wyswietla?
phpion
Cytat(nospor @ 11.02.2010, 13:00:00 ) *
Po to, by nie przeszukiwał nadaremno całej tabeli po znalezieniu rekordu.No wiesz, potocznie mówią na to "optymalizacja" winksmiley.jpg

Hmmm swego czasu zastanawiałem się jak działa LIMIT, szukałem, ale nie znalazłem odpowiedzi. Bo w zasadzie są 2 możliwości:

1. Pobiera rekordy aż do osiągnięcia LIMIT rekordów i przestaje dalej szukać.
2. Pobiera wszystkie rekordy i zwraca ich LIMIT.

Szczerze mówiąc nie wiem jak to faktycznie jest realizowane, ale skłaniałbym się raczej ku opcji 2. Dlaczego? Bo przecież można pobrać rekordy z określonym OFFSETem. Przyjmując pierwszy wariant działania klauzuli LIMIT ciężko mi sobie uzmysłowić jakby to miało działać - przecież jakoś trzeba określić próg początkowy zwracanych danych. Poza tym: co w sytuacji z użyciem sortowania? Czy byłaby możliwość pobrania X wierszy posortowanych malejąco po danej kolumnie bez wcześniejszego pobrania wszystkich rekordów? W to również wątpię. Tak więc wydaje mi się (ale to tylko moje gdybanie!), że LIMIT wycina określoną liczbę rekordów z wszystkich pobranych. Jeżeli faktycznie tak jest to dodanie LIMIT w tym konkretnym przypadku nie ma nic wspólnego z optymalizacją, a wręcz przeciwnie - niepotrzebnie tworzony jest narzut związany z koniecznością obcięcia zwracanego zbioru danych.

Może ktoś dysponuje w tej kwestii większą wiedzą - byłbym wdzięczny za podzielenie się nią.
nospor
LIMIT dotyczy znalezionych rekordów a nie przetwarzanych.
jak dasz limit 1 to on ci nie skonczy dzialania po przetworzeniu jednego rekordu, ale po znalezieniu rekordu, ktory spelnia warunki.

Czyli jak szuka rekordu o danym loginie i ma ustawione limit 1 to szuka az znajdzie i skoro ma limit 1 to juz nie szuka dalej. Jakby nie mial limit to by szukal bez potrzeby nadal
phpion
No ale mając w tabeli liczby np. 2, 5, 6, 4, 1, 11, 56, 4, 19 i chcąc pobrać 5 liczb w porządku malejącym - jak wówczas zachowa się LIMIT? Chyba musi sobie je najpierw uporządkować od największej do najmniejszej, a dopiero później zwrócić 5 pierwszych. Inaczej tego nie widzę. Podobnie w przypadku pobrania 5 liczb w porządku malejącym zaczynając od 3. liczby.

PS: wcale się nie kłócę, że mam rację - po prostu chcę ustalić jak to-to może działać smile.gif
nospor
Od tego masz indexy, by mysql nie musial sobie juz przy select nic uporządkowywac. Jak nie masz indexów to i swiety mocny nic nie pomoze smile.gif

Poza tym rozmowa toczyła sie na poczatku odnośnie limit 1 dla z gory wiadomo jednego rekordu.

ps:
http://net.tutsplus.com/tutorials/other/to...best-practices/
punkt 3
Mamazur
nic nie wypisuje
rytek
a w ogóle masz gdzieś session_start(); ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.