Antworten auf deine Fragen:
Neues Thema erstellen

Erledigt - PHP - Datenbank submit führt zu leerem Datensatz

Jormungand

VonAllemEtwas

Hallo zusammen,
als PHP-Anfänger habe ich versucht, ein simples Programm zu schreiben, das Adressdaten in eine Datenbank schreibt. Wenn ich weiter komme, wird vielleicht mal was Gescheites draus.
Die Verbindung mit der Datenbank klappt soweit, aber beim Submit wird ein leerer Datensatz erzeugt.

error_reporting meldet Undefined index bei den Variablen.

Was mache ich falsch?

PHP:
<?php
error_reporting(E_ALL);
$success = false;
if(isset($_POST)) {

    // Datenbankverbindung
    $conn = mysqli_connect("localhost", "user", "passwort", "dbname");

    // Test der Datenbankverbindung
    if($conn === false) {
        die("Connection Error: " . mysqli_connect_error());
    }

    /**
     * Funktion sichert DB-Strings gegen Injection
     *
     * @param $str - String, der gesichert werden soll
     * @param $conn - Verbindung zur DB
     */

    function sqlEscapeString($str, $conn) {
        $str = strip_tags($str);
        $str = mysqli_real_escape_string($conn, $str);
        return $str;
    }

    // Hier meldet error_reporting Undefined index
        $fname = sqlEscapeString($_REQUEST['fname'], $conn);
        $lname = sqlEscapeString($_REQUEST['lname'], $conn);
        $street = sqlEscapeString($_REQUEST['street'], $conn);
        $city = sqlEscapeString($_REQUEST['city'], $conn);
        $phone = sqlEscapeString($_REQUEST['phone'], $conn);
        $mobile = sqlEscapeString($_REQUEST['mobile'], $conn);


    // SQL-Befehl
    $sql = "INSERT INTO php_adressenverwaltung ( fname, lname, street, city, phone, mobile )
        VALUES ('$fname', '$lname', '$street', '$city', '$phone', '$mobile')";

    // Submit durchführen
    if(mysqli_query($conn, $sql)) {
        $success = "<h2 class='success'>Eintrag gespeichert!</h2>";
    } else {
        echo "Error: $sql " . mysqli_error($conn);
    }
    mysqli_close($conn);
}
 

owieortho

Aktives Mitglied

Die Undefined index-Fehlermeldung kommt bei den neuen PHP-Versionen immer dann, wenn Variablen nicht deklariert wurden. Dabei reicht es nicht, wie früher, die Variablen per Zuweisung einer REQUEST-Variable zu füllen (Zeilen 28-33 im Code) und damit zu deklarieren. In den neuen Versionen - frag mich bitte nicht seit wann - muss die Variable vorher z. B. so deklariert werden:
PHP:
if(empty($fname) ) {
    $fname = "";
}
else {
    $fname = sqlEscapeString($_REQUEST['fname'], $conn);;
}
Schau mal, ob es das war.

HTH
O.
 

Jormungand

VonAllemEtwas

Danke für deinen Vorschlag.
Leider lag es nicht daran. Es wird immer noch ein Datensatz in der DB erzeugt, der aber außer der ID leer ist.

Kann es sein, dass die Datenbank falsch konfiguriert ist?

 

owieortho

Aktives Mitglied

Das ist m. E. die Folge der Übergabe der leeren Werte. Du kannst das ganz einfachtesten, indem Du die Variablen statt mit den Resultaten der Formularauswertung direkt befüllst:
PHP:
        $fname = "Max";
        $lname = "Mustermann";
...
Ich wette, dann wird Dir das in die Datenbank geschrieben. Dann bist Du zurück bei der Behebung oben genannter Problematik. Hier findest Du eine verständliche Beschreibung, die aber etwas umfangreicher/detaillierter als mein obiger Ansatz ist:
https://www.php-kurs.com/notice-undefined-index-meldung.htm

Gruß
O.
 

Jormungand

VonAllemEtwas

Danke, dein Artikel hat mir geholfen die Meldung "Undefined index" weg zu bekommen. Mit der festen Definition der Variablen habe ich es auch geschafft den Datensatz in die Datenbank zu kriegen.
Aber wie bekomme ich jetzt die Daten aus dem Formular in die Datenbank?

Kannst du mir bitte noch einen Tipp geben?
 

owieortho

Aktives Mitglied

Wenn ich Dich richtig verstehe, müsstest Du jetzt, nach der Deklaration der Variablen (Fehlermeldung ist weg), die Variablen erneut befüllen. Ich denke, dass Du weisst, dass sich die Inhalte einer Variablen immer nach der letzten Definierung richten:
PHP:
$variable ="a";
$variable ="b";
$variable ="c";
echo $variable // zeigt c an, denn "b" überschreibt "a" und "c" überschreibt "b"
D. h., Du fügst jetzt Deine ursprünglichen Zeilen 28-33 an der passenden Stelle ein und holst damit Deine Formulardaten.

Gruß
O.
 

Jormungand

VonAllemEtwas

Ok, ich habe jetzt meinen Fehler gefunden. Es war ein dummer Leichtsinnsfehler:
Ich habe in der index.php in den input-Feldern name und id verwechselt. :expressionless:
Da der Wert in name nicht mit dem übergebenen $_POST-Wert übereingestimmt hat, konnte auch nichts an die Datenbank übergeben werden. Asche auf mein Haupt.

Danke Owieortho für deine Hilfe und Entschuldigung für die Zeit, die du verschwendet hast.:danke:
 

owieortho

Aktives Mitglied

Nix verschwendet, alles gut! Flüchtigkeitsfehler unterlaufen jedem/r und schon wieder hat man was gelernt.

Weiter viel Erfolg
O.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.633
Beiträge
1.538.446
Mitglieder
67.555
Neuestes Mitglied
scheflo
Oben