Update funktion

aTa

Erfahrenes Mitglied
Hi,
ich hab ein Problem mit meinem Scriptteil zum Updaten von DB Einträgen.

Und zwar gibt er mir den DB-Inhalt korrekt in den Inputfeldern aus, aber wenn ich dann was ändern will dann passiert nix..
Woran könnte das liegen

HIer mal etwas Code:

PHP:
$abfrage = "SELECT * FROM news WHERE id=$id";
  $ergebnis = mysql_query($abfrage);
  while($row = mysql_fetch_object($ergebnis))
  {
  
  echo "<form action=\"".$PHP_SELF."?action=edit\" method=\"post\" name=\"editieren\">";
  echo $row->id;
  echo "<input type=\"text\" value=\"".$row->titel."\" name=\"id\">";
  echo "<input type=\"submit\" value=\"ok\">";
  echo "</form>";
 }
 if ($_POST['submit'] == "ok") {
 $result = mysql_query("UPDATE news SET titel='$titel 'WHERE id=$id");
}

?>
 
Versuchs mal so:

PHP:
 $abfrage = "SELECT * FROM news WHERE id=$id LIMIT 1";
  $ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
  
  
  echo "<form action=\"".$PHP_SELF."?action=edit\" method=\"post\" name=\"editieren\">";
  echo $row->id;
  echo "<input type=\"text\" value=\"".$row->titel."\" name=\"id\">";
  echo "<input type=\"submit\" value=\"ok\">";
  echo "</form>";

if ($_POST['submit'] == "ok") {
$result = mysql_query("UPDATE news SET titel='".$_POST['id']."' WHERE id=$id LIMIT 1");
}

?>
 
Das hat nix gebracht und das komische ist, dass er in Zeile 7
[7] Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource
das bringt... und ich weiss nicht wieso...
Zeile 7 ist die mit $row....
 
Versuchs mal so:

PHP:
 $abfrage = "SELECT * FROM news WHERE id='$id' LIMIT 1";
  $ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
  
  
  echo "<form action=\"".$PHP_SELF."?action=edit\" method=\"post\" name=\"editieren\">";
  echo $row->id;
  echo "<input type=\"text\" value=\"".$row->titel."\" name=\"id\">";
  echo "<input type=\"submit\" value=\"ok\">";
  echo "</form>";

if ($_POST['submit'] == "ok") {
$result = mysql_query("UPDATE news SET titel='".$_POST['id']."' WHERE id='$id' LIMIT 1");
}

?>


Gibts die Tabelle mit den Spalten auch?
Wenn das nciht klappt lass dir doch mal $abfrage ausgeben und guck was dort drin steht!
 
So folgendes,
ich versuche mich gerade an der Updatefunktion aber die funktioniert einfach nicht...
Wenn ich die Daten aber mit GET übergebe dann stehen die änderungen oben in der Browserzeile, werden aber nicht in die DB geschrieben.
Ich bin echt am verzweifeln und hoffe mir kann jemand helfen!

Danke!
 
sovielleicht
Code:
$abfrage = "SELECT * FROM news WHERE id=$id"; 
  $ergebnis = mysql_query($abfrage); 
  while($row = mysql_fetch_object($ergebnis)) 
  { 
   
  echo "<form action=\"".$PHP_SELF."?action=edit\" method=\"post\" name=\"editieren\">"; 
  echo $row->id; 
  echo "<input type=\"text\" value=\"".$row->titel."\" name=\"id\">"; 
  echo "<input type=\"submit\" value=\"ok\">"; 
  echo "</form>"; 
} 
if ($_POST['submit'] == "ok") { 
$result = mysql_query("UPDATE `news` SET `titel`='$titel' WHERE id=$id"); 
} 

?>
was für fehler kommen den wenn du
error_reporting(E_ALL);
machst ?
 
Hallo!

Dein versuch mit GET zeigt dir ja dass die Daten gesendet aber nicht empfangen werden.
Mögliche Ursache: register_globals=OFF.
Abhilfe: Superglobale verwenden.

Gehe ich recht in der Annahme dass die ID im SELECT durch ein anderes Formular auch per POST übergeben wird?
PHP:
$abfrage = "SELECT * FROM news WHERE id='".$_POST['id']."'"; 
$ergebnis = mysql_query($abfrage); 
while($row = mysql_fetch_object($ergebnis)) 
{ 
 
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\" name=\"editieren\">"; // welchen Sinn soll hier action=edit bezwecken?
echo $row->id; 
echo "<input type=\"hidden\" value=\"".$row->id."\" name=\"old_id\">";
echo "<input type=\"text\" value=\"".$row->titel."\" name=\"titel\">"; 
echo "<input type=\"submit\" value=\"ok\" name=\"edit\">"; 
echo "</form>"; 
} 
if (isset($_POST['edit']) { 
$result = mysql_query("UPDATE news SET titel='".$_POST['titel']."' WHERE id='".$_POST['old_id']."'"); 
} 
 
?>
Gruss Dr Dau
 
weiss nicht, ob die letzte Lösungen schon geholfen hat.

Wenn ich dich richtig verstehe, willst du eine Tabellenzeile auslesen, und Daten ändern.
Wenn ich deinen Code anschaue, sieht das für mich so aus:
  1. Du liesst die DB aus, schreibst sie in ein Formular.
  2. Änderst die Daten im Formular, und sendest sie an das PHP-Script
  3. Du liest die Daten aber wieder ein, und überschreibst deine Ausgabe

Deine Idee mit ?action=edit war gut, aber nicht zu Ende programmiert.

Hier (aus dem Handgelenk in 5 min geschrieben, und sicher fehlerhaft) meine mögliche Lösung
PHP:
PHP-Code:
if ($_POST[action]=="edit" && $_GET[submit]=="ok") {
  $result = mysql_query("UPDATE news SET titel='$_GET[titel]' WHERE id=$_GET[id]"); 
}
else {
$abfrage = "SELECT * FROM news WHERE id=$id"; 
  $ergebnis = mysql_query($abfrage); 
  while($row = mysql_fetch_object($ergebnis)) 
  { 
   
  echo "<form action=\"".$PHP_SELF."?action=edit\" method=\"GET\" name=\"editieren\">"; 
  echo $row->id; 
  echo "<input type=\"text\" value=\"".$row->titel."\" name=\"id\">"; 
  echo "<input type=\"submit\" value=\"ok\">"; 
  echo "</form>"; 
} 
}

?>
 
Stimmt, die Update Query muss natürlich vor der Select Query ausgeführt werden. :-(
Trotzdem sollte er nicht $PHP_SELF sondern $_SERVER['PHP_SELF'] verwenden (Stichwort register_globals=OFF).
Wenn ich mich nicht irre, wird aber als ID (Name) der Wert von Titel (Value) übergeben.
Darum hatte ich die ID in ein Hidden Feld gepackt..... die soll man ja eh nicht ändern können, dient aber zur eindeutigen Zuweisung.
Und wenn man schon Daten per GET übermittelt, sollte man sich auch entsprechend abfragen (if($_GET['action']=="edit".....).
Trotzdem verstehe ich den Sinn von action=edit nicht, schliesslich langt es dem Submit Button ein eindeutigen Namen zuzuweisen (s.o.).
Ausserdem hat method=get den Nachteil, dass anschliessend die Adressleiste vom Browser "unschön" aussieht. ;)
 
Zurück