<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PDO >> TEST <<</title>
</head>
<body>
    <?php
    // pdo_test.php
    // holt sich den code aus der datei
    require_once "inc/db_connection_function.php";

    // etsablish db connect
    // verbindet sich mit der datenbank
    $dbh = db_connect();

    // get data from fields:
    $u_firstname = $dbh->quote($_REQUEST['firstname']);
    $u_lastname = $dbh->quote($_REQUEST['lastname']);
    $u_email = $dbh->quote($_REQUEST['email']);

    // definiert den SQL befehl um
    // einen Nutzer korrekt in der DB anzulegen
    $addUser="INSERT INTO user VALUES (
    NULL,  
    $u_firstname, 
    $u_lastname,
    $u_email   
    );";

    echo $addUser."</br>";

    // TEST SQL INJECTION: '); DELETE FROM user WHERE (u_email LIKE '%

    // Versucht code auszufügen (try{...}) wenn das fehlschlägt
    // nimmt er sich den error und es wird anderer code ausgeführt 
    // (catch(...){...})
    try {
        // führe befehl aus
        $dbh->exec($addUser);
        // gib aus das der user erstellt wurde
        echo "USER CREATED";
        // kein error also null
        $custErrMsg = NULL;
    } catch (PDOException $e) {
        // weise error nachricht var zu
        $errMsg = $e->getMessage();
        // weise error code var zu 
        $errCode = $e->getCode();
        //echo "ERROR: user could not created. try again later";
        //echo "<br> Error Message: $errMsg";
        //echo "<br> Error-Code: $errCode";

        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        echo "<h3>FEHLER:</h3>";
        echo "<pre>" . $e->getCode() . ": " . $e->getMessage() . "</pre>";
        echo "<h3>DEINE SQL:</h3><pre>" . $addUser . "</pre>";

        switch ($errCode) {
            case "23000": $custErrMsg = "<p>Email-Adress already exists</p>"; break;
            default: $custErrMsg = "<p>Oooooops, something went wrong!</p>"; 
        }
    }
    
    echo $custErrMsg;

    // ####################################
    // read records from db

    // result consists of multiple rows and columns

    // wähle * (alles) aus 'user' (tabelle)
    $readUser = "SELECT * FROM user";

    /*speicher das ergebnis in der variable,
    // führe den SQL befehl aus und wandle 
    // das ergebnis in einen array um.
    // resultReadUser = $dbh->query($readUser)->fetchAll();
    $dbh->exec($readUser);

    echo "<pre>";
    print_r($resultReadUser);
    echo "</pre>";
    
    ODER

    // speicher das ergebnis in der variable,
    // führe den SQL befehl aus 
    */
    $resultReadUser = $dbh->query($readUser);

    // gebe alles aus dem array aus
    echo "ID | VORNAME | NACHNAME | MAIL<br>";
    foreach($resultReadUser as $row) {
        echo "$row[0] | $row[1] | $row[2] | $row[3]<br>";
    }

    // ---
    // result consists of one row and multiple columns
    // gibt eine spalte
    $UserID = 1;
    $getUserById = "SELECT * FROM user WHERE u_id = $UserID";
    $resultGetUserById = $dbh->query($getUserById)->fetch();
    echo "<pre>";
    print_r($resultGetUserById);
    echo "</pre>";
    
    echo "<p>Search User ID $UserID:</p>";
    if($resultGetUserById){
        echo "<p>User found: {$resultGetUserById['u_firstname']} {$resultGetUserById['u_lastname']}</p>";
    } else {
        echo "<p>No User found</p>";
    }

    // ---
    // result represents one cell
    // gibt eine zelle zurück
    $getFirstnameByUserId = "SELECT u_firstname FROM user WHERE u_id = $UserID ";
    $resultFristnameByUserId = $dbh->query($getFirstnameByUserId)->fetchColumn();

    echo "<p>Search Firstname of User ID $UserID:</p>";
    if($resultFristnameByUserId){
        echo "<p>Firstname of User found: $resultFristnameByUserId</p>";
    } else {
        echo "<p>No User found</p>";
    }

    ?>
</body>
</html>