Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Pobieranie danych z bazy, Niby wszystko dobrze ale nie działa
Mamazur
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 3.07.2009

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
sadistic_son
post
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


  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. ';


Ten post edytował sadistic_son 8.02.2010, 14:01:20
Go to the top of the page
+Quote Post
Mamazur
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 3.07.2009

Ostrzeżenie: (0%)
-----


nie działa nic nie wypisuje
Go to the top of the page
+Quote Post
emtiej
post
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 12.04.2009
Skąd: Rypin

Ostrzeżenie: (0%)
-----


login powinien być unikalny, więc poco limit? Wyświetlaj wyniki funkcją print_r()
Go to the top of the page
+Quote Post
PawelC
post
Post #5





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował ExPlOiT 9.02.2010, 12:52:58
Go to the top of the page
+Quote Post
Mamazur
post
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 3.07.2009

Ostrzeżenie: (0%)
-----


nadal nie chodzi

pomocy
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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" (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
phpion
post
Post #8





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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" (IMG:style_emoticons/default/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ą.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
phpion
post
Post #10





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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ć (IMG:style_emoticons/default/smile.gif)

Ten post edytował phpion 11.02.2010, 13:28:51
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Mamazur
post
Post #12





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 3.07.2009

Ostrzeżenie: (0%)
-----


nic nie wypisuje
Go to the top of the page
+Quote Post
rytek
post
Post #13





Grupa: Zarejestrowani
Postów: 63
Pomógł: 14
Dołączył: 21.01.2009
Skąd: Mszczonów

Ostrzeżenie: (0%)
-----


a w ogóle masz gdzieś session_start(); ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 09:19