Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [pdo][php][if]Nie działający warunek w PDO
benyowsky
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.11.2011

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


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.

Ten post edytował benyowsky 3.02.2012, 17:09:27
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
benyowsky
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.11.2011

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


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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
benyowsky
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.11.2011

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


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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.11.2011

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


Wielkie dzięki. Wszystko działa jak trzeba. Oczywiście wg Twoich wskazówek.

Pozdrawiam.
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: 23.08.2025 - 12:12