[PHP] Werte in DB updaten klappt nicht

M

Mr. Snoot

Gast
Hio (mal wieder :D),

ich will Daten in meiner DB mit einem Formular überarbeiten. Das Formular sieht so aus:
PHP:
<?php

  $chg_wort = $_POST['Wort'];
?>

<form action="aendern.php" method="POST">

<br>Wort:
<br>
<input type="text" name="wort" maxlength="100" value="
<?php
  include("mysql.php");

  $abfrage = "SELECT wort FROM lexikon WHERE wort = '$chg_wort'";
  $ergebnis = mysql_query($abfrage);
  while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->wort;
    }
?>
">

<br>Definition:
<br>
<textarea cols="80" rows="35" name="definition">
<?php
  include("mysql.php");

  $abfrage = "SELECT definition FROM lexikon WHERE wort = '$chg_wort'";
  $ergebnis = mysql_query($abfrage);
  while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->definition;
    }
?>
</textarea>

<br><br>
<input type="submit" value="&Auml;ndern">
</form>
Und das Script:
PHP:
<?php


  include("mysql.php");
  
  $wort = $_POST['wort'];  
  $definition = $_POST['definition'];

  $aendern = "UPDATE lexikon SET wort = '$wort' WHERE wort = '$wort'";
  $update = mysql_query($aendern);

  $aendern = "UPDATE lexikon SET definition = '$definition' WHERE wort = '$wort'";
  $update = mysql_query($aendern);
  
  $abfrage = "SELECT * FROM lexikon";
  $ergebnis = mysql_query($abfrage);
  while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->wort;
    echo "<br>";
    echo $row->definition;
    echo "<br><br>";
    }
?>
Der Fehler kann eigentlich nicht am Formular liegen, denn wenn ich mir die Variablen $wort oder $definition die im Script verwendet werden soll hier mit echo ausgeben lassen, stehen da auch die neuen Werte drin. Aber die Werte in der DB werden nicht geändert.
 
du solltest natürlich den rückgabewert von mysql_query überprüfen, um zu sehen ob der befehl überhaupt geklappt hat. und dir falls nicht den fehler ausgeben lassen.


ansonsten ist dein erster update befehl sehr seltsam. du willst etwas auf den selben wert updaten der schon der der datenbank steht!? das ist absolut nicht sinnvoll ;).


abgesehen davon ist dein script so anfällig gegen sql injection. ich hoffe das du das nicht auf einem öffentlichen webserver benutzen willst.
 
Zuletzt bearbeitet:
Siberian..Husky schrieb:
ansonsten ist dein erster update befehl sehr seltsam. du willst einen etwas auf den selben wert updaten der schon der der datenbank steht!? das ist absolut nicht sinnvoll ;).
Ja, das ist wohl blöd :D

Okay, kann ich ja auch über die ID lösen
abgesehen davon ist dein script so anfällig gegen sql injection. ich hoffe das du das nicht auf einem öffentlichen webserver benutzen willst.
1. ist das nicht das vollständige Script und 2. tu ich nicht :)


Danke schön
 
ya würde das gleiche sagen wie Siberian..Husky.

1. du versucht das wort zu updaten und suchst nach einem eintrag der schon das neue wort beinhaltet, da kann was nicht stimmen..
ich würde dir empfehlen die ganezn WHERE abfragen über eine ID zu realisieren, sprich deine tabelle lexikon sollte so aussehen:
Code:
id int(10) unsigned auto_increment not_null etc.
wort varchar(255) ect.
definition mediumtext etc.

2. was hat es mit $chg_wort auf sich? Das ergibt keinen sinn?

3. mache nicht für jedes kleinen etwas einen SQL abfrage! mach einfach alles aufeinmal:
PHP:
<?php
// ausgabe formular
 $anfrage = "SELECT * FROM lexikon WHERE id = '$_POST[id]'"; // z.B.
$ergebnis = mysql_query($anfrage);
$ausgabe = mysql_fetch_objekt($ergebnis);
?>
<form action="aendern.php" method="POST"> 
<br>Wort:
<br>
<input type="text" name="wort" maxlength="100" value="<?php echo $ausgabe->wort; ?>" >
<br>Definition:
<br>
<textarea cols="80" rows="35" name="definition">
<?php echo $ausgabe->definition; ?>
</textarea>
<br><br>
<input type="hidden" name="id" value="<?php echo $_POST[id]; // oder auch _GET oder was auch immer! ?>" > 
<input type="submit" value="&Auml;ndern">
</form>

<?php
//Update
$anfrage = "UPDATE lexikon SET wort='$_POST[wort]', definition='$_POST[definition]' WHERE id='$_POST[id]' ";
$ergebnis = mysql_query($anfrage);
if($ergebnis){ echo "yuhu hat geklappt";}

edit: tja, da warste wohl schneller ^^
 
Zuletzt bearbeitet: (du warst schneller ^^)
Muuhmann schrieb:
2. was hat es mit $chg_wort auf sich? Das ergibt keinen sinn?
Das kommt von einer Seite davor, wo ich auswähle welchen Eintrag ich ändern möchte.
mache nicht für jedes kleinen etwas einen SQL abfrage! mach einfach alles aufeinmal
Jup, aber erstmal soll das ganze Zeug mal laufen, dann kommt das Tuning :D

Aber danke für den Hinweis.
 
Zuletzt bearbeitet:
Zuletzt bearbeitet von einem Moderator: (Lexikon-Link korrigiert)
Jup danke. Das Script ist abgesichert - wird aber auch nur von mir verwandt.
 

Ähnliche Themen

M
Antworten
10
Aufrufe
1.582
Mr. Snoot
M
Zurück
Oben