Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Aktywacja konta przy rejestracji
Forum PHP.pl > Forum > Przedszkole
hunter1988
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...
phpion
W warunkach przy select masz aktywacja=1, a przy update aktywacja=0.
hunter1988
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
gitbejbe
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. }


hunter1988
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 wink.gif
gitbejbe
zwracam honor. Byłem świecie przekonany, że chodzi o sprawdzenie aktywacji konta przy logowaniu facepalmxd.gif tak to jest gry siedzi się w pracy i stara się jednocześnie pracować i opierdzielać ;p
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.