Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] True/false
topcio
post
Post #1





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


Cześć
Mam pytanko, w jaki najprostszy sposób sprawdzić czy funkcja wykonała się cała popranie

User.class.php
  1. public function forgetten($data) {
  2. $errors = [];
  3. if($data['user_login'] == '') {
  4. $errors[] = 'Musisz podać login.';
  5. }
  6. if($data['user_email'] == '') {
  7. $errors[] = 'Musisz podać adres e-mail.';
  8. }
  9. if(!empty($data['user_email'])) {
  10. if(filter_var($data['user_email'], FILTER_VALIDATE_EMAIL) === false) {
  11. $errors[] = 'Podany adres email jest nieprawidłowy.';
  12. }
  13. }
  14. if(count($errors) == 0) {
  15. $this->sql->query("SET NAMES utf8");
  16. $result = $this->sql->query("SELECT user_id FROM users WHERE user_login = '{$data['user_login']}' AND user_email = '{$data['user_email']}' LIMIT 1");
  17.  
  18. if($result->num_rows > 0) {
  19. $value = mysqli_fetch_object($result);
  20. $user_id = $value->user_id;
  21. $data = $this->get_data($user_id);
  22.  
  23. // TEST //
  24.  
  25. foreach($data as $key => $value) {
  26. echo "<p>".$key." = ".$value."</p>";
  27. }
  28.  
  29. // TEST //
  30.  
  31. function generateRandomPasswd($length = 12) {
  32. $user_pass_random_characters = '[]{}/?!@#$%&()0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  33. $charactersLength = strlen($user_pass_random_characters);
  34. $user_pass_random = '';
  35. for ($i = 0; $i < $length; $i++) {
  36. $user_pass_random .= $user_pass_random_characters[rand(0, $charactersLength - 1)];
  37. }
  38. return $user_pass_random;
  39. }
  40.  
  41. if(isset($_SESSION['user_pass_random'])) {unset($_SESSION['user_pass_random']);}
  42. $_SESSION['user_pass_random'] = generateRandomPasswd();
  43. // echo $_SESSION['user_pass_random'] . "<br />";
  44. if(isset($_SESSION['user_pass_random_hash'])) {unset($_SESSION['user_pass_random_hash']);}
  45. $_SESSION['user_pass_random_hash'] = $this->code_passwd($_SESSION['user_pass_random']);
  46. // echo $_SESSION['user_pass_random_hash'] . "<br />";
  47. } else {
  48. echo "Niezgodność loginu, e-mail lub odpowiedzi na pytanie pomocnicze.";
  49. }
  50. $query = "
  51. UPDATE users
  52. SET
  53. user_pass_tmp = '".$this->code_passwd($_SESSION['user_pass_random'])."',
  54. user_pass = ''
  55. WHERE user_id = '{$user_id}'
  56. ";
  57. if($this->sql->query($query)) {
  58. return true;
  59. } else {
  60. return ['Wystąpił błąd z bazą danych.'];
  61. }
  62. } else {
  63. return $errors;
  64. }
  65.  
  66. }
  67.  


index.php
  1. case 'forgetten':
  2. echo "<p>Wygeneruj nowe hasło</p>";
  3. echo "<form action=\"index.php?action=forgetten_submit\" method=\"post\">";
  4. echo "<input type=\"text\" placeholder=\"Login\" name=\"user_login\">";
  5. echo "<input type=\"email\" placeholder=\"email\" name=\"user_email\">";
  6. echo "<input type=\"submit\" value=\"Generuj\">";
  7. echo "</form>";
  8.  
  9.  
  10.  
  11. break;
  12.  
  13.  
  14.  
  15. case 'forgetten_submit':
  16. if(!empty($_POST)) {
  17. foreach ($_POST as $key => $value) {
  18. $value = $sql->clear($value);
  19. echo $key . " : " . $value."</p>";
  20. }
  21. echo "<br />";
  22. $users->forgetten($_POST);
  23. }
  24. break;


Mam coś takiego i chciałbym aby jeśli funkcja jest TRUE zrobiła coś (np wysłała maila), a jeśli Jest FALSE wypisała info

Dzięki wielkie za pomoc

Ten post edytował topcio 26.04.2017, 16:59:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
topcio
post
Post #2





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 14.01.2017

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


Cytat(Pyton_000 @ 27.04.2017, 10:03:27 ) *
Po co tutaj:
  1. if(!empty($data['user_email']) && !empty($data['user_login'])) {
  2. $result = $this->sql->query("SELECT user_id FROM users WHERE user_login = '{$data['user_login']}' LIMIT 1");
  3. if($result->num_rows == 0) {
  4. $errors[] = "Nie istnieje login";
  5. return $errors;
  6. }
  7. $result = $this->sql->query("SELECT user_id FROM users WHERE user_email = '{$data['user_email']}' LIMIT 1");
  8. if($result->num_rows == 0) {
  9. $errors[] = "Nie istnieje email";
  10. return $errors;
  11. }
  12. $result = $this->sql->query("SELECT user_id FROM users WHERE user_email = '{$data['user_email']}' AND user_login = '{$data['user_login']}' LIMIT 1");
  13. if($result->num_rows == 0) {
  14. $errors[] = "Niezgodność login i email";
  15. return $errors;
  16. }
  17. }


aż 3 warunki? Zostaw tylko ostatni i napisz jakiś bardziej generyczny komunikat typu "Podane dane są nieprawidłowe".


Miałem tak na początku jednak chciałem aby końcowy użytkownik wiedział co jest nie tak.
Ale Twoja sugestia jest dobra, bo analizując po co ktoś ma sprawdzać aż w końcu trafi na login, który istnieje w bazie.
Jest do przeanalizowania ten kawałek kodu. - Muszę to przemyśleć.


Cytat(topcio @ 27.04.2017, 10:01:56 ) *
Jak zamiast UTF-8 wpisałem ISO-8859-2 to dostaje maila z krzaczkami, dlatego zmieniłem na UTF-8
cały dokument mam w UTF-8
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


Jak pisałem jestem świeży w temacie, coś umiem ale nie wiele, bindowania nigdy nie próbowałem stosować, ale postaram się spreparować kod do tej postaci.
Uczę się sam, troszkę z tutorali, ale więcej z tego forum i na własnych błędach.


Czy bindowanie można robić tylko wykorzystując PDO?
Go to the top of the page
+Quote Post

Posty w temacie


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: 28.12.2025 - 20:35