WebImpressionen
Profil
Für das Profil wird ein Formular benötigt.
Auch hier wird mit pattern und preq_match ein User zu einem recht sicherem Passwort gezwungen.
das formular
  • <! DOCTYPE html>
  • <html lang = " de "> <head>
  • <meta charset = " UTF-8 ">
  • <meta name = " viewport " content = " width = device-width , initial-scale = 1 . 0 ">
  • <title> Profil </title>
  • <meta name = " dcterms.rights " content = " locomputing ">
  • <meta name = " description " content = " Beschreibung der Website ">
  • <meta name = " keywords " content = " Keywords ">
  • <link rel = " stylesheet " href = " https : / / locomputing . de / mustercss / formular_style . css ">

  • </head>
  • <body>

  • <h4> User-Profil </h4>
  • <p> Wenn hier was geändert wird,
    muss es mit dem Benutzer Passwort bestätigt werden! </p>

  • <fieldset>
  1. <form method = "post">

  2. <div class = "form-face">
  3. <label for = "email"> eMail: <span> * </span> </label>
  4. <span class = "fehler"> <?php echo $mail_err ; ?> </span>
  5. <input pattern = " ^ [ a - z ] { 2 , } [ \ w . + - ] { 0 , } @ [ a - z 0 - 9 - ] { 2 , 30 } ( [ . ] [ a - z ] { 2 , 3 } ) $ " required = "required" placeholder = " eMail-Adresse " title = " eMail-Adresse eintragen " type = "email" id = "email" name = "email" maxlength = "78" class = "form-control" value = " <?php echo $Umail;?> ">
  6. </div>

  7. <div class = "form-face">
  8. <label for = "passwort"> Benutzer-Passwort: <span> * </span> </label>
  9. <span class = "fehler"> <?php echo $pass_err ; ?></span>
  10. <input pattern = " . { 8 , 40 } " required = "required" placeholder = " Benutzer-Passwort " title = " Benutzer-Passwort eintragen " type = "password" id = "passwort" name = "pass" maxlength = "42" class = "form-control">
  11. </div>

  12. <p> Neues Passwort bei Bedarf </p>

  13. <div class = "form-face">
  14. <label for = "passwort"> Neues Passwort: </label>
  15. <span class = "fehler"> <?php echo $new_password_err ; ?></span>
  16. <input pattern = " ( ? = . * \ d ) ( ? = . * [ a - z ] ) ( ? = . * [ A - Z ] ) . { 12 , 40 } " placeholder = " Neues Passwort " title = " minimum je 1mal Groß, Klein-Buchstabe, Ziffer und Sonderzeichen sind Pflicht! " type = "password" id = "passwort" name = "new_password" maxlength = "42" class = "form-controlle">
  17. </div>

  18. <div class = "form-face">
  19. <label for = "passwort"> Passwort wiederholen: </label>
  20. <span class = "fehler"> <?php echo $confirm_password_err ; ?></span>
  21. <input pattern = " . { 8 , 40 } " placeholder = " Passwort wiederholen " type = "password" id = "passwort" name = "confirm_password" maxlength = "42" class = "form-controlle">
  22. </div>

  23. <div class = "form-face">
  24. <label> <span> * </span> Felder sind Pflicht! </label>
  25. <input type = "submit" class = "butt button-red" name = "profil" value = "Editieren">
  26. <a href = "welcome.php" class = "butt button-blue"> Zurück </a>
  27. </div>

  28. </form>
  • </fieldset>

  • </body>
  • </html>
die profil.php
<?php
  • // Datenbank verbindung einfügen
    if ( file_exists ( ' db_conect.php ' ) = = true ) { require ( ' db_conect.php ' ) ; }

    • // Sitzung starten
  1. session_start ( ) ;

    • // Prüfen ob User eingeloggt ist oder nicht
  2. if ( ! isset ( $_SESSION [ " loggedin " ] ) | | $_SESSION [ " loggedin " ] ! = = true )
  3. {
  4. header ( "Location : login.php " ) ; exit ;
  5. }

    • // Variablen definieren und auf leere Werte setzen
  6. $new_password = $confirm_password = $username = $pass = $mails = $Umail =" " ;
  7. $new_password_err = $confirm_password_err = $pass_err = $mail_err = " " ;

    • // Formulardaten werden verarbeitet, wenn das Formular gesendet wird
  8. if ( isset ( $_POST [ ' profil ' ] ) & & $_POST [ ' profil ' ] = = 'Editieren' )
  9. {

    • // POST für Benutzer-Passwort prüfen
  10. $postpass = isset ( $_POST [ ' pass ' ] ) ? $_POST [ ' pass ' ] : " " ;
  11. if ( empty ( $postpass ) )
  12. {
  13. $pass_err = ' Feld Passwort ist leer ! ' ;
  14. }
  15. else
  16. {
  17. $passwort = htmlspecialchars ( $postpass ) ;
  18. if ( $passwort = = = false )
  19. {
  20. $pass_err = ' Dies ist kein Passwort ! ' ;
  21. }
  22. }

    • // POST für eMail prüfen
  23. $postmail = isset ( $_POST [ ' email ' ] ) ? $_POST [ ' email ' ] : " " ;
  24. if ( empty ( $postmail ) )
  25. {
  26. $mail_err = ' Feld eMail ist leer ! ' ;
  27. }
  28. elseif ( ( strlen ( trim ( $postmail ) ) < 8 ) | | ( strlen ( trim ( $postmail ) ) ) > 75)
  29. {
  30. $mail_err = ' eMail minimal 8 maximal 75 Zeichen ! ' ;
  31. }
  32. else
  33. {
  34. $email = filter_var ( trim ( $postmail ) , FILTER_VALIDATE_EMAIL ) ;
  35. if ( ! preg_match ( " / ^ ( [ a - z 0 - 9 \ + _ \ - ] + ) * @ ( [ a - z 0 - 9 \ - ] { 2 , 30 } + \ . ) + [ a - z ] { 2 , 3 } $ / i x " , $email ) )
  36. {
  37. $mail_err = ' Keine erlaubte eMail-Adresse ! ' ;
  38. }
  39. if ( $email = = = false )
  40. {
  41. $mail_err = ' Dies ist keine eMail-Adresse ! ' ;
  42. }




    • // Prüfen ob eMail schon vorhanden ist
  43. $sql = " SELECT usermail FROM usertable WHERE usermail = ? " ;
  44. if ( $stmt = $sqli -> prepare ( $sql ) )
  45. {
  46. $stmt -> bind_param( " s " , $param_usermail ) ;
  47. $param_usermail = $email ;
  48. if ( $stmt -> execute ( ) )
  49. {
  50. $stmt -> store_result ( ) ;
  51. if ( $stmt -> num_rows = = 1 )
  52. {
  53. $mail_err = ' Diese eMail-Adresse ist nicht erlaubt ! ' ;
  54. }
  55. else
  56. {
  57. $mail = $email ;
  58. }
  59. }
  60. }
  61. }
    • // Prüfen ob eMail schon vorhanden ist
  62. $sql = " SELECT usermail FROM usertable WHERE usermail = ? " ;
  63. if ( $stmt = $pdo -> prepare ( $sql ) )
  64. {
  65. $param_usermail = $email ;
  66. if ( $stmt -> execute ( array ( $param_usermail ) ) )
  67. {
  68. if ( $stmt -> rowCount ( ) = = 1 )
  69. {
  70. $mail_err = ' Diese eMail-Adresse ist nicht erlaubt ! ' ;
  71. }
  72. else
  73. {
  74. $mail = $email ;
  75. }
  76. }
  77. }
  78. }

    • // POST für neues passwort prüfen
  79. $newpaswortz = isset ( $_POST [ ' new_password ' ] ) ? $_POST [ ' new_password ' ] : " " ;
  80. if ( ! empty ( $newpaswortz ) )
  81. if ( ( strlen ( trim ( $newpaswortz ) ) < 12 ) || ( strlen ( trim ( $newpaswortz ) ) ) > 40 )
  82. {
  83. $new_password_err = ' Passwort zu kurz ! ' ;
  84. }
  85. else
  86. {
  87. $newpassa = isset ( $newpaswortz ) ? $newpaswortz : " " ;
  88. $new_password = $sqli -> real_escape_string ( $newpassa ) ;
  89. }
  90. if ( ! preg_match ( " / [ ^ a - z A - Z 0 - 9 ] / " , $new_password ) )
  91. {
  92. $new_password_err = ' Das ist kein Passwort ! ' ;
  93. }

    • // POST für neues passwort wiederholen prüfen
  94. $connectfpassa = isset ( $_POST [ ' confirm_password ' ] ) ? $_POST [ ' confirm_password ' ] : " " ;
  95. if ( ! empty ( $connectfpassa ) )
  96. {
  97. $connectfpasse = isset ( $connectfpassa ) ? $connectfpassa : " " ;
  98. $confirm_password = $sqli -> real_escape_string ( $connectfpasse ) ;
  99. }
    • // Passwörter auf übereinstimmung prüfen
  100. if ( empty ( $new_password_err ) & & ( $new_password ! = $confirm_password ) )
  101. {
  102. $confirm_password_err = ' Passwörter stimmen nicht überein ! ' ;
  103. }



    • // Keine Fehler Formulareingaben ausführen
  104. if ( empty ( $username_err ) & & empty ( $pass_err ) & & empty ( $email_err ) & & empty ( $new_password_err ) & & empty ( $confirm_password_err ) )
  105. {
  106. $sql = " SELECT id , userpass , usermail FROM usertable WHERE username = ? and active = ? and block = ? " ;
  107. if ( $stmt = $sqli -> prepare ( $sql ) )
  108. {
  109. $stmt -> bind_param ( " s i i " , $param_username , $param_aktiv , $param_blok ) ;
  110. $param_username = $_SESSION [ " username " ] ;
  111. $param_aktiv = 1 ;
  112. $param_blok = 0 ;
  113. if ( $stmt -> execute ( ) )
  114. {
  115. $stmt -> store_result ( ) ;
  116. if ( $stmt -> num_rows = = 1 )
  117. {
  118. $stmt -> bind_result ( $id , $hashed_password , $mails ) ;
  119. if ( $stmt -> fetch ( ) )
  120. {
  121. if ( password_verify ( $passwort , $hashed_password ) )
  122. {
  123. if ( ( empty ( $confirm_password ) ) & & empty ( $new_password ) )
  124. {
  125. $sql = " UPDATE usertable SET usermail = ? WHERE id = ? " ;
  126. if ( $stmt = $sqli -> prepare ( $sql ) )
  127. {
  128. $stmt -> bind_param ( " s i " , $param_mail , $param_id ) ;
  129. $param_id = $sqli -> real_escape_string ( IntVal ( $id ) ) ;
  130. $param_mail = $sqli -> real_escape_string ( $mail ) ;
  131. $stmt -> execute ( ) ;
  132. }
  133. }
  134. else
  135. {
  136. $sql = " UPDATE usertable SET usermail = ? , userpass = ? WHERE id = ? " ;
  137. if ( $stmt = $sqli -> prepare ( $sql ) )
  138. {
  139. $stmt -> bind_param ( " s s i " , $param_mail , $param_password , $param_id ) ;
  140. $pass = trim ( $new_password ) ;
  141. $set_password = password_hash ( $pass , PASSWORD_DEFAULT ) ;
  142. $param_password = $sqli -> real_escape_string ( $set_password ) ;
  143. $param_id = $sqli -> real_escape_string ( IntVal ( $id ) ) ;
  144. $param_mail = $sqli -> real_escape_string ( $mail ) ;
  145. if($stmt -> execute ( ) )
  146. {
  147. session_unset ( ) ; session_destroy ( ) ;
  148. header ( " Location : login.php " ) ;
  149. }
  150. }
  151. }
  152. }
  153. else
  154. {
  155. $pass_err = ' Passwort nicht korrekt ! ';
  156. }
  157. }
  158. }
  159. }
  160. else
  161. {
  162. echo' ERROR Da stimmt was nicht ! ';
  163. }
  164. }
  165. }
  166. }

    • // eMail für Formular auslesen
  167. $sql = " SELECT usermail FROM usertable WHERE username = ? and active = ? " ;
  168. if ( $stmt = $connect -> prepare ( $sql ) )
  169. {
  170. $param_aktiv = 1 ;
  171. $param_blok = 0 ;
  172. $stmt -> bind_param ( " s i i " , $_SESSION [ " username " ] , $param_aktiv , $param_blok ) ;
  173. if ( $stmt -> execute ( ) )
  174. {
  175. $stmt -> store_result ( ) ;
  176. if ( $stmt -> num_rows = = 1 )
  177. {
  178. $stmt -> bind_result ( $Umail ) ;
  179. $stmt -> fetch ( ) ;
  180. }
  181. }
  182. }

    • // Keine Fehler Formulareingaben ausführen
  183. if ( empty ( $username_err ) & & empty ( $pass_err ) & & empty ( $email_err ) & & empty ( $new_password_err ) & & empty ( $confirm_password_err ) )
  184. {
  185. $sql = " SELECT id , userpass , usermail FROM usertable WHERE username = ? and active = ? and block = ? " ;
  186. if ( $stmt = $pdo -> prepare ( $sql ) )
  187. {
  188. $param_username = $_SESSION [ " username " ] ;
  189. $param_aktiv = 1 ;
  190. $param_blok = 0 ;
  191. if ( $stmt -> execute ( array ( $param_username , $param_aktiv , $param_blok ) ) )
  192. {
  193. if ( $stmt -> rowCount() = = 1 )
  194. {
  195. if ( $rows = $stmt -> fetch ( PDO : : FETCH_ASSOC ) )
  196. {
  197. $id = $rows [ " id " ] ;
  198. $hashed_password = $rows [ " userpass " ] ;
  199. $mails = $rows [ " usermail " ] ;
  200. if ( password_verify ( $passwort , $hashed_password ) )
  201. {
  202. if ( ( empty ( $confirm_password ) ) & & empty ( $new_password ) )
  203. {
  204. $sql = " UPDATE usertable SET usermail = ? WHERE id = ? " ;
  205. if ( $stmt = $pdo -> prepare ( $sql ) )
  206. {
  207. $param_id = IntVal ( $id ) ;
  208. $param_mail = trim ( $mail ) ;
  209. $stmt -> execute ( array ( $param_mail , $param_id ) ) ;
  210. }
  211. }
  212. else
  213. {
  214. $sql = " UPDATE usertable SET usermail = ? , userpass = ? WHERE id = ? " ;
  215. if ( $stmt = $pdo -> prepare ( $sql ) )
  216. {
  217. $pass = trim ( $new_password ) ;
  218. $set_password = password_hash ( $pass , PASSWORD_DEFAULT ) ;
  219. $param_password = trim ( $set_password ) ;
  220. $param_id = IntVal ( $id ) ;
  221. $param_mail = trim ( $mail ) ;
  222. if($stmt -> execute ( array ( $param_mail , $param_password , $param_id ) ) )
  223. {
  224. session_unset ( ) ; session_destroy ( ) ;
  225. header ( " Location : login.php " ) ;
  226. }
  227. }
  228. }
  229. }
  230. else
  231. {
  232. $pass_err = ' Passwort nicht korrekt ! ';
  233. }
  234. }
  235. }
  236. }
  237. else
  238. {
  239. echo' ERROR Da stimmt was nicht ! ';
  240. }
  241. }
  242. }
  243. }

    • // eMail für Formular auslesen
  244. $sql = " SELECT usermail FROM usertable WHERE username = ? and active = ? " ;
  245. if ( $stmt = $pdo -> prepare ( $sql ) )
  246. {
  247. $active = 1 ;
  248. if ( $stmt -> execute ( array ( $_SESSION [ " username " ] , $active ) ) )
  249. {
  250. if ( $stmt -> rowCount ( ) = = 1 )
  251. {
  252. if ( $rows = $stmt -> fetch ( PDO : : FETCH_ASSOC ) )
  253. {
  254. $Umail = $rows [ " usermail " ] ;
  255. }
  256. }
  257. }
  258. }
  259. ?>

    Hier wird das formular eingefügt.