Supportnet Computer
Planet of Tech

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:

  $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

$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

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.
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

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):

<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")

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:

<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:

    <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:

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.

<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