Register Script Verbesserungsvorschläge

03/27/2016 15:52 Body@Developer#1
Hallo,


ich suche Verbesserungsvorschläge / Vorschläge was man besser / sicherer machen könnte bei mein Script & was ich lieber nicht rein sollte.


PHP Code:
<?php
require_once 'dbconfig.php';
include 
'sec/verbindung.inc.php';
if(
$user->is_loggedin()) {
    
$user->redirect('home.php');
}


?>

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
<style>
@-ms-viewport{ width=device-width; }
</style>
<link rel="stylesheet" href="css/style_reg.css" type="text/css">
<link rel="stylesheet" href="css/normalize.css" type="text/css">
<title>Registration</title>
</head>
<body>
<header role="banner" class="main-header">
    <h1 class="main-title"> Homepage </h1>
    
    <nav class="social-nav">
    <ul class="social-media">
    <li><a href="#" target="_blank" class="genericon genericon-twitter"></a></li>
    <li><a href="#" target="_blank" class="genericon genericon-facebook-alt"></a></li>
    <li><a href="#" target="_blank" class="genericon genericon-googleplus"></a></li>
    </ul>
    </nav>
    
    <p class="search-tag"><input type="search" placeholder="suche"></p>
</header>

<main role="main">

    <nav role="navigation" class="navigation">
    <ul class="nav">
    <li><a href="startseite">Home</a></li>
    <li><a href="#">News</a></li>
    <li><a href="register">Registrieren</a></li>
    <li><a href="information.php">Information</a></li>
    <li><a href="login">Login</a></li>
    </ul>
    </nav>
    
            <?php
        
if(isset($_POST['senden']) && strtolower($_POST['senden'])) {
            
                
$email $_POST['email'];
                
$password $_POST['password'];
                
$vorname $_POST['vorname'];
                
$nachname $_POST['nachname'];

                
$error '';

                function 
check($DB_con$email) {
                
$stmt $DB_con->prepare("SELECT email FROM w_user_data WHERE email = ?");
                
$stmt->BindParam(1$email);
                
$stmt->execute();

                if(
$stmt->rowCount() > 0) {
                    return 
true;
                } else {
                    return 
false;
                }
            }

                if(
check($DB_con$email) === true) {
                
$error 'Die Email Adresse existierts bereits. Bitte verwenden Sie eine neue oder andere Email Adresse.';
                }
                elseif(empty(
trim($email)) && empty(trim($_POST['atmail-g']))) {
                
$error 'Es ist ein Problem aufgetreten. Das Feld der Email darf nicht leer sein. ';
                }
                elseif(
$email !== $_POST['atmail-g']) {
                
$error 'Die angegebenen Email Adressen sind nicht korrekt. Bitte überprüfen Sie ihre Angaben.';
                }
                elseif(
strlen($email) < 7) {
                
$error 'Es ist ein Problem aufgetreten. Die Email darf nicht k�rzer als 7 Zeichen sein. ';
                }
                elseif(
strlen($email) > 35) {
                
$error 'Es ist ein Problem aufgetreten. Die Email darf nicht l�nger als 35 Zeichen sein. ';
                }
                elseif(!
filter_var($emailFILTER_VALIDATE_EMAIL)) {
                
$error 'Es ist ein Problem aufgetreten. Die Email Adresse muss richtig angebeben werden und ein <b>@</b> enthalten. ';
                }
                elseif(empty(
trim($password))) {
                
$error 'Es ist ein Problem aufgetreten. Das Feld des Passwort darf nicht leer sein. ';
                }
                elseif(
$password !== $_POST['psw-g']) {
                
$error 'Das angegebenene Password ist nicht gleich.';
                }
                elseif(
strlen($password) < 7) {
                
$error 'Es ist ein Problem aufgetreten. Das Passwort darf nicht k�rzer als 7 Zeichen sein. ';
                }
                elseif(
strlen($password) > 35) {
                
$error 'Es ist ein Problem aufgetreten. Das Passwort darf nicht l�nger als 35 Zeichen sein. ';
                }
                elseif(empty(
trim($vorname))) {
                
$error 'Es ist ein Problem aufgetreten. Das Feld des Vorname darf nicht leer sein. ';
                }
                elseif(
strlen($vorname) < 3) {
                
$error 'Es ist ein Problem aufgetreten. Der Vorname darf nicht k�rzer als 3 Zeichen sein. ';
                }
                elseif(
strlen($vorname) > 35) {
                
$error 'Es ist ein Problem aufgetreten. Der Vorname darf nicht l�nger als 35 Zeichen sein. ';
                }
                elseif(!
filter_var($vornameFILTER_SANITIZE_STRING)) {
                
$error 'Es ist ein Problem aufgetreten. Der Vorname darf nur Buchstaben enthalten. Keine Ziffern oder sonstige Zeichen. ';
                }
                elseif(empty(
trim($nachname))) {
                
$error 'Es ist ein Problem aufgetreten. Das Feld des Nachname darf nicht leer sein. ';
                }
                elseif(
strlen($nachname) < 3) {
                
$error 'Es ist ein Problem aufgetreten. Der Nachname darf nicht kürzer als 3 Zeichen sein. ';
                }
                elseif(
strlen($nachname) > 25) {
                
$error 'Es ist ein Problem aufgetreten. Der Nachname darf nicht kürzer als 25 Zeichen sein. ';
                }
                elseif(!
filter_var($nachnameFILTER_SANITIZE_STRING)) {
                
$error 'Es ist ein Problem aufgetreten. Der Nachname darf nur Buchstaben enthalten. Keine Ziffern oder sonstige Zeichen. ';
                }
                
                
                
$option = [
                    
'cost' => 11,
                    
'salt' => mcrypt_create_iv(22MCRYPT_DEV_URANDOM),
                ];
                
                if(!
$error) {
                
                
$insert $DB_con->prepare("INSERT INTO w_user_data (email, password, vorname, nachname, ip, date_insert) VALUES (?, ?, ?, ?, NOW())");
                
$insert->BindValue(1$email);
                
$insert->BindValue(2password_hash($passwordPASSWORD_BCRYPT$option));
                
$insert->BindValue(3$vorname);
                
$insert->BindValue(4$nachname);
                if(
$insert->execute()) {
                exit(
"<article id='erfolg_insert'><section id='content'><p class='susc_reg'>Sie haben erfolgreich einen Account erstellt.</p> <br> <p class='after_reg'><a href='login.php' class='now_log_after_reg'>Jetzt Einloggen</a></p> </section></article><?php");
                    }
                }
            }
        
?>
    <article id="a1-reg">
        <section id="content">
        <h2 class="h2-reg"> Registrieren </h2>
        <h3 class="h3-reg"> Kostenlos und schnell Registrieren </h3>
        <p class="genericon genericon-user"></p>
        </section>
    </article>
    
    <article id="a2-reg">
        <section id="content">
        <form action="<?php $_SERVER['REQUEST_METHOD']?>" method="POST">
         
        
         <?php if(isset($error)) {   ?>
         <article id='error_info'>
         <section id='content'>
         <?php echo $error?>
         </section>
         </article>
         <?php  ?>
         

         
<p><input type="email" name="email" placeholder="E-Mail Adresse"> <input type="email" name="atmail-g" placeholder="E-Mail Adresse Wiederholen"></p>
        <p><input type="password" name="password" placeholder="Passwort"> <input type="password" name="psw-g" placeholder="Passwort Wiederholen"></p>
        <p><input name="vorname" placeholder="Ihr Vorname"> <input name="nachname" placeholder="Ihr Nachname"></p>
        <p class="info-agb"> Beim Senden der Registration stimmen Sie automatisch der <a href="#" class="agb"> AGB</a> zu.</p>
        <p><input type="submit" class="send" value="Senden" name="senden"> <input type="reset" class="reset" value="Zurücksetzen"></p>
        </section>
    </article>

</main>
</body>
</html>
03/28/2016 03:26 False#2
Ein paar Sachen die man ändern kann:- Template Engines nutzen z.b. Twig(nutze ich) um Html und Php voneinander abtrennen zu können (viel ordentlicher).
- Entitys nutzen
- Eigene Klasse fürs Validieren, da du vieles öfters nur mit anderen Variablen nutzen. (Also sowas wie Validiation::isEmpty($vorname), in dieser Function machst du dann z.b auch das
- Texte nicht hardcoded in das Script
- Methoden/Variablen besser benamen z.b. die function 'check'... Was tut diese ? Was wird den gecheckt ?
- PHPdoc nutzen
- Wieso muss bei der 'check' function die Datenbank Verbindung übergeben werden ?




Was am schönsten wäre, wäre natürlich mit dem MVC Prinzip zu arbeiten.