jensgebken
Goto Top

Problem mit script

Hallo Gemeinschaft,

möchte mich nun mit sessions beschäftigen und verstehen wie das funktioniert

habe mir dazu ein script raus gesucht - leider finde ich den fehler nicht - es ist nicht in der lage den neu angelegten datensatz in dioe mysql tab zu schreiben - es kommt auch keine meldung

<?php 
session_start();
$servername="mysere.de";  
$username = "U23214";  
$password ="423423423";  
$pdo = new PDO("mysql:host=$servername;dbname=DB...", $username,$password);  
 
if(isset($_GET['login'])) {  
    $email = $_POST['email'];  
    $passwort = $_POST['passwort'];  
    
    $statement = $pdo->prepare("SELECT * FROM users WHERE email = :email");  
    $result = $statement->execute(array('email' => $email));  
    $user = $statement->fetch();
        
    //Überprüfung des Passworts
    if ($user !== false && password_verify($passwort, $user['passwort'])) {  
        $_SESSION['userid'] = $user['id'];  
        die('Login erfolgreich. Weiter zu <a href="geheim.php">internen Bereich</a>');  
    } else {
        $errorMessage = "E-Mail oder Passwort war ungültig<br>";  
    }
    
}
?>
<!DOCTYPE html> 
<html> 
<head>
  <title>Login</title>    
</head> 
<body>
 
<?php 
if(isset($errorMessage)) {
    echo $errorMessage;
}
?>
 
<form action="?login=1" method="post">  
E-Mail:<br>
<input type="email" size="40" maxlength="250" name="email"><br><br>  
 
Dein Passwort:<br>
<input type="password" size="40"  maxlength="250" name="passwort"><br>  
 
<input type="submit" value="Abschicken">  
</form> 
</body>
</html>

Content-ID: 447096

Url: https://administrator.de/contentid/447096

Ausgedruckt am: 25.11.2024 um 06:11 Uhr

Arano
Arano 03.05.2019 um 10:40:29 Uhr
Goto Top
Hallo Jens.

[..] es ist nicht in der lage den neu angelegten datensatz in dioe mysql tab zu schreiben [..]
Und das ist KEIN Fehler !

Das Script ist nicht dazu gedacht etwas in die DB zu schrieben.
Es beinhaltet lediglich ein SELECT-Statement das dazu genutzt wird um DatensätzE welche der E-Mailadresse entsprechen, auszulesen. (Und dann wird wird das Passwort lediglich mit dem ersten Datensatz abgeglichen.)

Der Fehler liegt also bei dir ;)

In die DB schreibt man mit INSERT MySQL-Reference - INSERT-Statement


~Arano
tomolpi
tomolpi 03.05.2019 um 10:46:17 Uhr
Goto Top
Zitat von @jensgebken:

Hallo Gemeinschaft,
Hallo Jens,
möchte mich nun mit sessions beschäftigen und verstehen wie das funktioniert
Oha, schauen wir mal...
habe mir dazu ein script raus gesucht - leider finde ich den fehler nicht - es ist nicht in der lage den neu angelegten datensatz in dioe mysql tab zu schreiben - es kommt auch keine meldung
Aber Jens, es wird doch auch garnix geschrieben, weil dein Script dazu keine Funktion enthält!
@Arano hat dazu schon etwas geschrieben. Beschäftige dich mal damit, und achte auch auf die Sicherheit (SQL Injections).

Du solltest dir lieber erstmal einen PHP und MySQL/MariaDB Grundkurs zulegen, bevor du dich an sowas traust. Wenn bei Authentifizierungssystemen was knallt, ist das nie gut!
139374
139374 03.05.2019 aktualisiert um 10:54:09 Uhr
Goto Top
möchte mich nun mit sessions beschäftigen und verstehen wie das funktioniert
Oha, warst du zufällig auf der Cannabis-Messe in Dortmund?
jensgebken
jensgebken 03.05.2019 um 11:41:32 Uhr
Goto Top
sorry - das meinte ich

<!DOCTYPE html> 
<html> 
<head>
  <title>Registrierung</title>    
</head> 
<body>
 
<?php
$showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll
 
if(isset($_GET['register'])) {  
    $error = false;
    $email = $_POST['email'];  
    $passwort = $_POST['passwort'];  
    $passwort2 = $_POST['passwort2'];  
  
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>';  
        $error = true;
    }     
    if(strlen($passwort) == 0) {
        echo 'Bitte ein Passwort angeben<br>';  
        $error = true;
    }
    if($passwort != $passwort2) {
        echo 'Die Passwörter müssen übereinstimmen<br>';  
        $error = true;
    }
    
    //Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde
    if(!$error) { 
        $statement = $pdo->prepare("SELECT * FROM users WHERE email = :email");  
        $result = $statement->execute(array('email' => $email));  
        $user = $statement->fetch();
        
        if($user !== false) {
            echo 'Diese E-Mail-Adresse ist bereits vergeben<br>';  
            $error = true;
        }    
    }
    
    //Keine Fehler, wir können den Nutzer registrieren
    if(!$error) {    
        $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
        
        $statement = $pdo->prepare("INSERT INTO users (email, passwort) VALUES (:email, :passwort)");  
        $result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash));  
		
		//echo "RESULT"&$result;  
        
        if($result) {        
            echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>';  
            $showFormular = false;
        } else {
            echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';  
        }
    } 
}
 
if($showFormular) {
?>
 
<form action="" method="post">  
E-Mail:<br>
<input type="email" size="40" maxlength="250" name="email"><br><br>  
 
Dein Passwort:<br>
<input type="password" size="40"  maxlength="250" name="passwort"><br>  
 
Passwort wiederholen:<br>
<input type="password" size="40" maxlength="250" name="passwort2"><br><br>  
 
<input type="submit" value="Abschicken">  
</form>
 
<?php
} //Ende von if($showFormular)
?>
 
</body>
</html>
139374
139374 03.05.2019 aktualisiert um 12:02:47 Uhr
Goto Top
Aua das tut weh...

Außerdem für Anfänger empfehlenswert
error_reporting(E_ALL);
ini_set('display_errors', 'On');  
im Kopf des Skripts zeigt dir schnelle Flüchtigkeitsfehler.

==> https://www.php-kurs.com/
TripleDouble
TripleDouble 03.05.2019 um 12:15:23 Uhr
Goto Top
Hallo,

schau mal nach dem action-Attribut des Formulars (ist leer bei Deinem Code). Wenn Du $_GET auf den Inhalt 'register' prüfst, solltest Du das auch via URL im action-Attribut übergeben. Also so ähnlich:


if($showFormular) {
echo '<form action="' . $_SERVER['PHP_SELF'] . '?register=true" method="post">';  
?>
.
.
.

Ansonsten ist da noch ein wenig Optimierungspotenzial in Deinem Skript. Aber fuchs Dich erstmal in die Basics rein und schalte die Fehlerausgabe ein (Trial - Error hat den größten Lerneffekt).

Gruß - TD
jensgebken
jensgebken 03.05.2019 um 13:28:28 Uhr
Goto Top
hi td,

lieben dank - heisst also, dass das form wieder an sich zurück gesendet wird?
TripleDouble
TripleDouble 03.05.2019 aktualisiert um 14:09:25 Uhr
Goto Top
Das heißt, dass Du über das action-Attribut eine beliebige URL, in diesem Fall Dein PHP-Skript (über die Variable $_SERVER['PHP_SELF']), definierst, welche nach Submit aufgerufen wird.In der URL gibst Du auch die GET-Parameter mit:
http://URL?Parameter1=Wert&Parameter2=Wert...

Da Du das Formular nach erfolgter Registrierung sicher nicht nochmal anzeigen willst, solltest Du das Skript am Ende vom if(isset($_GET['register']))-Teil beenden:

<?
//Verarbeitung der GET-Parameter
if(isset($_GET['register'])) {  
.
.
.
die;
}

//Formularanzeige
if($showFormular)
.
.
.

Gruß - TD