Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak poprawnie sprawdzać rekordy w db ?
Forum PHP.pl > Forum > Przedszkole
Hikamare
Już od kilku dni głowię się nad procesem logowania i nie potrafię przebić się przez raczej łatwy problem - jak sprawdzić, czy login znajdujący się w formularzu znajduje się także w bazie danych ? Próbowałem różnych rozwiązań, opierałem się na tym jednak nic nie działa. Aktualnie próbowałem tego rozwiązania :

  1. if ($login == null && $password==null)
  2. {
  3. echo("Wypełnij wszystkie pola");
  4. }
  5. elseif (mysql_query(SELECT 'nick' FROM 'user' WHERE 'nick' IN($login)))
  6. {
  7. Echo("Zostałeś poprawnie zalogowany!");
  8. }
  9. ?>


Jednak wyskakuje mi błąd

Cytat
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\Program Files (x86)\WebServ\httpd\index.php on line 17


Gdzie 17 linia to w przypadku tego urywku kodu linia 5. Proszę o szybką pomoc (;
pyro
W tak krótkim skrypcie zrobiłeś kilka błędów:

Cytat
#
if ($login == null && $password==null)
#
{
#
echo("Wypełnij wszystkie pola");
#
}


Takie cos sprawdza czy login I haslo sa puste, jesli jedna z tych danych bedzie pusta to skrypt i tak dalej sie bedzie wykonywać.

Cytat
mysql_query(SELECT 'nick' FROM 'user' WHERE 'nick' IN($login)


Nie powstawiałeś (EDIT: apostrofów/cudzysłowów) w odpowiednich miejscach, dlatego Ci wyskakuje błąd.

Cytat
IN($login)


zamiast tego lepiej użyć operatora `=`, bo teraz użytkownik może podać kilka nicków na raz.

Cytat
#
elseif (mysql_query(SELECT 'nick' FROM 'user' WHERE 'nick' IN($login)))


sprawdzasz tylko czy login istnieje... czyli wystarczy, że użytkownik poda sam login (bez hasła) i już jest zalogowany.

Cytat
#
elseif (mysql_query(SELECT 'nick' FROM 'user' WHERE 'nick' IN($login)))


Taka składnia zawsze zwróci true, w związku z czym użytkownik zawsze się zaloguje, bo funkcja mysql_query zwraca resource. Zapoznaj się z funkcją mysql_num_rows();
Hikamare
To jest na razie zalążek skryptu, specjalnie nie dałem sprawdzania hasła, gdyż chciałem najpierw sprawdzić login winksmiley.jpg. Mimo wszystko nie pomyślałem o tym warunku z null.
Czy w takim razie mógłbyś pokazać mi jak poprawnie wstawić nawiasy do tego skryptu ?
daros17
Na przykład:
  1. $connection = mysql_query("select * from users WHERE pass ='$pass'")
  2.  
pyro
Sorrki, przejęzyczyłem się. Miałem na myśli apostrofy/cudzysłowy. Myślę, że dasz radę je wstawić sam, jak chwilkę nad tym pomyślisz. Interesuje Cię tylko część pomiędzy `mysql_query(` a `)`.
Hikamare
Skorzystałem z rozwiązania darosa, jednak po kliknięciu zaloguj otrzymuję taki błąd :

  1. Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NIE) in C:\Program Files (x86)\WebServ\httpd\index.php on line 17
  2.  
  3. Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\Program Files (x86)\WebServ\httpd\index.php on line 17


A przecież nie mam hasła do bazy danych.. Nie rozumiem, ;x
daros17
Wcześniej masz nawiązane połączenie z bazą? Poczytaj mysql_query
Hikamare
Tak. Używam funkcji, wcześniej nie było z tym problemu.
vonski
Cytat(Hikamare @ 21.11.2010, 00:37:07 ) *
Tak. Używam funkcji, wcześniej nie było z tym problemu.


Jakiej funckji? Przed wykonaniem funkcji mysql_query trzeba wcześniej połączyć się z bazą danych za pomocą mysql_connect następnie wybrać odpowiednią bazę danych za pomocą mysql_select_db. Wykonujesz te kroki?
Hikamare
W pliku index.php :
  1. <?
  2. require_once ("functions.php");
  3. ?>


W pliku functions.php :
  1. function db_connect() {
  2. $mysql_server = "localhost";
  3. $mysql_admin = "root";
  4. $mysql_pass = "";
  5. $mysql_db = "user";
  6. @mysql_connect($mysql_server, $mysql_admin, $mysql_pass)
  7. or die('Brak połączenia z serwerem MySQL.');
  8. @mysql_select_db($mysql_db)
  9. or die('Błąd wyboru bazy danych.');
  10. }
daros17
wywal te małpy z pliku functions.php Po drugie ustaw hasło na bazę danych i wpisz je
Hikamare
To nic nie zmienia.
daros17
Zmień hasło i spróbuj
Hikamare
Nie ma hasła - w tym jest problem.
daros17
No to ustaw hasło. Wejdź http://localhost/phpmyadmin/ Następnie Uprawnienia i jest ikonka Edycji(Edytuj uprawnienia) i będzie tam rubryka hasło
Hikamare
Okej - problem z bazą rozwiązany, jednak teraz pojawia się kolejny - wrzucam query do skryptu i nic się nie dzieje. Dodałem do bazy rekord - nick : admin, hasło : admin. Wpisuję w formularzu nick : admin i dalej nic. Oto skrypt :
  1. if ($login == null && $password==null)
  2. {
  3. echo("Wypełnij wszystkie pola");
  4. }
  5. else
  6. {
  7. $query = mysql_query("select * from 'user' WHERE 'nick' ='$login'");
  8. $fetch = mysql_fetch_assoc($query['nick']);
  9. echo("Twój login to :".$fetch);
  10. }
  11. ?>

Pokazuje mi się także błąd :

Cytat
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Program Files (x86)\WebServ\httpd\index.php on line 20
Mackos
Może zrób tak:
  1. if ($login == null && $password==null)
  2. {
  3. echo("Wypełnij wszystkie pola");
  4. }
  5. else
  6. {
  7. $query = mysql_query("select * from 'user' WHERE 'nick' ='$login'");
  8. $numer=mysql_num_rows($query);
  9. If ($numer != '0') {
  10. echo 'Taki login już istnieje';
  11. } else {
  12. $fetch = mysql_fetch_assoc($query['nick']);
  13. echo("Twój login to :".$fetch);
  14. }
  15. }
  16. ?>


Pisałem na szybko więc moze być gdzieś drobny błąd

Ogółem w taki sposób jak ty próbujesz chyba n ie uda Ci się wypisać wartości z bazy.
Hikamare
Cytat
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Program Files (x86)\WebServ\httpd\index.php on line 21

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Program Files (x86)\WebServ\httpd\index.php on line 25
Twój login to :


Niestety. Nic się nie zmienia ;(
daros17
spróbuj tak:
  1. if ($login == null && $password==null)
  2. {
  3. echo("Wypełnij wszystkie pola");
  4. }
  5. else
  6. {
  7. $connection = mysql_query("select * from users WHERE login ='$login'")or die (mysql_error());
  8. if (!mysql_fetch_row($connection) == 0) {
  9. echo 'Taki login już istnieje';
  10. }
  11. else
  12. {
  13. $connection = mysql_query("INSERT INTO users SET login='$login");
  14.  
  15. echo 'Login: '.$login;
  16.  
  17. }
  18. }
Hikamare
Daros17 ! Uwielbiam Cię ! Dziękuję za pomoc. Działa (;
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.