Fehler beim updaten von werten in der Datenbank

Ja der Code sieht jetzt wie folgt aus:
PHP:
<?php
session_start();
if(isset($_POST['settings-submit'])){

    require 'dbh.inc.php';

    $username = htmlspecialchars($_POST['uid'], ENT_QUOTES, "UTF-8");
    $email = htmlspecialchars($_POST['mail'], ENT_QUOTES, "UTF-8");
    $password = htmlspecialchars($_POST['pwd'], ENT_QUOTES, "UTF-8");
    $confirmpassword = htmlspecialchars($_POST['cpwd'], ENT_QUOTES, "UTF-8");
    $id = htmlspecialchars($_SESSION['userId'], ENT_QUOTES, "UTF-8");

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        header("Location: ../settings.php?error=invalidmail");
        exit();
    }
    else if(!preg_match("/^[\w\- ]*$/", $username)) {
        header("Location: ../settings.php?error=invalidusername");
        exit();
    }
    else if($password !== $confirmpassword){
        header("Location: ../settings.php?error=passwordcheck");
        exit();
    }
    else {

        $sql = "SELECT * FROM users WHERE id='" . $id . "'";
        $stmt = mysqli_stmt_init($conn);
        if(!mysqli_stmt_prepare($stmt, $sql)){
            header("Location: ../settings.php?error=sqlerror1");
            exit();
        }
        else {
            mysqli_stmt_bind_param($stmt, "s", $username);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_store_result($stmt);
            $resultCheck = mysqli_stmt_num_rows($stmt);
            if($resultCheck == 0){
                header("Location: ../settings.php?error=usertaken");
                exit();
            }
            else {
                $sql = "UPDATE users SET uid=?, email=?, pwd=? WHERE id= ?;";
                $stmt = mysqli_stmt_init($conn);
                if(!mysqli_stmt_prepare($stmt, $sql)){
                    header("Location: ../settings.php?error=sqlerror2");
                    exit();
                }
                else {
                    $hashedPwd = password_hash($password, PASSWORD_DEFAULT);

                    mysqli_stmt_bind_param($stmt, "sssi", $username, $email, $hashedPwd, $_SESSION['id']);
                    mysqli_stmt_execute($stmt);
                    printf("Error: %s.\n", mysqli_stmt_error($stmt));
                    header("Location: logout.inc.php?settings=success");
                    exit();
                }

            }
        }

    }
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}
else {
    header("Location: ../settings.php");
    exit();
}

Sollte so eigentlich richtig sein.
Steht schon hier
 
Suche den Fehler. Er springt einem direkt ins Auge. Vor allem wenn man die Fehlermeldung dazu betrachtet.
mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement in settings.inc.php on line 34
PHP:
        $sql = "SELECT * FROM users WHERE id='" . $id . "'";
...
            mysqli_stmt_bind_param($stmt, "s", $username);
 
Müsste es dann nicht eigentlich sein?
PHP:
$sql = "SELECT uid FROM users WHERE id='" . $id . "'";
...
mysqli_stmt_bind_param($stmt, "s", $username);
Weil dass würde noch sinn machen, kommt aber der Selbe fehler.
 
Hat sich erledigt, hab den fehler doch gefunden, in zeile 52 war der Fehler, hatte da statt:
PHP:
mysqli_stmt_bind_param($stmt, "sssi", $username, $email, $hashedPwd, $id);
Folgendes stehen:
PHP:
mysqli_stmt_bind_param($stmt, "sssi", $username, $email, $hashedPwd, $_SESSION['userId']);
 
$sql = "SELECT uid FROM users WHERE id='" . $id . "'";
Hier würde ich übrigens auch ein Prepared Statement nutzen. Einfach aus Gewohnheit. Das ist ein bisschen so, wie wenn ich z. B. ein Tuch vom Boden aufhebe. Auch wenn es extrem leicht ist, versuche ich es so aufzuheben, wie ich auch > 5kg-Gewichte hebe :) Okay, manchmal zumindest :D Ich hoffe, es wird ersichtlich, dass sich das Angewöhnen einer guten Strategie auszahlen kann.

Zum anderen Thema: htmlspecialchars bei der Ausgabe *im HTML* anwenden.
 
Hier würde ich übrigens auch ein Prepared Statement nutzen. Einfach aus Gewohnheit. Das ist ein bisschen so, wie wenn ich z. B. ein Tuch vom Boden aufhebe. Auch wenn es extrem leicht ist, versuche ich es so aufzuheben, wie ich auch > 5kg-Gewichte hebe :) Okay, manchmal zumindest :D Ich hoffe, es wird ersichtlich, dass sich das Angewöhnen einer guten Strategie auszahlen kann.

Zum anderen Thema: htmlspecialchars bei der Ausgabe *im HTML* anwenden.
Ok Danke, werde ich noch machen. Danke für die vielen Hilfreichen Tipps und Hilfen.
 
Zurück