Alternativen zu session_start() ?

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

  • Alternativen zu session_start() ?

    hi,

    ich programmiere zuzeit einen Login bereich.
    Jetzt habe ich das problem das ich alles in Php 5 Klassen mache und nachdem überprüft wurde ob es den User in der Datenbank gibt soll ein Cookie gesetzt werden.
    Nun taucht aber wiedermal das problem das der header ja schon voher gesendet wurde.
    Jetzt wollte ich mal fragen ob es noch eine andere Alternative gibt oder ob jemand eine idee hat wie ich das trozdem so realisiern kann?

    Hier mal der Code:
    (Ab der function check_login_formwirds für euch wohl erst interessant :) )

    Quellcode

    1. <?php
    2. require_once "config.php";
    3. require_once "functions.php";
    4. class show_login_form extends mainBase {
    5. //Loginformular und alle Sicherheits abfragen
    6. public function show_login_form() {
    7. if(isset($_GET['reg']) && $_GET['reg'] == 1) {
    8. $this->register_it();
    9. } else {
    10. if((isset($_POST['user']) && $_POST['user'] != '') && (isset($_POST['password']) && $_POST['password'] != '')) {
    11. $this->check_login_form();
    12. } else {
    13. echo '
    14. <div class="login_inner">
    15. <form action="" method="POST">
    16. <h2>Login:</h2>
    17. <p>E-Mail:</p>
    18. <input type="text" name="user" class="user" />
    19. <p>Passwort:</p>
    20. <input type="password" name="password" class="password" />
    21. <input type="submit" value="Login" />
    22. <form>
    23. <p><a href="doc.php?reg=1">Registrieren</a></p>
    24. </div>';
    25. }
    26. }
    27. }
    28. // Registrierungsformular
    29. private function register_it() {
    30. if(isset($_POST['hidden'])) {
    31. $this->db_connection();
    32. $this->register_dbinsert();
    33. } else {
    34. echo '
    35. <div class="register_inner">
    36. <form action="" method="POST">
    37. <h2>Registrieren:</h2>
    38. <input type="hidden" name="hidden" value="1" />
    39. <p>Vorname:</p>
    40. <input type="text" name="firstname" class="firstname" />
    41. <p>Nachname:</p>
    42. <input type="text" name="lastname" class="lastname" />
    43. <p>E-mail:</p>
    44. <input type="text" name="email" class="email" />
    45. <p>Passwort:</p>
    46. <input type="password" name="password_reg" class="password_reg" />
    47. <p>Passwort wiederholen:
    48. <input type="password" name="password_wh" class="password_wh" />
    49. <input type="submit" value="Registrieren" />
    50. </form>
    51. </div>';
    52. }
    53. }
    54. private function register_dbinsert() {
    55. if(!empty($_POST['firstname'])) {
    56. if(!empty($_POST['lastname'])) {
    57. if(!empty($_POST['email'])) {
    58. if(!empty($_POST['password_reg']) && !empty($_POST['password_wh'])) {
    59. $this->db_connection();
    60. $firstname = trim($_POST['firstname']);
    61. $lastname = trim($_POST['lastname']);
    62. $email = trim($_POST['email']);
    63. $password = trim(md5($_POST['password_reg']));
    64. $test = $this->user_register_find($firstname, $lastname, $email);
    65. if($test == true) {
    66. $sql = "INSERT INTO ".TBL_USER." (firstname, lastname, mail_addr, password) VALUES ('$firstname', '$lastname', '$email', '$password')";
    67. mysql_query($sql);
    68. $this->show_login_form();
    69. } else {
    70. echo 'Fehler! Diesen User gibt es schon in der Datenbank!';
    71. }
    72. } else {
    73. echo 'Password wurde vergessen';
    74. }
    75. } else {
    76. echo 'Es wurde keine E-Mail Adresse eingegeben!';
    77. }
    78. } else {
    79. echo 'Es wurde kein Nachname eingegeben!';
    80. }
    81. } else {
    82. echo 'Es wurde kein Vorname eingegeben!';
    83. }
    84. }
    85. //Login überprüfung
    86. private function check_login_form() {
    87. $this->db_connection();
    88. $user = trim($_POST['user']);
    89. $password = trim(md5($_POST['password']));
    90. $sql = "SELECT * FROM ".TBL_USER." WHERE mail_addr='$user' AND password='$password'";
    91. $result = mysql_query($sql);
    92. $search_result = mysql_num_rows($result);
    93. if($search_result==1) {
    94. $daten = mysql_fetch_row($result);
    95. session_start();
    96. $_SESSION['id'] = $daten['0'];
    97. $_SESSION['firstname'] = $daten['1'];
    98. $_SESSION['lastname'] = $daten['2'];
    99. $_SESSION['email'] = $daten['3'];
    100. echo $_SESSION['firstname'];
    101. } else {
    102. echo 'Fehler! Mail oder Passwort falsch!';
    103. }
    104. }
    105. private function show_user_login() {
    106. }
    107. }
    108. $obj = new show_login_form;
    109. ?>
    Alles anzeigen
  • Es ist schlichtweg falsch programmiert, wenn du erst die normale Ausgabe schickst und danach die Session Headers.

    Man sollte echos in Klassen vermeiden. In einem ganzen Projekte (wie z.B. easy-coding) sollte es nur ein einziges echo geben.
    Und das ist der Controller, der das Template rendert.

    Du solltest dir mal das Model/View/Controller Pattern anschauen.
    Wie man schöne Models macht, ist in unserem Wiki erläutert [wiki]Objektorientierung mit Models[/wiki]