Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [pdo][php][if]Nie działający warunek w PDO
Forum PHP.pl > Forum > Przedszkole
benyowsky
Witam,

mam taki oto problem. Stworzyłem sobie bazę sqlite. W bazie mam użytkowników. Można się rejestrować w bazie z formularza na stronie. Chcę aby użytkownicy mieli unikalne nazwy. W tym celu zastosowałem if. Ale coś mi nie działa. Czytam, szukam, próbuje i nic. Oto kod:

  1. <?php
  2. try
  3. {
  4.  
  5. $nazwa = $_POST['nazwa'];
  6. $haslo = md5($_POST['haslo']);
  7. $pesel = $_POST['pesel'];
  8. $email = $_POST['email'];
  9.  
  10. $db = new PDO('sqlite:baza.sqlite');
  11.  
  12. $r = $db->exec("SELECT COUNT(nazwa) FROM osoby WHERE nazwa='$nazwa'");
  13.  
  14. if ($r = 1) {
  15. echo ("user istnieje<br>");
  16. echo ($r);
  17. echo ("<br>");
  18. echo ($nazwa);
  19. }
  20. else {
  21. $db->exec("INSERT INTO osoby (nazwa, haslo, pesel, email) VALUES ('$nazwa', '$haslo', '$pesel', '$email');");
  22. echo ("Dane zostały zapisane prawidłowo<br>");
  23. echo ($r);
  24. }
  25.  
  26. $db = NULL;
  27. }
  28. catch(PDOException $e)
  29. {
  30. print 'Exception : '.$e->getMessage();
  31. }
  32. ?>


Na początku przyjmuję z formularza dane, później łączę się z bazą, wrzucam do zapytania zmienną z nazwą użytkownika, który się rejestruje. Jeśli nazwa użytkownika znajduje się w bazie to warunek 1=1 i użytkownik nie bedzie się mógł zarejestrować. Jeśli nie to się zarejestruje. Problem w tym, że cokolwiek bym nie wpisal to zawsze skrypt pokazuje, że użytkownik w bazie istnieje. Próbowałem też z zapytaniem bez COUNT() tylko z porównaniem nazw użytkownika i to samo. Ma ktoś pomysł jak to rozwiązać? Rozwiązania z google mi nie pomogły. Dodam, że w PDO jestem laikiem. No i poza PDO wszystko działa.

Proszę o pomoc.
nospor
1)
if $r = 1
Odrożniaj operator przypisania od operatora porównania

2) Przeczytaj w manuala jak działa exec a następnie zastanów się, dlaczego nim nie można wykonywac zapytan SELECT
benyowsky
Cytat(nospor @ 3.02.2012, 17:12:24 ) *
1)
if $r = 1
Odrożniaj operator przypisania od operatora porównania


Ok, już widzę błąd. Tylko przy operatorze porównania == każdy wpisywany użytkownik jest uznawany za już istniejącego, nawet jeśli nie ma go w bazie.

Cytat(nospor @ 3.02.2012, 17:12:24 ) *
2) Przeczytaj w manuala jak działa exec a następnie zastanów się, dlaczego nim nie można wykonywac zapytan SELECT


Dzięki.
nospor
Cytat
Tylko przy operatorze porównania == każdy wpisywany użytkownik jest uznawany za już istniejącego, nawet jeśli nie ma go w bazie.
Zgadza się. A to jest ściśle powiązane z tym co napisałem w punkcie nr 2 smile.gif
benyowsky
Trochę poczytałem w manualu o PDO. W zapytaniu mam tak:
  1. $r = $db->query("SELECT COUNT(nazwa) FROM osoby WHERE nazwa='$nazwa'");

Nie wiem czy coś nie powinno być inaczej. Dalej mi to nie działa, ale tylko przez PDO. Jak zrobię to samo bez PDO to działa. Chyba wrócę do MySQL, bo jakoś nie mogę się w tym połapać.

Może jeszcze jakaś wskazówka?

Pozdrawiam i dzięki za podpowiedzi.
nospor
query() zwraca ci obiekt PDOStatement. Jego nie mozesz porównywać do 1. To jest odpowiedni resource z wyniku mysql_query.
Musisz teraz jeszcze pobrać wynik tego
http://www.php.net/manual/en/class.pdostatement.php
benyowsky
Wielkie dzięki. Wszystko działa jak trzeba. Oczywiście wg Twoich wskazówek.

Pozdrawiam.
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.