mysql Update Poblem

erik2k

Grünschnabel
Hallo zusammen,
bin leider etwas verzweifelt, fummel seit Stunden an einem Update-Formular. Die Daten werden korrekt aus der Datenbank gelesen und voreingetragen. Es wird allerdings nix geändert, wenn ich den Button drücke, sondern die Änderungen werden gelöscht und die ursprünglichen Daten werden wieder angezeigt. Fehler werden keine angezeigt, weder bei php noch bei mysql.

Wäre echt klasse, wenn jemand mal den Code überfliegen könnte, vielleicht findet jemand den Fehler.
Hier der php-Code:

PHP:
<?php
    error_reporting(E_ALL);
    include ("vars.php");

    if(!isset($_GET["buch_id"])) {
        header("Location: index.php");
    }
    
    if (isset($_POST["buch_titel"]) &&
        isset($_POST["buch_erscheinungsjahr"]) &&
        isset($_POST["buch_autor"]) &&
        isset($_POST["buch_isnb"]) &&
        isset($_POST["buch_id"]) &&
        isset($_POST["Button"]) &&
        $_POST["Button"] == "Speichern") {
        $conn = mysqli_connect($dbhost, $dbuser, $dbpass) or die(mysqli_error());
	mysqli_select_db($conn, $dbname);

        $buch_titel = mysqli_real_escape_string($conn, $_POST["buch_titel"]);
        $buch_erscheinungsjahr = mysqli_real_escape_string($conn, $_POST["buch_erscheinungsjahr"]);
        $buch_autor = mysqli_real_escape_string($conn, $_POST["buch_autor"]);
        $buch_isbn = mysqli_real_escape_string($conn, $_POST["buch_isbn"]);
                                               
        $sql = "UPDATE buch SET ";
        $sql .= "buch_titel = '$buch_titel', ";
        $sql .= "buch_erscheinungsjahr = '$buch_erscheinungsjahr', ";
        $sql .= "buch_autor = '$buch_autor', ";
        $sql .= "buch_isbn = '$buch_isbn' ";
        $sql .= "WHERE buch_id = " . (int)$_POST["buch_id"];
        
        mysqli_query($conn, $sql) or die(mysqli_error());
        mysqli_close($conn);
        
        header("Location: index.php");
    }
    /* DATEN IN FORMFELDER VOREINTRAGEN */
    else {
        $conn = mysqli_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
	mysqli_select_db($conn, $dbname);
        $ergebnis = mysqli_query(
            $conn,
            "SELECT * FROM buch WHERE buch_id = "
            . (int)$_GET["buch_id"]) or die(mysqli_error());
        
        if ($zeile = mysqli_fetch_array($ergebnis)) {
            $buch_titel = htmlspecialchars($zeile["buch_titel"]);
            $buch_erscheinungsjahr = htmlspecialchars($zeile["buch_erscheinungsjahr"]);
            $buch_autor = htmlspecialchars($zeile["buch_autor"]);
            $buch_isbn = htmlspecialchars($zeile["buch_isbn"]);
            $buch_id = (int)$_GET["buch_id"];
        }
        mysqli_close($conn);
    }
?>

Und hier das Formular:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Untitled</title>
</head>
<body>
    <form method="post">
        Titel: <input type="text" name="buch_titel" value="<?php print($buch_titel); ?>" /><br />
        Erscheinungsjahr: <input type="text" name="buch_erscheinungsjahr" value="<?php print($buch_erscheinungsjahr); ?>" /><br />
        Autor: <input type="text" name="buch_autor" value="<?php print($buch_autor); ?>" /><br />
        ISBN: <input type="text" name="buch_isbn" value="<?php print($buch_isbn); ?>" /><br />
        <input type="hidden" name="buch_id" value="<?php print($buch_id); ?>" />
        <input type="submit" name="Button" value="ändern" />
    </form>
</body>
</html>

Liebe Grüße
 
Wenn man queries aus Variablen zusammenbaut, schleichen sich oft kleine Fehler ein, die man zwischen den Variablen nicht sieht.
Der einfache Weg sowas zu finden ist, ersetze

mysqli_query($conn, $sql);

durch

print $sql;

Wenn du dann immer noch nicht siehst, wo da ein Komma zuviel, oder ein Hochkomma doppelt, oder sonstwas falsch ist, gehe in PHPMyAdmin (sofern vorhanden) und führe den Befehl dort aus, PHPMyAdmin wird dir anzeigen, was falsch ist.
 
PHP:
    if (isset($_POST["buch_titel"]) &&
        isset($_POST["buch_erscheinungsjahr"]) &&
        isset($_POST["buch_autor"]) &&
        isset($_POST["buch_isnb"]) &&
        isset($_POST["buch_id"]) &&
        isset($_POST["Button"]) &&
        $_POST["Button"] == "Speichern") {
...
Wenn nur ein Feld nicht abgefüllt ist, dann macht dein Code gar nix ausser weider alles aus der DB auslesen und anzeigen.
Keine MEldung das etwas fehlt oder so.....

Das ist sehr gefährlich, da der User nie erfährt das ein Feld leer blieb
 
Das hier steht im PHP-Teil:

PHP:
isset($_POST["Button"]) && $_POST["Button"] == "Speichern"

und das hier steht im HTML-Formular:

HTML:
<input type="submit" name="Button" value="ändern" />

Also wird der IF-Block doch nie ausgeführt weil es gar keinen Button gibt der den Wert "Speichern" liefert.
 
Zurück