Verflixtest Porblem mit verschachtelten if abfragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verflixtest Porblem mit verschachtelten if abfragen

    Hallo,

    Da unser eigentliche Coder immoment keine Zeit hat habe ich mich dran versucht.
    Gibt man Username und Passwort korrekt an leitet er ohne Probleme weiter. Lässt man aber das PW frei so sagt er Passwort falsch obwohl er dort garnicht mehr nach Passwort prüfen soll.

    Das Script hat mehrere if abfragen die alles Prüfen sollen.
    Passwort übergeben, wen nicht prüfen ob name in der db, wen nja fehlermeldung wenn nein session setzen
    passwort und name übergeben prüfen auf richtigkeit etc
    Erklärungen kann man den Kommentaren entnehmen.

    Wenn kein Passwort angebenen ist sollte er den else teil in zeile 46 nutzen und nicht den in zeile 41?

    Ich kann mir vorstellen das dort einiges nicht stimmt und hoffe ihr weist mir den richtigen Weg ;)

    Quellcode

    1. // Prüfen ob eingeloggt
    2. if ( $User->login_status() == true )
    3. {
    4. // Login OK, Weiterleite an Chat
    5. $_SESSION['user_nickname'] = $User->get_user_value('user_nickname');
    6. $_SESSION['user_id'] = $User->get_user_value('user_id');
    7. $Core->redirect("index.php?mode=chat");
    8. }
    9. else
    10. {
    11. // Loginvorgang wird ausgeführt
    12. if ( $Core->get(POST, 'login_send', true) )
    13. {
    14. $username = $User->clean_username($Core->get(POST, 'username'));
    15. $password = trim(htmlspecialchars($Core->get(POST, 'password')));
    16. // Userdaten aus der Datenbank laden
    17. $DB->set_sql('SELECT * FROM ' . USERS . ' WHERE `user_nickname`=:1');
    18. $DB->execute($username);
    19. $user_row = $DB->fetch_assoc();
    20. $DB->free();
    21. // Passwort übergeben?
    22. if (empty($password))
    23. {
    24. $pass_crypt = $User->password_hash($password . $user_row['user_salt'], ($user_row['user_old_pw'] == 1)? true : false);
    25. // Userdaten aus der Datenbank laden
    26. $DB->set_sql('SELECT * FROM ' . USERS . ' WHERE `user_nickname`=:1 AND user_password =:2');
    27. $DB->execute($username,$pass_crypt);
    28. $row = $DB->fetch_assoc();
    29. $DB->free();
    30. // Stimmen die Daten, weiterleiten an Chat
    31. if($row !== false)
    32. {
    33. // Login OK, Weiterleite an Chat
    34. $_SESSION['user_nickname'] = $row['user_nickname'];
    35. $_SESSION['user_id'] = $row['user_id'];
    36. $Core->redirect("index.php?mode=chat");
    37. }
    38. else
    39. {
    40. // Passwort Falsch
    41. echo 'Falsches PW';
    42. }
    43. }
    44. else
    45. {
    46. // else Teil der Passwort übergabe
    47. // Wenn kein Passwort übergeben wurde hier prüfen
    48. // Ob nickname bereits in der DB
    49. if(!$user_row !== false)
    50. {
    51. echo 'Nickname belegt';
    52. }
    53. else
    54. {
    55. // Nickname nicht in der DB dann weiterleiten
    56. $_SESSION['user_nickname'] = $Core->get(POST, 'username');
    57. $_SESSION['user_id'] = 1;
    58. $Core->redirect("index.php?mode=chat");
    59. }
    60. }
    61. }
    62. else
    63. {
    64. $Smarty->assign(array(
    65. 'LANG' => $lang,
    66. 'SITENAME' => $Core->get_config('page_title') . ' • ' . $lang['LOGIN'],
    67. ));
    68. $this->display('chat_login.htm');
    69. }
    70. }
    Alles anzeigen
  • Fragz schrieb:

    Weil es mit !$user_row == false ja auch klappte von daher sollte dies ja eigentlich egal sein ob !$user_row == false oder nur $user_row oder wird dort auch unterschieden? Beide IF Abfragen erziehlen ja das gleiche Ergebniss

    Natürlich funktioniert das so auch, aber die Grundlagen der Logik geben vor, dass du deine Aussagen einfach halten sollst, damit diese leicht zu verstehen sind. Man sagt ja auch nicht zwei mal nicht in einem Satz :)

    Es ist für andere und auch für dich selber viel besser, wenn du deine logischen Aussagen so aufstellst, dass man diese auf anhieb verstehen kann. Dann findet man einen eventuellen Fehler auch viel schneller :)