Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Sprawdzanie czy zapytanie zwróciło wynik?
--Ja--
post
Post #1





Goście







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!" (IMG:style_emoticons/default/wink.gif) .
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


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))
Go to the top of the page
+Quote Post
--Ja--
post
Post #3





Goście







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.
Go to the top of the page
+Quote Post
bastard13
post
Post #4





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


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





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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)

Ten post edytował lukaskolista 9.08.2011, 07:14:47
Go to the top of the page
+Quote Post
--Ja--
post
Post #6





Goście







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ąć.
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: 17.09.2025 - 15:31