• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wie kann ich mit PHP Formulardaten ändern?

marcelgerard

Mitglied
Hi Leute,

ich habe mich schon den ganzen Tag damit rumgeschlagen, wie ich jetzt meinen Formular-Inhalt geändert bekomme. Also so, dass es auch in der Datenbank geändert wird. Ich kann anhand der Beispiele in meinem PHP-Buch meine Idee nicht richtig umsetzen. Hier mal kurz zur Erklärung, was ich möchte:

Ich habe eine Liste mit den Inhalten meiner Daten, die ich mit einem Formular in die Datenbank eintrage:

PHP:
<?php

$conf = mysqli_connect("", "root", "", "artistfytest");
$res = mysqli_query($conf, "SELECT * FROM coverwall ORDER BY CoverID DESC"); 

echo "<table border='1'>";
echo "<tr><td>Artist</td><td>Produkt</td><td>Genre</td><td>Art</td></tr>";

while ($dsatz = mysqli_fetch_assoc($res))

{
    echo "<tr><td>" . $dsatz["Head"] . "</td><td>" . $dsatz["Product"] . "</td><td>" . $dsatz["Genre"] . "</td><td>" . $dsatz["Platte"] . "</td><td><a href='coveredit.php?CoverID=" . $dsatz["CoverID"] . "'>Ändern</a></td></tr>";
}

echo "</table>";

?>

Am Ende der Liste ist immer ein Link "Ändern", der mit GET aktiv wird. Klickt man drauf, geht die Seite coveredit.php auf mit der jeweiligen ID. In der Datei ist das Formular mit den jeweiligen Inhalten der Datenbankeinträge zu sehen.

PHP:
<?php

$conf = mysqli_connect("", "root", "", "artistfytest");

$res = mysqli_query($conf, "SELECT * FROM coverwall WHERE CoverID = " . $_GET["CoverID"]);
$dsatz = mysqli_fetch_assoc($res);


   echo "<p>Bitte neue Inhalte eintragen und speichern:</p>";
   echo "<form action = 'covertrag.php' method = 'post'>";

   echo "<p><input name='aa' value='" . $dsatz["Head"] . "'> Nachname</p>
         <p><input name='bb' value='" . $dsatz["Product"] . "'> Nachname</p>
         <p><input name='cc' value='" . $dsatz["Genre"] . "'> Nachname</p>
         <p><input name='dd' value='" . $dsatz["Text"] . "'> Nachname</p>
         <p><input name='ee' value='" . $dsatz["RelDate"] . "'> Nachname</p>
         <p><input name='ff' value='" . $dsatz["Amazon"] . "'> Nachname</p>
         <p><input name='gg' value='" . $dsatz["iTunes"] . "'> Nachname</p>
         <p><input name='hh' value='" . $dsatz["Spotify"] . "'> Nachname</p>
         <p><input type='submit' value='Speichern'></p>";
   echo "</form>";

   mysqli_close($conf);
?>

Mein Ziel ist es jetzt, wenn ich die Daten ändere und auf Speichern klicke, dass er die neuen Daten speichert/ändert und zurück zur Übersicht zurückkehrt. Die Frage ist nur, wie? Ich komme einfach nicht dahinter.

LG Marcel
 
Werbung:
Werbung:
Das kann doch nicht sein. Der erste Quellcode listet alles auf inkl. Link zur coveredit.php. In coveredit.php ist ein Formular, dass die Daten an covertrag.php weitergibt.

Und was ich auch sehr schön finde, du ignoriest Hinweise auf "Select *" und SQL-Injections! Sage mir, warum man dir helfen sollte, wenn du doch das meiste nicht annimmst?
 
Doch ich nehme das schon an, im zweiten Code hab ich doch meine echo Ausgabe schon anders gemacht, so wie du es gesagt hast, aber ich muss erst die Grundstruktur verstehen, was ich mit den Übungen versuche. Etwas verbessern oder anders machen kann man dann ja immer noch. Mir geht es rein um das verstehen.

Der Code in der covertrag.php ist die Vorlage aus dem Buch, die ich durch meine Daten ersetzt habe. Wird auch alles richtig angezeigt ohne Fehler, aber meine Versuche das man es ändern kann, funktioniert bisher nicht.
 
Etwas verbessern oder anders machen kann man dann ja immer noch.
Hast du eine Ahnung, wie oft ich das schon gelesen habe und trotzdem immer wieder den gleichen Käse zu sehen bekommen habe? Warum nicht sofort richtig machen?

Beispiel zu deinem Problem:
PHP:
<?php
   if (isset($_POST['var1']))
   {
      $con = mysqli_connect("host", "user", "passwort", "db");
      
      $var1 = mysqli_real_escape_string($con, $_POST['var1']);
      $var2 = mysqli_real_escape_string($con, $_POST['var2']);
      $id   = mysqli_real_escape_string($con, $_POST['id']);
      
      $query = "Update
                   `tabelle`
                 set
                   `spalte1`='$var1',
                   `spalte2`='$var2'
                 where
                   `id`=$id";
                  
      mysqli_query($con, $query)
        or die ("Error: " . mysqli_error($con));
        
     echo "Daten gespeichert";
   }
   else
     echo "Keine Daten vorhanden";
?>
 
Werbung:
:confused::confused::confused::confused: Natürlich in die Datei, an die das Formular die Daten sendet :confused::confused::confused::confused:
Und dann an den Anfang
 
Sorry wenn sich das für dich blöd anhört. Ich bin leider nicht besonders stark darin etwas schnell zu lernen. Am besten lerne ich, wenn ich die Wege sehe. Aber ich merke schon, PHP ist nicht so einfach wie HTML oder CSS.

Ich hab das jetzt mal eingesetzt und wahrscheinlich ist es komplett verkehrt, denn bisher funktioniert es nicht

PHP:
<?php

if (isset($_POST['speichern']))
   {
      $con = mysqli_connect("", "root", "", "artistfytest");
    
      $var1 = mysqli_real_escape_string($con, $_POST['aa']);
      $var2 = mysqli_real_escape_string($con, $_POST['bb']);
      $id   = mysqli_real_escape_string($con, $_POST['CoverID']);
    
      $query = "Update
                  `coverwall`
                set
                  `Head`='$var1',
                  `Product`='$var2'
                where
                  `CoverID`=$id";
                
      mysqli_query($con, $query)
        or die ("Error: " . mysqli_error($con));
      
     echo "Daten gespeichert";
   }
   else
     echo "Keine Daten vorhanden";


$conf = mysqli_connect("", "root", "", "artistfytest");
$res = mysqli_query($conf, "SELECT * FROM coverwall ORDER BY CoverID DESC"); 

echo "<table border='1'>";
echo "<tr><td>Artist</td><td>Produkt</td><td>Genre</td><td>Art</td></tr>";

while ($dsatz = mysqli_fetch_assoc($res))

{
    echo "<tr><td>" . $dsatz["Head"] . "</td><td>" . $dsatz["Product"] . "</td><td>" . $dsatz["Genre"] . "</td><td>" . $dsatz["Platte"] . "</td><td><a href='coveredit.php?CoverID=" . $dsatz["CoverID"] . "'>Ändern</a></td></tr>";
}

echo "</table>";

?>

Wird immer folgender Fehler angezeigt.

Notice: Undefined index: CoverID in C:\xampp\htdocs\vertrieb\covertrag.php on line 65
Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 7

Ich benutze überhaupt keine MariaDB.
 
Werbung:
Notice: Undefined index: CoverID in C:\xampp\htdocs\vertrieb\covertrag.php on line 65
$_POST['aa'] => <input name='aa' value='" . $dsatz["Head"] . "'>
$_POST['bb'] => <input name='bb' value='" . $dsatz["Product"] . "'>
$_POST['CoverID'] => ????????????????????????????????????????????

Ich benutze überhaupt keine MariaDB.
Du weißt noch nicht mal was für eine Software du auf deinem Rechner laufen hast. In XAMPP ist schon seit einiger Zeit kein MySQL implementiert, sondern MariaDB.
 
Ich verstehe einfach nicht was ich eintragen soll. Ich probiere schon die ganze Zeit rum. Ich bin hier am Verzweifeln :S - Natürlich weiß ich wa sich benutze.

Du weißt noch nicht mal was für eine Software du auf deinem Rechner laufen hast. In XAMPP ist schon seit einiger Zeit kein MySQL implementiert, sondern MariaDB.

Ich hab von der XAMPP Seite die neuste Version runter geladen und darauf läuft MySQL. Wie ich da was anlege etc. weiß ich. Und das funktioniert wunderbar.
 
Ich hab von der XAMPP Seite die neuste Version runter geladen und darauf läuft MySQL.
Nein, tut es nicht!
Von der XAMPP-Homepage:
Includes: Apache 2.4.29, MariaDB 10.1.30, PHP 7.2.1, phpMyAdmin 4.7.4, OpenSSL 1.1.0g, XAMPP Control Panel 3.2.2, Webalizer 2.23-04, Mercury Mail Transport System 4.63, FileZilla FTP Server 0.9.41, Tomcat 7.0.56 (with mod_proxy_ajp as connector), Strawberry Perl 7.0.56 Portable

Siehe auch https://de.wikipedia.org/wiki/MariaDB
 
Werbung:
okay, hab verstanden was du meinst. In meinem phpMyAdmin steht Server-Typ MariaDB. Im XAMPP im Control Panel steht unter Modul MySQL daher wohl das Missverständnis.
 
In deinem Formular fehlt diese Zeile

<input type='hidden' name='CoverID' value='" . $_GET["CoverID"] . "'>
 
Zurück
Oben