Dziękuję za naprowadzenie błąd naprawiłem.
Zamiast $data wstawiłem $_POST i wszystko działa jak powinno.
A odnośnie ===, pisałem tylko że gdzieś wyczytałem, nie pamiętam nawet gdzie (w jakimś serwisie).
Dobrze, że jest i działa.
Podsumowując
Końcowy efekt
Jeśli ktoś ma jakieś sugestie w kwestii bezpieczeństwa lub ogólne
Każda krytyka mile widziana
Users.class.php
public function forgetten($data) {
$errors = [];
if($data['user_login'] == '') {
$errors[] = 'Musisz podać login.';
}
if($data['user_email'] == '') {
$errors[] = 'Musisz podać adres e-mail.';
}
if(!empty($data['user_email'])) { if(filter_var($data['user_email'], FILTER_VALIDATE_EMAIL) === false) {
$errors[] = 'Podany adres email jest nieprawidłowy.';
return $errors;
}
}
if(!empty($data['user_email']) && !empty($data['user_login'])) { $result = $this->sql->query("SELECT user_id FROM users WHERE user_login = '{$data['user_login']}' LIMIT 1");
if($result->num_rows == 0) {
$errors[] = "Nie istnieje login";
return $errors;
}
$result = $this->sql->query("SELECT user_id FROM users WHERE user_email = '{$data['user_email']}' LIMIT 1");
if($result->num_rows == 0) {
$errors[] = "Nie istnieje email";
return $errors;
}
$result = $this->sql->query("SELECT user_id FROM users WHERE user_email = '{$data['user_email']}' AND user_login = '{$data['user_login']}' LIMIT 1");
if($result->num_rows == 0) {
$errors[] = "Niezgodność login i email";
return $errors;
}
}
if(count($errors) == 0
) { if($result->num_rows > 0) {
$value = mysqli_fetch_object($result);
$user_id = $value->user_id;
$data = $this->get_data($user_id);
// TEST //
foreach($data as $key => $value) {
echo "<p>".$key." = ".$value."</p>"; }
// TEST //
function generateRandomPasswd($length = 12) {
$user_pass_random_characters = '[]{}/?!@#$%&()0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($user_pass_random_characters); $user_pass_random = '';
for ($i = 0; $i < $length; $i++) {
$user_pass_random .= $user_pass_random_characters[rand(0
, $charactersLength - 1
)]; }
return $user_pass_random;
}
if(isset($_SESSION['user_pass_random'])) {unset($_SESSION['user_pass_random']);} $_SESSION['user_pass_random'] = generateRandomPasswd();
if(isset($_SESSION['user_pass_random_hash'])) {unset($_SESSION['user_pass_random_hash']);} $_SESSION['user_pass_random_hash'] = $this->code_passwd($_SESSION['user_pass_random']);
$query = "
UPDATE users
SET
user_pass_tmp = '".$this->code_passwd($_SESSION['user_pass_random'])."'
WHERE user_id = '{$user_id}'
";
$result = $this->sql->query($query);
if($result === false) {
$errors[] = "Wystąpił błąd z bazą danych.";
return $errors;
}
}
} else {
return $errors;
}
}
index.php
case 'forgetten':
echo "<p>Wygeneruj nowe hasło</p>"; echo "<form action=\"index.php?action=forgetten_submit\" method=\"post\">"; echo "<input type=\"text\" placeholder=\"Login\" name=\"user_login\">"; echo "<input type=\"email\" placeholder=\"email\" name=\"user_email\">"; echo "<input type=\"submit\" value=\"Generuj\">"; break;
case 'forgetten_submit':
foreach ($_POST as $key => $value) {
$value = $sql->clear($value);
echo $key . " : " . $value."</p>"; }
// $users->forgetten($_POST);
$result = $users->forgetten($_POST);
if($result === true) {
$email_headers = "Reply-to: ".PHP_EOL;
$email_headers .= "From: ".PHP_EOL;
$email_headers .= "MIME-Version: 1.0".PHP_EOL;
$email_headers .= "Content-type: text/html; charset=UTF-8".PHP_EOL;
$email_message = '
Dostajesz tego maila ponieważ Ty albo osoba podająca się za Ciebie<br />
zarządała wygenerowania nowego hasła do serwisu [url="[/url] /><br />
Jeśli to Ty zarządałeś zmiany hasła kliknij proszę w link poniżej<br />
' . $link . '
W przeciwnym wypadku zgłoś proszę ten fakt do administartora<br />
';
if(mail($_POST['user_email'], 'Temat', $email_message, $email_headers)) {
echo 'Wiadomość została wysłana'; }
} else {
}
}
break;