Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sprawdzanie czy zapytanie zwróciło wynik?
Forum PHP.pl > Forum > Przedszkole
-Ja-
Witam!

Mam taki fragment kodziku:

  1.  
  2. $pyt = "SELECT * FROM oczekujace WHERE \"login\" = '$login' AND \"haslo\" = '$haslo' AND \"email\" = '$email'";
  3. $odp = mysql_query($pyt);
  4.  
  5. if($odp)
  6. {
  7. $query2 = "INSERT INTO users VALUES ('$login', '$haslo', '0', '$email')";
  8. $result2 = mysql_query($query2);
  9. }
  10. else
  11. {
  12. print "Błędne dane. Skontaktuj się z administratorem w dziale <a href='kontakt.html'>kontakt</a>.";
  13. }


Odpowiada on za aktywację konta (link jest wysyłany mailem, a następnie metodą GET pobieram z niego dane do zmiennych $login, $haslo i $mail). Aktywacja konta działa. Jednakże, gdy w linku wpiszę błędne dane, np. login 'Ciapek', to ono się i tak doda do tabeli 'users', mimo, że nie zostało wcześniej zarejestrowane. Zadaniem pierwszej instrukcji warunkowej, było blokowanie tego, jednakże nie działa.

Męczę się nad tym już 30 min, rozwiązania nie znalazłem. Jedyne co mi zostało, to prosić was o pomoc, więc... "HELP!" wink.gif.
peter13135
albo
  1. SELECT count(*) ...
i sprawdzaj pierwszy element tablicy zwróconej przez mysql_fetch_array
albo sprawdzaj w tej sposób:
  1. if(mysql_num_rows($odp))
-Ja-
Cytat(peter13135 @ 8.08.2011, 21:03:16 ) *
albo
  1. SELECT count(*) ...
i sprawdzaj pierwszy element tablicy zwróconej przez mysql_fetch_array
albo sprawdzaj w tej sposób:
  1. if(mysql_num_rows($odp))


Nie działa.
bastard13
Po pierwsze to zapisałbym to twoje zapytanie tak:
  1. $pyt = "SELECT * FROM oczekujace WHERE login = '$login' AND haslo = '$haslo' AND email = '$email'";

ponieważ ten cudzysłów jest trochę mylący może wskazywać na wartość, a nie na nazwę kolumny.

Po drugie wyrażenie w ifie:
  1. if(mysql_query($pyt))

po zrzutowaniu na boolean, zazwyczaj zwróci true, bo:
Cytat
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.


Więc tak jak napisał ci peter13135, powinieneś użyć:
  1. if(mysql_num_rows($odp))


Dodatkowo dodaj sobie przed tym ifem (do celów debugowania):
  1. var_dump(mysql_num_rows($odp)); //będziesz wiedział ile wierszy wyciąga
  2. var_dump(mysql_fetch_assoc($odp)); //jeżeli coś wyciąga, to zobaczysz co
lukaskolista
A nie lepiej
  1. $result = mysql_query("...");
  2. if (mysql_fetch_row($result) !== FALSE)
  3. {
  4.  
  5. }


btw. cos sie znacznik quote zepsul, bierze w cytata calego posta zamiast fragmentu (przynajmniej w tym przypadku tak bylo)
-Ja-
Cytat(bastard13 @ 8.08.2011, 22:39:12 ) *
Po pierwsze to zapisałbym to twoje zapytanie tak:
  1. $pyt = "SELECT * FROM oczekujace WHERE login = '$login' AND haslo = '$haslo' AND email = '$email'";

ponieważ ten cudzysłów jest trochę mylący może wskazywać na wartość, a nie na nazwę kolumny.

Po drugie wyrażenie w ifie:
  1. if(mysql_query($pyt))

po zrzutowaniu na boolean, zazwyczaj zwróci true, bo:


Więc tak jak napisał ci peter13135, powinieneś użyć:
  1. if(mysql_num_rows($odp))


Dodatkowo dodaj sobie przed tym ifem (do celów debugowania):
  1. var_dump(mysql_num_rows($odp)); //będziesz wiedział ile wierszy wyciąga
  2. var_dump(mysql_fetch_assoc($odp)); //jeżeli coś wyciąga, to zobaczysz co


Zadziałało, ten zapis musiał nie być poprawny. Temat można zamknąć.
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.