Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie działa return w funkcji ? PHP
Forum PHP.pl > Forum > Przedszkole
bubolski
Witam,

wziałem się za przerobienie starej strony www na bardziej zaawansowaną. Chcę zrobić ją przy użyciu funkcji , obiektów etc. I o dziwo mam problem na samym początku.

Zacząłem tworzyć panel logowania i jedna funkcja nie zwraca mi zmiennej.

Posiadam jedną funkcje do nawiązania połączenia z bazą danych. Druga natomiast sprawdza, czy użytkownik istnieje w bazie i jak tak to tworzy się zmienna sesji , a jak nie to zwraca odpowiedni komunikat a konkretnie $wynik 1 lub 2 (1 istnieje login , ale niepoprawne hasło ; 2 zapytanie sql zwrociło 0 wierszy więc user nie istnieje). Jednak nie zwraca mi się wartość wynik.

Mam 2 pliki index.php i function.php

Index.php
  1. <?php
  2. require_once('function.php');
  3. if(isset($_POST['textInput'])&&isset($_POST['passwordInput']))
  4. {
  5. ConnectKacik();
  6. CheckUser(html_entity_decode($_POST['textInput']),html_entity_decode($_POST['passwordInput']));
  7. echo $wynik; // niczego mi to nie wyświetla
  8.  
  9. }
  10. ?>


a tutaj funkcja CheckUser z function.php
  1. function CheckUser($login,$password){
  2.  
  3. $sql = "SELECT * FROM usery WHERE login='$login'";
  4. $result = mysql_query($sql);
  5.  
  6. $row = mysql_fetch_assoc($result);
  7.  
  8. if($login==$row['login'] && $password==$row['haslo'])
  9. {
  10.  
  11. }else
  12. {
  13. $wynik = 1;
  14. }
  15. if(mysql_num_rows($result)<1)
  16. {
  17. $wynik = 2;
  18. }
  19. // jeżeli w tym miejscu dam echo $wynik to wyświetla mi wartość na index.php (bo wyświetla z tego miejsca)
  20. return $wynik;
  21. }


Czemu mimo return $wynik , jak mam echo $wynik w index.php nie wyświetla mi tego wyniku questionmark.gif
nospor
Gdy funkcja cos zwraca to wypadaloby to odebrac...

$wynik = CheckUser(...);
echo $wynik;
KsaR
Bo zmienna $wynik jest tylko w funkcji twojej.
mozesz zrobic.

  1. $wynik = CheckUser(html_entity_decode($_POST['textInput']),html_entity_decode($_POST['passwordInput']));
  2. echo $wynik;


A dwa ze zależnie od twojego warunku w funkcji czasem zmienna $wynik nie istnieję. - edit, źle się przyjrzałem.
bubolski
Cytat(nospor @ 9.08.2016, 17:08:09 ) *
Gdy funkcja cos zwraca to wypadaloby to odebrac...

$wynik = CheckUser(...);
echo $wynik;


Widzisz takie proste a ja spędziłem nad tym ponad godzine głowiąc się co może być nie tak i próbując co chwile coś zmieniać.
Ostatecznie rozwiązałem to póki co za pomocą zapisu wyniku w zmiennej sesji, ale już zmieniłem tylko zapis w index.php na
  1. $wynik = CheckUser(html_entity_decode($_POST['textInput']),html_entity_decode($_POST['passwordInput']));


i działa aż miło smile.gif

Dzięki za pomoc.
Rysh
Cytat(bubolski @ 9.08.2016, 18:05:38 ) *
zwraca odpowiedni komunikat a konkretnie $wynik 1 lub 2 (1 istnieje login , ale niepoprawne hasło ; 2 zapytanie sql zwrociło 0 wierszy więc user nie istnieje).

Zrób albo użytkownik istnieje albo nie istnieje. Nie podpowiadaj ewentualnemu włamywaczowi że dany użytkownik istnieje.
bubolski
Cytat(KsaR @ 9.08.2016, 17:10:48 ) *
Bo zmienna $wynik jest tylko w funkcji twojej.
mozesz zrobic.

  1. $wynik = CheckUser(html_entity_decode($_POST['textInput']),html_entity_decode($_POST['passwordInput']));
  2. echo $wynik;


A dwa ze zależnie od twojego warunku w funkcji czasem zmienna $wynik nie istnieję.


To akurat jest specjalny zabieg. Jak nie ma wyniku to nie wyświetla błędu logowania. Jeżeli ktoś się loguje i wpisze złe hasło, lub użytkownik nie istnieje to tylko wtedy otrzyma śliczny czerwony button z opisem błędu. smile.gif

Cytat(Rysh @ 9.08.2016, 17:12:45 ) *
Zrób albo użytkownik istnieje albo nie istnieje. Nie podpowiadaj ewentualnemu włamywaczowi że dany użytkownik istnieje.


W sumie masz rację. Już to sobie zmieniłem smile.gif
aniolekx
pisz nazwy funkcji z malych liter, a nazwy klas z duzych... poczytaj o coding styles na http://www.php-fig.org/
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.