MySQL daten per Formular ändern
hossi
- php
1 ChrisB0 suit0 Frank (no reg)0 hossi0 suit0 Frank (no reg)
Hallo,
ich habe ein Script, mit dem ich Daten in einer MySQl bearbeiten möchte. Das Laden der Daten in die Formularfelder klappt schon mal, nur leider der update-Vorgang nicht :(
Ich habe schon unzählige dinge probiert, nichts hat geholfen. Vielleicht könnt ihr mal über mein Script drüberschauen :)
<?
$host = "localhost";
$user = "root";
$password = "";
$dbname = "mangel";
$tabelle = "garant";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "select * from $tabelle";
$res = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);
while ($ausgabe = mysql_fetch_array ($res))
{
echo "<form name='form1' method='post' action='$PHP_SELF'>";
echo "<input type='text' name='id' value='$ausgabe[id]'>";
echo "<input type='text' name='handwerker' value='$ausgabe[handwerker]'>";
echo "<input type='text' name='einheit' value='$ausgabe[einheit]'>";
echo "<input type='submit' name='submit' value='Ändern'>";
echo "</form>";
}
if ($submit) {
$update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";
$updaten = mysql_query($update) or die(mysql_error());
if (!$updaten)
echo "Fehler aufgetreten!";
else
{
echo "Eintrag erfolgreich";
}
}
?>
Greetings hossi
Hi,
if ($submit) {
Es gibt kein $submit.
Stelle bitte erstens das error_reporting auf E_ALL und display_errors auf on, damit PHP dich auf solche Fehler hinweisen kann.
Und dann informiere dich, was register_globals=off bedeutet, und wie man korrekt auf von aussen kommende Parameter zugreift.
MfG ChrisB
Hi,
der kleine Yoda in mir[1] verlangt nach Komplettierung:
if ($submit) {
Es gibt kein $submit.
"Nein! $_POST es oder $_POST es nicht. Es gibt kein $submit."
Cheatah, SCNR
[1] So groß zu werden, wie habe ich das geschafft bei solcher Nahrung?
Hi,
der kleine Yoda in mir[1] verlangt nach Komplettierung:
if ($submit) {
Es gibt kein $submit."Nein! $_POST es oder $_POST es nicht. Es gibt kein $submit."
Cheatah, SCNR
[1] So groß zu werden, wie habe ich das geschafft bei solcher Nahrung?
Hi,
danke das war schon mal ein guter Tip :)
Jetzt ist es leider nur so, dass er mir die erste ID in der DB (Also die 1) mit einer 0 = NULL überschreibt..
<?
$host = "localhost";
$user = "root";
$password = "";
$dbname = "mangel";
$tabelle = "garant";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "select * from $tabelle";
$res = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);
while ($ausgabe = mysql_fetch_array ($res))
{
echo "<form name='form1' method='post' action='$PHP_SELF'>";
echo "<input type='text' name='id' value='$ausgabe[id]'>";
echo "<input type='text' name='handwerker' value='$ausgabe[handwerker]'>";
echo "<input type='text' name='einheit' value='$ausgabe[einheit]'>";
echo "<input type='submit' name='submit' value='Ändern'>";
echo "</form>";
}
if ($_POST[submit]) {
$update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";
$updaten = mysql_query($update) or die(mysql_error());
if (!$updaten)
echo "Fehler aufgetreten!";
else
{
echo "Eintrag erfolgreich";
}
}
?>
Hi,
bitte zitiere sinnvoll, nicht einfach alles.
if ($_POST[submit]) {
submit gibt es nicht.
Jetzt ist es leider nur so, dass er mir die erste ID in der DB (Also die 1) mit einer 0 = NULL überschreibt..
$update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";
$updaten = mysql_query($update) or die(mysql_error());
Du updatest ja auch einfach wahllos alle Datensätze.
MfG ChrisB
if ($_POST[submit]) {
submit gibt es nicht.
Ja, darum castet PHP auch automatisch nicht existierende Konstanten zu Strings - dass (und warum) das schlechter Stil ist, weiß die Dokumentation.
mit einer 0 = NULL überschreibt..
0 != '' != NULL
Du updatest ja auch einfach wahllos alle Datensätze.
Und überschreibst die Felder handwerker, einheit und id vermutlich jeweils mit einem Leerstring. Ich geh aber davon aus, dass nicht in jedem der Felder tatsächlich ein String erwartet wird.
if ($_POST[submit]) {
submit gibt es nicht.
Ja, darum castet PHP auch automatisch nicht existierende Konstanten zu Strings - dass (und warum) das schlechter Stil ist, weiß die Dokumentation.
mit einer 0 = NULL überschreibt..
0 != '' != NULL
Du updatest ja auch einfach wahllos alle Datensätze.
Und überschreibst die Felder handwerker, einheit und id vermutlich jeweils mit einem Leerstring. Ich geh aber davon aus, dass nicht in jedem der Felder tatsächlich ein String erwartet wird.
Warum gibts denn submit nicht?
echo "<input type='submit' name='submit' value='Ändern'>";
Da heißt mein submit-feld ja auch submit .. ?!
Ja, ich update alle Datensätze, aber was ist daran falsch, das versteh ich nicht?!
Denn, wenn ich die Daten lade, stehn Sie ja auch im Formular drinnen und wenn sich daran nichts ändert, schreibt er einfach den selben Wert wieder in die DB, oder?!
Warum gibts denn submit nicht?
Weil ich in deinem code kein
define('submit', 'foo');
oder vergleichbares sehe.
Da heißt mein submit-feld ja auch submit .. ?!
Ja, da bestreitet keiner.
Ja, ich update alle Datensätze, aber was ist daran falsch, das versteh ich nicht?!
Ich würde meinen, es wäre vernünftiger nur einen Datensatz upzudaten - und zwar den mit der richtigen ID.
Denn, wenn ich die Daten lade, stehn Sie ja auch im Formular drinnen und wenn sich daran nichts ändert, schreibt er einfach den selben Wert wieder in die DB, oder?!
Nein, SQL interessiert sich nicht im geringsten dafür, was PHP treibt.
Wenn du da DELETE FROM garant
notierst, leert das DBMS beinhart diese Tabelle, egal welchen Datensatz du vorher gelesen hast.
Die logik zu bestimmen, ob der Request durch das Formular sinnvoll war, obliegt dir als Autor des Scripts.
Ich würde meinen, es wäre vernünftiger nur einen Datensatz upzudaten - und zwar den mit der richtigen ID.
Gut, dann werde ich versuchen, zuerst eine ID festzulegen die ich bearbeiten möchte und dann den Datensatz zu aktualisieren.
Hi,
Warum gibts denn submit nicht?
echo "<input type='submit' name='submit' value='Ändern'>";
> Da heißt mein submit-feld ja auch submit .. ?!
nein, es heißt 'submit', nicht submit. Und das liegt nicht am HTML-Code.
> Ja, ich update alle Datensätze, aber was ist daran falsch, das versteh ich nicht?!
Es gibt kein $handwerker. Es gibt kein $einheit. Es gibt kein $id. Es gibt leider wohl auch kein $mitdenken.
Cheatah
--
X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes
Hallo,
"Nein! $_POST es oder $_POST es nicht. Es gibt kein $submit."
danke das war schon mal ein guter Tip :)
ja, leider hast du ihnnicht wirkich verstanden, sondern nur mechanisch auf deinen submit-Parameter angewendet. Und das auch noch falsch (der Fehlertoleranz von PHP ist zu verdanken, dass es dennoch wie beabsichtigt funktioniert).
if ($_POST[submit])
Die benannte Konstante submit ist nirgends definiert; PHP ist von sich aus so gnädig, stattdessen eine namenlose Stringkonstante mit dem Wert 'submit' anzunehmen. Richtig ist es trotzdem nicht.
Jetzt ist es leider nur so, dass er mir die erste ID in der DB (Also die 1) mit einer 0 = NULL überschreibt..
Und das wundert dich?
$update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";
Die Variablen $handwerker, $einheit, $id existieren ebensowenig wie $submit. Was also trägt PHP hier in den Query-String ein?
Ciao,
Martin
"<del>register_globals</del><ins>security issues</ins> i sense" - frei nach Yoda :p
Hallo, was genau heisst "klappt nicht"? Davon gibt es etwa 221 verschiedene Varianten.
Und von angemessener Fehlerbehandlung ist nichts in Sicht. :-(
Ciao, Frank
Hallo, was genau heisst "klappt nicht"? Davon gibt es etwa 221 verschiedene Varianten.
Und von angemessener Fehlerbehandlung ist nichts in Sicht. :-(
Ciao, Frank
Klappt nicht hieß, er übernimmt einfach nicht die Änderungen die ich in einem jeweiligen Formular eingetragen habe in die Datenbank.
Stand jetzt ist aber, dass er die erste ID in der DB (welche mit 1 beginnt) mit einer 0 = NULL überschreibt.
Klappt nicht hieß, er übernimmt einfach nicht die Änderungen die ich in einem jeweiligen Formular eingetragen habe in die Datenbank.
Selbst dafür gibt es noch genügend "Fehler"-Varianten, aber meine allwissende Glaskugel hat heute keine Lust mehr.
Wie wär's damit:
Stand jetzt ist aber, dass er die erste ID in der DB (welche mit 1 beginnt) mit einer 0 = NULL überschreibt.
Da ist schonmal mindestens ein grober Fehler drin, ID sollte eindeutig und unveränderlich sein, NULL sollte nicht erlaubt sein.
UPDATE garant SET handwerker = 'abc', einheit = 'def', id = ''
tut genau was?
Ciao, Frank