Antworten auf deine Fragen:
Neues Thema erstellen

[ERLEDIGT][php & mysql] Datensatz per Formular bearbeiten

Zaolat

Aktives Mitglied

Moin Moin,

ich bastel nun eine ganze Weile an den Code herum, mit dem ich einen bestehenden Datensatz in mySQL bearbeiten möchte.
Das Anzeigen und löschen der Daten funktioniert soweit. Nur das Bearbeiten nicht.

Wenn ich den Eintrag bearbeite und auf Speichern klicke, wird danach nichts angezeigt - weder eine Bestätigung, noch ein Fehler.
Und der Datensatz wurde in der Datenbank auch nicht geändert.

Kann einer von euch mir sagen, wo mein Fehler ist?
Meine PHP Kenntnisse sind noch sehr rudimentär.

Hier der Code:
Code:
    <?php
                if(isset($_POST["bearbeiten"]))
{

    //Verbindung zur Datenbank herstellen
                $host_name = 'localhost';
                $user_name = 'root';
                $password = '';
                $database = 'whiteboard';

                $connect = mysqli_connect($host_name, $user_name, $password, $database);
               
    // 2. Prüfe Radio-Button-Auswahl
                if(isset($_POST["auswahl"])){

    // 3. Datenbankabfrage starten
                $id = $_POST["auswahl"];
                $abfrage = "SELECT * FROM whiteboard_eintraege WHERE id = $id";
                $result = mysqli_query($connect, $abfrage);

    // 4. Datensatz in Variablen speichern
                $dsatz = mysqli_fetch_assoc($result);
                $eintrag = $dsatz["eintrag"];
    //            $done = $dsatz["done"];

    // 5. Das Bearbeiten-Formular anzeigen
                echo "<form action='bearbeiten.php' method='post'>";
                echo "<input name='id' type='hidden' value='$id'>";
                echo "<p><input name='eintrag' value='$eintrag'> Eintrag</p>";

                echo "<input name='bearbeitungAbschicken' value='Bearbeitung abschließen' type='submit'>";
                echo "</form>";

                }

    //6. Datensatz aktualisieren mit UPDATE
                if(isset($_POST["bearbeitungAbschicken"])){
                $id = $_POST["id"];
                $eintrag = $_POST["eintrag"];
                $done = $_POST["done"];

    //String für Update-Anweisung erstellen
                $update = "UPDATE whiteboard_eintraege SET
                id ='$id',
                eintrag ='$eintrag',
                done ='$done',
                WHERE id = $id";

    //MySQL-Anweisung ausführen
                echo $eintrag . "<p>Schritt MySQL Anweisung</p>";
                mysqli_query($connect, $update);

                echo "Datensatz bearbeitet.<br>";
                echo "<a href='whiteboard_admin.php'>zurück zur Übersicht</a>";
                }

    //Wenn der Nutzer in buecher.php keine Auswahl getroffen hat:
                if(!isset($_POST["auswahl"]) && !isset($_POST["bearbeitungAbschicken"])){
                echo "Es wurde kein Datensatz ausgewählt.<br>";
                }
}
       
        ?>
 

G

Gelöschtes Mitglied 633957

Guest

Arbeitest Du in einer Produktivumgebung oder simulierten Produktivumgebung? Gibt es Meldungen wenn Du Deinem Code
PHP:
ini_set('error_reporting', E_ALL);
voranstellst?
Persönlich wäre ich auch sparsam mit Zeilenumbrüchen innerhalb eines Strings, muss aber nicht zwangsläufig in Deiner Serverumgebung ein Problem sein.
 

Dagobert68

Nicht mehr ganz neu hier

Moin :)

Ja, der Teil


ist sicher eher unbeabsichtigt. Die ID dürfte ja normalerweise nicht geändert werden. Sehe ich genauso wie @buerzel.

Außerdem solltest du unbedingt alle Formulareingaben vor Übergabe in den Update-String prüfen / validieren. Das ist ganz wichtig, um z.B. SQL-Injection zu verhindern und um sicher zu stellen, dass die Eingaben auch dem entsprechen, was die Datenbankfelder an der Stelle erwarten. (Beispiel: in einem Zahlenfeld, das vom Typ Integer ist, solltest du keine Buchstaben einfügen etc.). Dazu kannst du dir die Filter-Funktionen von PHP mal näher ansehen: http://php.net/manual/de/ref.filter.php und dich auch unbedingt mal mit den sogenannten "prepared statements" beschäftigen: http://php.net/manual/de/mysqli.quickstart.prepared-statements.php, die einiges in Bezug auf Validierung / Bereinigung vereinfachen.

Das ist für den Anfang eine Menge Stoff und du brauchst auf jeden Fall etwas Geduld mit dir selbst, aber je früher du dich auch mit dem Thema Sicherheit bei Formularen beschäftigst, umso besser :)

Das löst jetzt nicht direkt und konkret dein Problem, hilft dir aber unter Umständen dabei, einen anderen, sichereren Ansatz für dein Formular zu finden und dich von Anfang an auf den richtigen Weg zu bringen bevor du dir etwas angeeignet hast, was in einer Produktivumgebung nicht eingesetzt werden sollte. ;)

Viel Erfolg und liebe Grüße,
Tina
 

webcasi

Nicht mehr ganz neu hier

Hallo,
ich sehe es so wie meine Vorposter. Das mit der ID funktioniert nicht. Entweder hast Du die in einer Session oder Du musst Sie irgendwie übergeben. Wenn jemand auf "bearbeiten" des Datensatzes klickt, dann ist die ID des Datensatzes bekannt.
Die ID sollte nicht veränderbar sein. Wenn dies der Fall ist würde man ja einen neuen Datensatz anlegen müssen, dessen ID dann ggf. automatisch von der DB per auto_increment vergeben wird, oder Du sorgst dafür dass keine doppelt vergeben werden.
 

Zaolat

Aktives Mitglied

Danke für eure Hinweise. Ich habe dies entsprechend angepaßt. Dennoch bekomme ich es mit meinem Code nicht hin, dass der Datensatz in der Datenbank verändert wird.
 

Zaolat

Aktives Mitglied

Versuche es mal mit dieser Änderung:

Code:
echo "<p><input name='eintrag' value='" . $eintrag . "'> Eintrag</p>";
Das hat leider auch nicht geholfen.

Ich habe einiges getestet; leider alles ohne Erfolg. Was funktioniert ist, wenn ich keine Auswahl treffe, mir dann angezeigt wird, dass keine Auswahl getroffen wurde.

Auch zieht das Formular die Daten korrekt aus der Datenbank und füllt die Formularfelder aus. Wenn ich diese jedoch ändere und auf abschicken klicke, bleibt er auf der Seite; es wird jedoch lediglich der "back_link" angezeigt.

Soweit ich erprobt habe, wird dieser Code Teil nicht oder nur zum Teil ausgeführt:
Code:
36.    //6. Datensatz aktualisieren mit UPDATE


37.                if(isset($_POST["bearbeitungAbschicken"])){


38.                $id = $_POST["id"];


39.                $eintrag = $_POST["eintrag"];


40.                $done = $_POST["done"];


41.


42.    //String für Update-Anweisung erstellen


43.                $update = "UPDATE whiteboard_eintraege SET


44.                id ='$id',


45.                eintrag ='$eintrag',


46.                done ='$done',


47.                WHERE id = $id";


48.


49.    //MySQL-Anweisung ausführen


50.                echo $eintrag . "<p>Schritt MySQL Anweisung</p>";


51.                mysqli_query($connect, $update);


52.


53.                echo "Datensatz bearbeitet.<br>";


54.                echo "<a href='whiteboard_admin.php'>zurück zur Übersicht</a>";


55.                }
 
Zuletzt bearbeitet:

Zaolat

Aktives Mitglied

Nach einigen herum probieren, konnte ich das für mich lösen. Ich habe in dem Schritt wo der Datensatz geändert werden soll, mit $Statement gearbeitet. Nun funktioniert es.

Danke für eure Hilfestellungen!
 

Zaolat

Aktives Mitglied

In der IF Anweisung, in welcher der Datensatz an die Datenbank mitgeteilt werden soll, habe ich vergessen, die Datenbank zu verbinden. Diese Anweisung befindet sich lediglich in der ersten IF Anweisung, welche ja nicht zum Zuge kommt, wenn der submit Button betätigt wird.
 

Zaolat

Aktives Mitglied

Die Lösung ist entweder in der If Anweisung " //6. Datensatz aktualisieren mit UPDATE" erneut die Verbindung zur Datenbank aufbauen, oder die Verbindung zur Datenbank ganz zu beginn des Codes einpflegen.

Anfangs hatte ich die Verbindung zur Datenbank lediglich in der IF Anweisung aufgebaut, wenn $_POST "bearbeiten" ist.
Da allerdings bei dem Klick auf Submit $_POST sich auf "bearbeitenAbschicken" bezieht, überspringt der Code den Schritt, wo die Verbindung zur Datenbank aufgebaut wird. Daher kann er auch die Daten nicht ändern, weil es keine Verbindung gibt. Als ich in dieser IF-Anweisung die Verbindung zur Datenbank eingefügt habe, funktioniert es.
 
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

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben