mam taki skrypt. Obsługuje formularz aktywacji konta gdzie użytkownik podaje następujące dane: adres mailowy, hasło, kod zabezpieczający z maila. I teraz tak. po aktywacji ma się wykonać ten fragment kodu i pokazać stosowna informacja.
$_SESSION['success'] = '<span style="color:green">Twoje konto zostało aktywowane poprawnie. Potwierdzenie otrzymasz także na swój adres mailowy:'.$email.'</span>'; include('../mailing/mailing-aktywowanie-konta.php');
Aktywacja jedynie wtedy kiedy wszystkie podane dane się zgadzają. W przeciwnym razie:
$_SESSION['blad'] = '<span style="color:red">podałeś błędne dane</span>';
Niestety nie dział to do końca. Sprawdzałem trzy warianty:
1. Zły mail, reszta ok
2. Złe hasło, reszta ok
3. Zły kod, reszta ok
O ile w pierwszych dwóch przypadkach jest dobrze - podaje błąd i nie ma aktywacji (kolumna kod nie zmienia się na "1" w bazie) o tyle w przypadku 3 dostaję komunikat, że weryfikacja się udała, a konto zostało aktywowane. Mail dochodzi, jednak w bazie nic się nie zmienia konto nadal jest nieaktywne. Jeżeli wprowadzę wszystkie dane poprawnie otrzymuję o co chcę, stosowny komunikat i zmianę "flagi" na 1.
Gdzie tkwi problem, ze kod wykonuje się jakby "częściowo"? Podejrzewam, ze chodzi o coś z tym:
$zapytanie_aktywuj_konto = "UPDATE klient set aktywny = 1 where (email='$email' AND haslo = '$haslo' AND kod='$kod_zabezpieczajacy')";
Jakby nie wykonywało wszystkich ANDów. Poniżej pełny kod tego pliku - może ktoś wyłapie błąd.
<?php { } require_once 'connect.php'; $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name); if ($polaczenie->connect_errno!=0) { } else { $email = $_POST['email']; $kod_zabezpieczajacy = $_POST['kod']; $zapytanie_sprawdzenie_danych = "SELECT email,haslo from klient where email='$email' AND haslo='$haslo'"; if ($rezultat = @$polaczenie->query($zapytanie_sprawdzenie_danych)) { if (($rezultat->num_rows)>0) { $zapytanie_aktywuj_konto = "UPDATE klient set aktywny = 1 where (email='$email' AND haslo = '$haslo' AND kod='$kod_zabezpieczajacy')"; if ($rezultat = @$polaczenie->query($zapytanie_aktywuj_konto)){ $_SESSION['success'] = '<span style="color:green">Twoje konto zostało aktywowane poprawnie. Potwierdzenie otrzymas ztakże na swój adres mailowy:'.$email.'</span>'; include('../mailing/mailing-aktywowanie-konta.php'); } }else{ $_SESSION['blad'] = '<span style="color:red">podałes błędne dane</span>'; } } else { } } $polaczenie->close(); ?>
Wybaczcie jakoś samego kodu itd, nie jestem w tym aż tak biegły a samouczenie jest chyba najlepsza metodą . Mam nadzieję, że coś da się z tym zrobić
