Daten in DB ändern PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
arbeiten
bild
code
datum
eintrag
erzeugen
fehler
feld
kategorie
kochrezept
limit
rezept
schleife
set
statement
update
url
zeile
zubereitung
zutaten
-
Hi !
Ich habe mir ein Skript gemacht, welches Daten aus der DB ausgibt:
<?php $data2=mysql_query("select * from rezepte where kategorie = 'backrezepte'"); while ($row = mysql_fetch_array($data2, MYSQL_ASSOC)) { echo " <tr> <td><input name=\"rezeptname\" size=\"30\" value=\"$row[rezeptname]\"></td> <td><textarea rows=\"2\" name=\"zutaten\" cols=\"30\">$row[zutaten]</textarea></td> <td><textarea rows=\"2\" name=\"zubereitung\" cols=\"30\">$row[zubereitung]</textarea></td> <td><textarea rows=\"2\" name=\"bild\" cols=\"30\">$row[bild]</textarea></td> <td><input type=\"hidden\" name=\"rezeptname\" value=\"$row[rezeptname]\" size=\"20\"> <input type=\"submit\" value=\"Daten ändern\" name=\"editrezept\" size=\"20\"> <input type=\"submit\" value=\"Eintrag löschen\" name=\"delrezept\" size=\"20\"> </td> </tr> "; } ?>
Im Code sind 2 Submit Buttons, einer zum Ändern, einer zum Löschen.
Jetzt brauche ich ein Script, welches, wenn ich auf Ändern klicke, die Daten ändert, und wenn ich auf Löschen kliche, den Eintrag löscht.
Wie mache ich das? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
davy schrieb:
Wie mache ich das?
Du schreibst es Dir!
http://www.schattenbaum.net/php/update.php
http://www.schattenbaum.net/php/delete.php -
Irgendwie funktioniert das aber nicht
Wenn ich auf Ändern klicke, wird die Seite zwar neu geladen, aber keine Daten geändert.
<?php include 'sql.php'; if (isset($_POST['delrezept'])) { mysql_query("delete from rezepte where rezeptname='".$_POST['rezeptname_alt']."'"); } if (isset($_POST['editrezept'])) { mysql_query("update rezepte set rezeptname = '".$_POST['rezeptname']."', zutaten = '".$_POST['zutaten']."', zubereitung = '".$_POST['zubereitung']."', bild = '".$_POST['bild']."' where rezeptname = '".$_POST['rezeptname_alt']."'"); } echo ""; ?> <form method="POST" action="rezept_eintragen.php"> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <?php $data2=mysql_query("select * from rezepte where kategorie = 'backrezepte'"); while ($row = mysql_fetch_array($data2, MYSQL_ASSOC)) { echo " <tr> <td><input name=\"rezeptname\" size=\"30\" value=\"$row[rezeptname]\"></td> <td><textarea rows=\"2\" name=\"zutaten\" cols=\"30\">$row[zutaten]</textarea></td> <td><textarea rows=\"2\" name=\"zubereitung\" cols=\"30\">$row[zubereitung]</textarea></td> <td><textarea rows=\"2\" name=\"bild\" cols=\"30\">$row[bild]</textarea></td> <td><input type=\"hidden\" name=\"rezeptname_alt\" value=\"$row[rezeptname]\" size=\"20\"> <input type=\"submit\" value=\"Daten ändern\" name=\"editrezept\" size=\"20\"> <input type=\"submit\" value=\"Eintrag löschen\" name=\"delrezept\" size=\"20\"> </td> </tr> "; } ?>
Ist hier was falsch?
EDIT: Ich habe gerade mal echo $data2 geschrieben, habe dann das hier bekommen: Resource id #4
Eine Verbindung zur DB muss aber bestehen, da alle Daten der Zeilen ausgelesen werden
Beitrag zuletzt geändert: 21.10.2010 9:45:41 von davy -
mmm
$data2 is auch keine einfach Variable... welche Ausgabe hast du erwartet ?
Wenn alles richtig in den Feldern steht.... dann ist das auch nicht das problem...
Füg lieber mal zu den if Bedinungen ein Echo hinzu und schau ob die ifs (zum ändern/löschen) überhaupt durchlaufen werden!
Beitrag zuletzt geändert: 21.10.2010 9:49:47 von cracker0dks -
cracker0dks schrieb:
mmm
$data2 is auch keine einfach Variable... welche Ausgabe hast du erwartet ?
Wenn alles richtig in den Feldern steht.... dann ist das auch nicht das problem...
Füg lieber mal zu den if Bedinungen ein Echo hinzu und schau ob die ifs (zum ändern/löschen) überhaupt durchlaufen werden!
Wo soll ich das echo einfügen? -
if (isset($_POST['delrezept'])) { echo"ICH bin im Löschblock!!!!"; mysql_query("delete from rezepte where rezeptname='".$_POST['rezeptname_alt']."'"); } if (isset($_POST['editrezept'])) { echo"ICH bin im Änderungsblock!"; mysql_query("update rezepte set rezeptname = '".$_POST['rezeptname']."', zutaten = '".$_POST['zutaten']."', zubereitung = '".$_POST['zubereitung']."', bild = '".$_POST['bild']."' where rezeptname = '".$_POST['rezeptname_alt']."'"); }
SO... damit man sieht obs an den Bedingungen liegt oder am sql query....
Beitrag zuletzt geändert: 21.10.2010 9:53:26 von cracker0dks -
cracker0dks schrieb:
if (isset($_POST['delrezept'])) { echo"ICH bin im Löschblock!!!!"; mysql_query("delete from rezepte where rezeptname='".$_POST['rezeptname_alt']."'"); } if (isset($_POST['editrezept'])) { echo"ICH bin im Änderungsblock!"; mysql_query("update rezepte set rezeptname = '".$_POST['rezeptname']."', zutaten = '".$_POST['zutaten']."', zubereitung = '".$_POST['zubereitung']."', bild = '".$_POST['bild']."' where rezeptname = '".$_POST['rezeptname_alt']."'"); }
SO... damit man sieht obs an den Bedingungen liegt oder am sql query....
"ICH bin im Änderungsblock!" wird ausgegeben
Woran kanns dann noch liegen? -
Mein Tipp... Miracelwip :D
ne spaß also ich lass mir die Sql statements immer von phpMyAdmin erzeugen,... da kammer eigendlich nix falsch machen...
Du gehts auf PhpMyAdmin und änderst eine Zeile... An allen Stellen, die du auch möglicherweise über PHP ändern willst (egal wie einfach ein Zeichen einfügen oder so). Dann auf ok klicken.
Jetzt steht oben das Sql statement... dann klickst du rechts auf php code erzeugen. (Aber auch bei dem richtigen Statement!)
Nicht bei Select sondern bei Updatet
Dann spuckt es dir sowas aus sql = "Update ....."; das kannste dann einfach einfügen und brauchst nurnoch die Variablen änden!
versuchs einfach mal.! is eig. eine sichere Methode -
cracker0dks schrieb:
Mein Tipp... Miracelwip :D
ne spaß also ich lass mir die Sql statements immer von phpMyAdmin erzeugen,... da kammer eigendlich nix falsch machen...
Du gehts auf PhpMyAdmin und änderst eine Zeile... An allen Stellen, die du auch möglicherweise über PHP ändern willst (egal wie einfach ein Zeichen einfügen oder so). Dann auf ok klicken.
Jetzt steht oben das Sql statement... dann klickst du rechts auf php code erzeugen. (Aber auch bei dem richtigen Statement!)
Nicht bei Select sondern bei Updatet
Dann spuckt es dir sowas aus sql = "Update ....."; das kannste dann einfach einfügen und brauchst nurnoch die Variablen änden!
versuchs einfach mal.! is eig. eine sichere Methode
Da bekomm ich sowas:
$sql = "UPDATE `usr_web48_1`.`rezepte` SET `rezeptname` = \'tj\', `zutaten` = \'tj\', `zubereitung` = \'tkploij\', `bild` = \'tj\' WHERE `rezepte`.`Id` = 74 LIMIT 1;";
Aber ich will ja nicht immer den gleichen Eintrag ändern, sondern jeden beliebigen.
Wie mach ich die Daten die ich ändere in den Update rein? -
Wie gesagt einfach ändern.... (die werte durch Variablen erstetzen und hinten die ID durch rezeptname... wobei ich an deiner Stelle mit der ID arbeiten würde ... (geht aber auch so)
if (isset($_POST['editrezept'])) { echo"ICH bin im Änderungsblock!"; $sql = 'UPDATE `usr_web48_1`.`rezepte` SET `rezeptname` = \''.$_POST['rezeptname'].'\', `zutaten` = \''.$_POST['zutaten'].'\', `zubereitung` = \''.$_POST['zubereitung'].'\', `bild` = \''.$_POST['bild'].'\' WHERE `rezepte`.`rezeptname` LIKE \''.$_POST['rezeptname_alt'].'\' LIMIT 1;'; mysql_query($sql) or die(mysql_error()); }
Ersetze den Änderunsblock einfach durch den .... -
cracker0dks schrieb:
Wie gesagt einfach ändern.... (die werte durch Variablen erstetzen und hinten die ID durch rezeptname... wobei ich an deiner Stelle mit der ID arbeiten würde ... (geht aber auch so)
if (isset($_POST['editrezept'])) { echo"ICH bin im Änderungsblock!"; $sql = 'UPDATE `usr_web48_1`.`rezepte` SET `rezeptname` = \''.$_POST['rezeptname'].'\', `zutaten` = \''.$_POST['zutaten'].'\', `zubereitung` = \''.$_POST['zubereitung'].'\', `bild` = \''.$_POST['bild'].'\' WHERE `rezepte`.`rezeptname` LIKE \''.$_POST['rezeptname_alt'].'\' LIMIT 1;'; mysql_query($sql) or die(mysql_error()); }
Ersetze den Änderunsblock einfach durch den ....
geht leider immernoch nicht... -
Und es kommt keine Fehlermeldung ? Dann findet er die Zeile nicht in der Datenbank! deshalb meinte ich (besser ist es mit der ID zu arbeiten... schreibe in dein Hidden feld keinen Namen sondern die Zeilen ID und änder den hinteren Teil des MySql statements...
Mehr fällt mir auch nicht ein (kann aber auch sein , das du in deinem Rezept das du änderst irgendwelche hochkommas oder so drinne hast die php dann falsch wandelt)
gruß -
cracker0dks schrieb:
Und es kommt keine Fehlermeldung ? Dann findet er die Zeile nicht in der Datenbank! deshalb meinte ich (besser ist es mit der ID zu arbeiten... schreibe in dein Hidden feld keinen Namen sondern die Zeilen ID und änder den hinteren Teil des MySql statements...
Mehr fällt mir auch nicht ein (kann aber auch sein , das du in deinem Rezept das du änderst irgendwelche hochkommas oder so drinne hast die php dann falsch wandelt)
gruß
Nein, kommt keine Fehlermeldung
Ich habe es jetzt mit der ID probiert, funktioniert auch nicht -
irgenwas muss doch kommen^^ kann ja nicht sein, dass einfach nix kommt! (im änderungsblock bist du ?)
hoffe du hast die Zeile nicht vergessen !
mysql_query($sql) or die(mysql_error());
Wenns immernoch nich geht, gib ma den link zu deiner Seite und Poste den kompletten code der Seite nochmal...
-
Ich habe gemerkt, dass wenn ich einen Eintrag ändere, der letzte Eintrag geändert wird, obwohl ich einen anderen ändere.
Hier mal der Code:
<html> <head> <meta http-equiv='Content-Language' content='de'> <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'> <title>Davids Homepage - Adminbereich</title> <link href="admin_style.css" rel="stylesheet" type="text/css"> </head> <body> <div align="center"> <center> <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="50%"> <tr> <td width="100%"> <p align='center'> <img border="0" src="../img/admin.gif" width="620" height="120"></p> <p align="center"><b><font size="6" face="Arial">Rezept eintragen</font></b></p> <center> <form method="POST" action="rezept_eintragen2.php" enctype="multipart/form-data"><p> <b><font face="Arial">Rezeptname: </font><font color="#FF0000" size="2" face="Arial"> <input type="text" name="rezeptname" size="31"></font></b></p> <p> <b><font face="Arial">Zutaten: <font size="2" color="#FF0000">(</font> </font><font color="#FF0000" size="2" face="Arial"> HTML Code ! ) ( <a href="beispiel_zutaten.html">Beispiel</a> )<br> </font><font face="Arial"><textarea rows="12" name="zutaten" cols="41"></textarea></font></b></p> <p> <b><font face="Arial">Zubereitung: <font color="#FF0000" size="2">( kein HTML )</font></font></b></p> <p> <b><font face="Arial"><textarea rows="12" name="zubereitung" cols="41"></textarea></font></b></p> <p> <b><font face="Arial">Kategorie:</font></b></p> <p> <font face="Arial"> <input type="radio" value="backrezepte" name="kategorie">Backrezepte<br> <input type="radio" value="kochrezepte" name="kategorie">Kochrezepte<br> <input type="radio" value="desserts" name="kategorie">Desserts<br> <input type="radio" value="weihnachten" name="kategorie">Weihnachten</font></p> <p> <b><font face="Arial">Link zum Rezeptbild: <font color="#FF0000">(</font> <a href="bildupload.php">Bildupload</a><font color="#FF0000"> )</font></font></b></p> <p> <input type="text" name="bild" size="34"></p> <p><b><font face="Arial"><input type="submit" value="Eintragen" name="B1"></font></b></p> </form> </center> <p> </p> <p align="center"><font face="Arial"><b>Zurück zum <a href="adminbereich.php">Adminbereich</a> !</b></font></p> <?php require('sql.php'); if (isset($_POST['delrezept'])) { echo"ICH bin im Löschblock!!!!"; mysql_query("delete from rezepte where rezeptname='".$_POST['rezeptname_alt']."'"); } if (isset($_POST['editrezept'])) { echo"ICH bin im Änderungsblock!"; $sql = 'UPDATE `usr_web48_1`.`rezepte` SET `rezeptname` = \''.$_POST['rezeptname'].'\', `zutaten` = \''.$_POST['zutaten'].'\', `zubereitung` = \''.$_POST['zubereitung'].'\', `bild` = \''.$_POST['bild'].'\' WHERE `rezepte`.`Id` = \''.$_POST['Id'].'\' LIMIT 1;'; mysql_query($sql) or die(mysql_error()); echo $sql; } ?> <center><b><br><br><font face="Arial"><h1>Rezepte:</h1><br><br></font> <font face="Arial"><h2>Backrezepte</h2></font> <form method="POST" action="rezept_eintragen.php"> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <?php $data2=mysql_query("select * from rezepte where kategorie = 'backrezepte'"); echo mysql_result($data2, 0); while ($row = mysql_fetch_array($data2, MYSQL_ASSOC)) { echo " <tr> <td><input name=\"rezeptname\" size=\"30\" value=\"$row[rezeptname]\"></td> <td><textarea rows=\"2\" name=\"zutaten\" cols=\"30\">$row[zutaten]</textarea></td> <td><textarea rows=\"2\" name=\"zubereitung\" cols=\"30\">$row[zubereitung]</textarea></td> <td><textarea rows=\"2\" name=\"bild\" cols=\"30\">$row[bild]</textarea></td> <td><input type=\"hidden\" name=\"Id\" value=\"$row[Id]\" size=\"20\"> <input type=\"submit\" value=\"Daten ändern\" name=\"editrezept\" size=\"20\"> <input type=\"submit\" value=\"Eintrag löschen\" name=\"delrezept\" size=\"20\"> </td> </tr> "; } ?> </table> </form> <font face="Arial"><h2>Kochrezepte</h2></font> <form method="POST" action="rezept_eintragen.php"> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <?php $data2=mysql_query("select * from rezepte where kategorie = 'kochrezepte'"); while ($row = mysql_fetch_array($data2, MYSQL_ASSOC)) { echo " <tr> <td><input name=\"rezeptname\" size=\"30\" value=\"$row[rezeptname]\"></td> <td><textarea rows=\"2\" name=\"zutaten\" cols=\"30\">$row[zutaten]</textarea></td> <td><textarea rows=\"2\" name=\"zubereitung\" cols=\"30\">$row[zubereitung]</textarea></td> <td><textarea rows=\"2\" name=\"bild\" cols=\"30\">$row[bild]</textarea></td> <td><input type=\"hidden\" name=\"rezeptname_alt\" value=\"$row[rezeptname]\" size=\"20\"> <input type=\"submit\" value=\"Daten ändern\" name=\"editrezept\" size=\"20\"> <input type=\"submit\" value=\"Eintrag löschen\" name=\"delrezept\" size=\"20\"> </td> </tr> "; } ?> </table> </form> <font face="Arial"><h2>Dessertrezepte</h2></font> <form method="POST" action="rezept_eintragen.php"> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <?php $data2=mysql_query("select * from rezepte where kategorie = 'desserts'"); while ($row = mysql_fetch_array($data2, MYSQL_ASSOC)) { echo " <tr> <td><input name=\"rezeptname\" size=\"30\" value=\"$row[rezeptname]\"></td> <td><textarea rows=\"2\" name=\"zutaten\" cols=\"30\">$row[zutaten]</textarea></td> <td><textarea rows=\"2\" name=\"zubereitung\" cols=\"30\">$row[zubereitung]</textarea></td> <td><textarea rows=\"2\" name=\"bild\" cols=\"30\">$row[bild]</textarea></td> <td><input type=\"hidden\" name=\"rezeptname_alt\" value=\"$row[rezeptname]\" size=\"20\"> <input type=\"submit\" value=\"Daten ändern\" name=\"editrezept\" size=\"20\"> <input type=\"submit\" value=\"Eintrag löschen\" name=\"delrezept\" size=\"20\"> </td> </tr> "; } ?> </table> </form> <font face="Arial"><h2>Weihnachtsrezepte</h2></font> <form method="POST" action="rezept_eintragen.php"> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <?php $data2=mysql_query("select * from rezepte where kategorie = 'weihnachten'"); while ($row = mysql_fetch_array($data2, MYSQL_ASSOC)) { echo " <tr> <td><input name=\"rezeptname\" size=\"30\" value=\"$row[rezeptname]\"></td> <td><textarea rows=\"2\" name=\"zutaten\" cols=\"30\">$row[zutaten]</textarea></td> <td><textarea rows=\"2\" name=\"zubereitung\" cols=\"30\">$row[zubereitung]</textarea></td> <td><textarea rows=\"2\" name=\"bild\" cols=\"30\">$row[bild]</textarea></td> <td><input type=\"hidden\" name=\"rezeptname_alt\" value=\"$row[rezeptname]\" size=\"20\"> <input type=\"submit\" value=\"Daten ändern\" name=\"editrezept\" size=\"20\"> <input type=\"submit\" value=\"Eintrag löschen\" name=\"delrezept\" size=\"20\"> </td> </tr> "; } ?> </table> </form> <p align='center'> </p> </td> </tr> <tr> <td width="100%"> <img border="0" src="../img/admin_unten.gif" width="620" height="50"></td> </tr> </table> </center> </div> </body> </html>
Link: http://davidlohmann.de/admin/rezept_eintragen.php
Vielleicht findest du ja einen Fehler.
Die Löschen-Funktion geht noch garnicht. -
Sieht eigendlich alles top aus... das einzige was mir noch aufgefallen ist, das du die ID als String überprüfst und nicht als Zahl...
Also auf ein neues.... einfach die If blöcke ersetzen
if (isset($_POST['delrezept'])) { echo"ICH bin im Löschblock!!!!"; mysql_query("delete from rezepte where `Id` = ".$_POST['Id'].""); } if (isset($_POST['editrezept'])) { echo"ICH bin im Änderungsblock!"; $sql = 'UPDATE `usr_web48_1`.`rezepte` SET `rezeptname` = \''.$_POST['rezeptname'].'\', `zutaten` = \''.$_POST['zutaten'].'\', `zubereitung` = \''.$_POST['zubereitung'].'\', `bild` = \''.$_POST['bild'].'\' WHERE `Id` = '.$_POST['Id'].' LIMIT 1;'; mysql_query($sql) or die(mysql_error()); echo $sql; }
PS: unterdrückst du irgendwo php Fehler ?
Kannst ja mal das ganz oben in php code schreiben... <? error_reporting(E_ALL); ?> -
Probier mal einen Eintrag zu ändern.
Er ändert immer den Eintrag 'Joghurt Kuchen'
Warum? -
Hab den Fehler...
Das <Form> is falsch platziert...
Es geht um alle Elemente... und dadurch überschreiben die 2ten Elemente die 1ten. Wobei die 2ten Elemente von den 3ten überschrieben werden...
Die unteren überschreiben immer die Oberen. Deshalb ist im endefekt nur die letzte Zeile von bedeutung und auch nur sie wird geändert!
Lösung: (nur für Backrezepte)
<font face="Arial"><h2>Backrezepte</h2></font> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <?php $data2=mysql_query("select * from rezepte where kategorie = 'backrezepte'"); echo mysql_result($data2, 0); while ($row = mysql_fetch_array($data2, MYSQL_ASSOC)) { echo " <form method="POST" action="rezept_eintragen.php"> <tr> <td><input name=\"rezeptname\" size=\"30\" value=\"$row[rezeptname]\"></td> <td><textarea rows=\"2\" name=\"zutaten\" cols=\"30\">$row[zutaten]</textarea></td> <td><textarea rows=\"2\" name=\"zubereitung\" cols=\"30\">$row[zubereitung]</textarea></td> <td><textarea rows=\"2\" name=\"bild\" cols=\"30\">$row[bild]</textarea></td> <td><input type=\"hidden\" name=\"Id\" value=\"$row[Id]\" size=\"20\"> <input type=\"submit\" value=\"Daten ändern\" name=\"editrezept\" size=\"20\"> <input type=\"submit\" value=\"Eintrag löschen\" name=\"delrezept\" size=\"20\"> </td> </tr> </form> "; } ?> </table>
Das <Form> muss oben und unten in die While schleife!
Beitrag zuletzt geändert: 21.10.2010 11:27:23 von cracker0dks -
Kein Ding... hab auch schon an mir gezweifelt xD eig. so ne kleinigkeit^^
Nochn paar Tipps:
1. Sql Statements immer über phpMyadmin (vermeidet syntaxfehler)
2. Immer
stattmysql_query($sql) or die(mysql_error());
sonst werden viele Fehler nicht Angezeigt.mysql_query($sql);
3. Redundanten Code vermeiden... du hast jetzt 3 oder 4 mal die gleiche Tabellenstrucktur! wenn du an einer was änderst musst du die änderung überall übernehmen! Ist nicht geschickt.
Lösung 1: lager die While schleife in eine fuction aus und übergebe die Rezeptkategorie
Lösung 2(eleganter): änder die sql Abfrage und Sortiere einfach nach Kategorie! Dann musst du alledrings den Tabellenkopf usw mit in die Schleife packen und auf änderungen der Kathegorie prüfen!
Durch Option 3 lässt sich auch scnell noch einfügen, dass man mehrere Einträge gleichzeitig ändern kann (über einen button) und fürs löschen einzelne Buttons oder auch mit Checkboxen!
Reingehaun!
Beitrag zuletzt geändert: 21.10.2010 11:43:30 von cracker0dks -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage