Supportnet / Forum / Skripte(PHP,ASP,Perl...)
MySQL UPDATE Befehl- Probleme
Frage
Nachdem nun nen halber Tag vergeblich für die UPDATE Funktion draufgegangen ist und ich schon haufenweise Tutorials durchgesehen habe, hoffe ich nun hier eine Lösung zu finden.
Ich lade in ein Formular Daten aus einer Datenbank, was jetzt auch wunderbar funktioniert. Jetzt will ich mit Hilfe des UPDATE Befehls meine Datenbank aktualisieren, aber es geht einfach nicht. Mein Code ist folgender:
[code]
<?php
include ("dbconnect.php")
if ($ed_film=="Speichern")
{
$sql = UPDATE filme SET `filmtitel`='".$ed_titel."' WHERE ID='$edit_ID'";
}
?>
[/code]
Dabei ist $ed_titel die Variable, die den Wert aus dem Formular enthält und $edit_ID die aktuelle ID von dem zu bearbeitenden Formular.
Wenn ich mir mit echo die Var. sql ausgeben lasse, dann erscheint z.B.:
UPDATE filme SET `filmtitel`='film7' WHERE `ID`=''
Egal welche Form ich auch wähle (mit oder ohne Hochstriche usw.) er zeigt mir nie den Wert von edit_ID bei der Ausgabe an. Wenn ich aber echo $edit_ID schreibe, zeigt er mir den korrekten Wert an. Ich bekomme es einfach nur nicht hin, das richtig mit den UPDATE Befehl zu verbinden :-(((((.
Wenn ich die WHERE Klausel weglassen würde, dann setzt er mir alle Filmtitel auf z.B. film7. Es liegt also an WHERE.
SUCHE HILFE!!! :-((
Ines
Antwort 1 von Nessus
Hi,
da hättest Du aber selbst darauf kommen können:
kann nicht funktionieren,
sollte gehen...
Vorrausgesetzt die Var $edit_ID wird korrekt ausgegeben. Das kannst Du mit einem einfachen echo "$edit_ID"; checken.
HTH
Nessus
da hättest Du aber selbst darauf kommen können:
$sql = UPDATE filme SET `filmtitel`='".$ed_titel."' WHERE ID='$edit_ID'";
kann nicht funktionieren,
$sql = UPDATE filme SET `filmtitel`='".$ed_titel."' WHERE ID='.$edit_ID.'";
sollte gehen...
Vorrausgesetzt die Var $edit_ID wird korrekt ausgegeben. Das kannst Du mit einem einfachen echo "$edit_ID"; checken.
HTH
Nessus
Antwort 2 von semi
Eigentlich sollten alle drei Varianten funktionieren
Gruß,
Michael
$sql = "UPDATE filme "
. "SET filmtitel='$ed_titel' "
. "WHERE ID='$edit_ID'";
$sql = "UPDATE filme "
. "SET filmtitel='" . $ed_titel . "' "
. "WHERE ID='" . $edit_ID . "'";
$sql = "UPDATE filme "
. "SET filmtitel='{$ed_titel}' "
. "WHERE ID='{$edit_ID}'";
Ist ID bei $edit_ID tatsächlich in Großbuchstaben?Gruß,
Michael
Antwort 3 von Ines
Ja, das hatte ich auch schon so. geht einfach nicht :-(. Hab grad festgestellt, dass
vor meiner if Schleife (also vor dem anklicken auf "Speichern") problemlos ausgegeben wird, aber in meiner
Schleife, der Wert nicht mehr angezeigt wird (er ist irgendwie verloren gegangen). Die Var. edit_ID erhalte ich per GET-Methode über die URL. Wieso ist sie auf ein mal verloren, wenn ich auf einen Button klicke? Meine Datei besteht zuerst aus nur html, dann nur php und dann wieder html. Kann es damit zusammenhängen?
Ines
echo $edit_ID;
vor meiner if Schleife (also vor dem anklicken auf "Speichern") problemlos ausgegeben wird, aber in meiner
Schleife, der Wert nicht mehr angezeigt wird (er ist irgendwie verloren gegangen). Die Var. edit_ID erhalte ich per GET-Methode über die URL. Wieso ist sie auf ein mal verloren, wenn ich auf einen Button klicke? Meine Datei besteht zuerst aus nur html, dann nur php und dann wieder html. Kann es damit zusammenhängen?
Ines
Antwort 4 von semi
Zitat:
Wieso ist sie auf ein mal verloren, wenn ich auf einen Button klicke?
??? Du schreibst, dass $edit_ID vor irgendeiner Schleife korrekt ausgegeben wird. Da geht nichts verloren.Wieso ist sie auf ein mal verloren, wenn ich auf einen Button klicke?
Wie sieht der Code aus?
Antwort 5 von Nessus
Bist Du auf Antwort 1 eingegangen?
Semi hat recht, alle 3 Möglichkeiten funktionieren, aber Du wolltest in einem Statement verschiedene Schreibweisen unterbringen, das gibt sehr oft Probleme.
Ansonsten Code her....
Nessus
Semi hat recht, alle 3 Möglichkeiten funktionieren, aber Du wolltest in einem Statement verschiedene Schreibweisen unterbringen, das gibt sehr oft Probleme.
Ansonsten Code her....
Nessus
Antwort 6 von Ines
Ja, alle 3 Möglichkeiten von semi hatte ich schon vor meinem Posting probiert und auch danach noch mal. Ohne Erfolg. Inzwischen hab ich wie gesagt festgestellt, dass es an meiner Variable $edit_ID liegt, dessen Wert irgendwie "verloren" geht, wenn ich auf meinen Button "Speichern" klicke. Deshalb weiss er nicht, bei welcher ID die Änderung erfolgen soll. Also, ich poste mal mein Script (gekürzt und kommentiert):
Ich weiss, ist nicht wenig, aber kürzer wäre sinnlos.
Dann hoffe ich, dass ihr mir helfen könnt?
Ines
<html>
<head>
<title>Film editieren</title>
</head>
<body>
<form action="<?=$PHP_SELF?>" method="post">
<table width="587" cellpadding="0" cellspacing="4">
<?php
include ("dbconnect.php");
echo ("aktuelle ID: ".$edit_ID."<br>"); //wird per GET aus der URL in diese
//Datei übermittelt (erfolgreich)
while($row=mysql_fetch_array($res)) //liesst aus der aktuellen ID
{ //die gesamte Reihe der MySQL Tabelle aus
if ($row["ID"]==$edit_ID)
{
$edit_titel=$row["filmtitel"]; //Textfeld
$edit_anzahl=$row["anzahl_cd"]; //Auswahlmenü, es folgen noch mehr Spalten,
..... //aus Platzgründen gekürzt
}
}
?>
<tr>
<td width="167" height="23" align="left" class="normal">Filmtitel:</td>
<td width="321"><input name="ed_titel" value="<?php echo $edit_titel?>" type="text" size="50" maxlength="100"></td>
</tr>
<tr> // hier folgen jetzt noch einige Zeilen Code,
..... //die nur den Inhalt der MySQL Tabelle in das
..... //Formular einlesen (alles ok)
</tr>
</table>
</form>
<?php
echo "edit_ID: $edit_ID"; //nur als Kontrolle noch mal, die Var. $edit_ID wird korrekt ausgegeben
if ($ed_film == "Speichern")
{
echo "noch mal edit_ID anzeigen : $edit_ID"; //zeigt den Wert nicht mehr an (bleibt leer)
$sql = "UPDATE filme SET `filmtitel`='".$ed_titel."' WHERE ID='.$edit_ID.'";
if (@mysql_query($sql))
{....} //is ja egal, was nun kommt
}
?>
<br>
</body>
</html>
Ich weiss, ist nicht wenig, aber kürzer wäre sinnlos.
Dann hoffe ich, dass ihr mir helfen könnt?
Ines
Antwort 7 von semi
Trifft dies jemals zu?
if ($ed_film == "Speichern")
if ($ed_film == "Speichern")
Antwort 8 von semi
Noch etwas. Es fehlen zwei Anführungszeichen hinter ID=' oder die Punkte bei .$edit_ID. sind zu viel.
$sql = "UPDATE filme SET `filmtitel`='".$ed_titel."' WHERE ID='" .$edit_ID. "'";Antwort 9 von Ines
Ja, war wohl doch nicht so schlau zu kürzen ;-).
"Speichern" ist mein Button im Formular, entsprechender Code ist hier:
Antwort 8 hab ich auch befolgt, aber ohne Erfolg.
Ines
"Speichern" ist mein Button im Formular, entsprechender Code ist hier:
<tr>
<td height="61" align="left" class="normal"> </td>
<td><input type="submit" name="ed_film" value="Speichern">
<input type="reset" name="felder_loeschen" value="Eintragungen verwerfen"></td>
</tr>
</table>
</form>
Antwort 8 hab ich auch befolgt, aber ohne Erfolg.
Ines
Antwort 10 von Ines
Hallo!
Habe gerade folgendes gemacht. Ich habe ein weiteres Formularfeld erzeugt, in dem die aktuelle ID ausgegeben wird, wenn man in das Editierformular geht:
An der Stelle, wo das Update erfolgen soll, steht nun:
Jetzt lassen sich problemlos Änderungen vornehmen. Aber es ist ja nicht mein Ziel die ID anzeigen zu lassen. Aber vielleicht hilf jemanden diese Erscheinung weiter und weiss vielleicht, wo mein Fehler liegt?
Ines
Habe gerade folgendes gemacht. Ich habe ein weiteres Formularfeld erzeugt, in dem die aktuelle ID ausgegeben wird, wenn man in das Editierformular geht:
<tr>
<td width="167" height="23" align="left" class="normal">aktuelle ID:</td>
<td width="321"><input name="ed_ID" value="<?php echo $editneu_ID ?>" type="text" size="50" maxlength="100"></td>
</tr>
An der Stelle, wo das Update erfolgen soll, steht nun:
$sql = "UPDATE filme SET `filmtitel`='".$ed_titel."' WHERE ID='".$ed_ID."'";
Jetzt lassen sich problemlos Änderungen vornehmen. Aber es ist ja nicht mein Ziel die ID anzeigen zu lassen. Aber vielleicht hilf jemanden diese Erscheinung weiter und weiss vielleicht, wo mein Fehler liegt?
Ines
Antwort 11 von semi
Sorry, einen Fehler sehe ich auch nicht.
Das hier ist mir unklar:
Teste mal
echo ($ed_film == "Speichern");
echo (strcmp($ed_film,"Speichern")==0)
Gruß,
Michael
Das hier ist mir unklar:
echo "edit_ID: $edit_ID";//nur als Kontrolle noch mal, die Var. $edit_ID wird korrekt ausgegeben
if ($ed_film == "Speichern")
{
echo "noch mal edit_ID anzeigen : $edit_ID"; //zeigt den Wert nicht mehr an (bleibt leer)
Wenn es vor der Bedingung angezeigt wird und innerhalb des If-Blocks nicht mehr, dann war die Bedingung nicht erfüllt. Teste mal
echo ($ed_film == "Speichern");
echo (strcmp($ed_film,"Speichern")==0)
Gruß,
Michael
Antwort 12 von semi
Arghhhh! Ich glaube ich verstehe jetzt das Problem :-)
Du hast vorher die ID gar nicht im Formular ausgegeben.
Du hast erwartet, dass die Id immer noch gültig ist, wenn die Formulardaten vom Browser wieder zurückkommen (Klick auf "Speichern")
Geht nicht :-)
Du kannst die ID als ein verstecktes Feld im Formular unterbringen.
Du hast vorher die ID gar nicht im Formular ausgegeben.
Du hast erwartet, dass die Id immer noch gültig ist, wenn die Formulardaten vom Browser wieder zurückkommen (Klick auf "Speichern")
Geht nicht :-)
Du kannst die ID als ein verstecktes Feld im Formular unterbringen.
<input type=hidden name="ed_ID" value="<?php echo $edit_ID ?>">Antwort 13 von Ines
Semi, Du bist Gold wert :-))))) Genau das ist die Lösung. Ja ich dachte, dass die Var. erhalten bleibt beim Klick auf "Speichern". Wußte nicht, dass ich nen verstecktes Formular anlegen muss.
"type=hidden" ist das Zauberwort.
Vielen Dank!!!!!!!!!!!!!!!
Ines
"type=hidden" ist das Zauberwort.
Vielen Dank!!!!!!!!!!!!!!!
Ines

