Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Aktywacja konta przy rejestracji
hunter1988
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.05.2013

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


Wszystko powinno działać a gdzieś jest mały błąd

  1. public function activation($kod)
  2. {
  3. $sql_check = "SELECT * FROM `users` WHERE `kod`='$kod' and `aktywacja`='1'";
  4. $sql_update = "UPDATE `users` SET `aktywacja`='1' WHERE `kod`='$kod' and `aktywacja`='0'";
  5.  
  6.  
  7. $stmt = $this->pdo -> exec($sql_check);
  8.  
  9. if($stmt > 0)
  10. {
  11. echo "Aktywowałeś swoje konto już wcześniej";
  12. }
  13. else
  14. {
  15. $this->pdo -> exec($sql_update);
  16. }
  17.  
  18.  
  19. }
  20.  


Połączenie z bazą jest, zapytanie $sql_update działa na 100% bo wklepywałem je bez warunków i aktywuje konto, coś jest nie tak z $sql_check.
Połączenie UPDATE działa, a już np w warunkach if nie, w tym przykładzie nie wykona się NIC, nie wyświetli się żaden błąd sql ani php, składnia więc jest "teoretycznie ok", zapytanie $sql_check na bank nie działa jak powinno (szukałem literówek i nic).

Powinno być tak skrypt sprawdza czy konto z danym kodem ma już aktywację (w bazie danych 1) i to jest warunek, funkcja exec sprawdza ilość wyników zapytania, w tym przypadku nawet gdy podaje kod i w bazie jest 0 to zawsze zwraca wynik 0 dla zapytania $sql_check, no ok ale skoro dało 0 to powinno wykonać się else czyli aktywacja konta, podczas gdy ten zabieg nie wykonuje się, mimo że $this->pdo -> exec($sql_update); działa.

Na pewno jest to jakaś głupota, ale siedzę przy tym i siedzę i nie mogę znaleźć błędu...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W warunkach przy select masz aktywacja=1, a przy update aktywacja=0.
Go to the top of the page
+Quote Post
hunter1988
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.05.2013

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


Cytat(phpion @ 4.06.2013, 13:53:27 ) *
W warunkach przy select masz aktywacja=1, a przy update aktywacja=0.


Kod jest przechowywany w bazie np
kod to 5005 i aktywował konto czyli 1

Pierwszy warunek sprawdza czy ktoś nie próbuje aktywować konta jeszcze raz bo np po 2 dniach przeglądał pocztę jeszcze raz i postanowił kliknąć w link wtedy exec zwróci wartość większą od 0 i update nie odbędzie się i tu jest coś nie tak z zapytaniem prawdopodobnie.
Drugie zapytanie po prostu aktywuje konto

Ten post edytował hunter1988 4.06.2013, 12:59:16
Go to the top of the page
+Quote Post
gitbejbe
post
Post #4





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


weź napisz to jeszcze raz ;p

ja po 1 zrobiłbym tak, ze zrobiłbym JEDNO zapytanie, gdzie pobieram sobie to co tam chce + pole czy konto jest aktywne.
czyli
  1. if(znalazł konto)
  2. {
  3. // teraz sprawdzasz z pobranego rekordu czy aktywacja konta = 1
  4. if(jeśli aktywne)
  5. {
  6. zaloguj
  7. }
  8. else
  9. {
  10. wywal komunikat ze nie zostało jeszcze aktywowane
  11. }
  12. }
  13. else(jesli nie znajdzie)
  14. {
  15. brak takiego konta
  16. }


Go to the top of the page
+Quote Post
hunter1988
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.05.2013

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


Grzebałem grzebałem i zrobiłem w ten sposób, problem był taki, że exec nie zwraca bezpośrednio liczby rekordów (widocznie, źle zrozumiałem czytając bibliotekę PDO)

  1.  
  2. public function activation($kod)
  3. {
  4. // tu można jeszcze dopisać zapytanie sprawdzające czy kod w ogóle istnieje taki w bazie, w razie gdyby użytkownik spreparował kod ręcznie, a nie klikał w link w mailu
  5. $stmt = $this->pdo -> prepare("SELECT * FROM `users` WHERE `kod`=:kod and `aktywacja`=:aktywacja");
  6. $stmt->bindValue(':kod',$kod,PDO::PARAM_STR);
  7. $stmt->bindValue(':aktywacja','1',PDO::PARAM_INT);
  8. $stmt->execute();
  9. $how_many = $stmt->rowCount();
  10. if($how_many > 0)
  11. {
  12. echo "Aktywowałeś swoje konto już wcześniej";
  13. }
  14. else
  15. {
  16.  
  17. $this->pdo -> exec("UPDATE `users` SET `aktywacja`='1' WHERE `kod`='$kod' and `aktywacja`='0'");
  18. echo "Konto zostało pomyślnie aktywowane";
  19. }
  20. }


gitbejbe trochę nie widzę sensu w pisanie tego w taki sposób, po co mi logowanie w aktywowaniu konta, tylko powiedz mi jeszcze jak można zrobić JEDNO zapytanie do update i select jednocześnie, bo ja jestem początkującym mocno ale wydaje mi się, że nie ma takiego zapytania (IMG:style_emoticons/default/wink.gif)

Ten post edytował hunter1988 5.06.2013, 09:06:14
Go to the top of the page
+Quote Post
gitbejbe
post
Post #6





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


zwracam honor. Byłem świecie przekonany, że chodzi o sprawdzenie aktywacji konta przy logowaniu (IMG:style_emoticons/default/facepalmxd.gif) tak to jest gry siedzi się w pracy i stara się jednocześnie pracować i opierdzielać ;p
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: 24.08.2025 - 15:11