Hej,
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>';
header('Location: mn-site/aktywacja_konta.php'); 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>';
header('Location: /mn-site/aktywacja_konta.php'); unset($_SESSION['success']);
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
if ((!isset($_POST['email'])) || (!isset($_POST['haslo'])) || (!isset($_POST['kod']))) {
header('Location: /mn-site/aktywacja_konta.php'); }
require_once 'connect.php';
$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
if ($polaczenie->connect_errno!=0)
{
echo "Error: ".$polaczenie->connect_errno; }
else
{
$email = $_POST['email'];
$haslo = md5($_POST['haslo']); $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>';
header('Location: mn-site/aktywacja_konta.php'); include('../mailing/mailing-aktywowanie-konta.php');
unset($_SESSION['blad']);
}
}else{
$_SESSION['blad'] = '<span style="color:red">podałes błędne dane</span>';
header('Location: mn-site/aktywacja_konta.php');
unset($_SESSION['success']);
}
}
else {
echo "zapytanie się NIE wykonało";
}
}
$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ć

Pozdrawiam.
Ten post edytował arlid 30.07.2015, 18:27:37