Update sql mit PHP

Hallo wer kann mir helfen

ich habe ein programm entwickelt mit einer SQL-Datenbank um diese administrien zu können hätte ich folgende Seite geschrieben

Nummer 1

Spalte Preis_AE181A Preis_AE1954A Preis_AE2404 Preis_AE2404L Preis_AE2494 Preis_AE2514A Preis_AE2514L Preis_AE2794

Werteingabe Euro/mm/Stück/KG

Werterhöhung in %z.B. 1,10 für 10%

<?php if (isset($_POST['zahl']) && $_POST['prozent'] != "") {
if ($\_POST['zahl'] != "") { $vk = mysql\_pconnect($host, $user, $pw) or die ("Verindungsaufbau mit MYSQL-Server fehlgeschlagen!"); mysql\_select\_db($server, $vk) or die ("Verindungsaufbau mit Datenbank ist fehlgeschlagen!"); $sql = "UPDATE Haube\_test SET '".$spalte."' = '".$zahl."'"; $result = mysql\_query($sql, $vk); if ($result) { echo " Datensatz geändert!"; } else { echo " Keine Datenänderung!"; } mysql\_free\_result($result); mysql\_close($vk); } else { $vk = mysql\_pconnect($host, $user, $pw) or die ("Verindungsaufbau mit MYSQL-Server fehlgeschlagen!"); mysql\_select\_db($server, $vk) or die ("Verindungsaufbau mit Datenbank ist fehlgeschlagen!"); $sql = "UPDATE Haube\_test SET '".$spalte."' = '".$spalte\*$prozent."'"; $result = mysql\_query($sql, $vk); if ($result) { echo " Datensatz geändert!"; } else { echo " Keine Datenänderung!"; } mysql\_free\_result($result); mysql\_close($vk); } } else { if (isset($\_POST['senden'])) { echo "Bitte einen Wert eingeben!"; } } ?\> jedoch erfolgt keine Änderung der Datenbank PHP Version 4.3.1 SQL Version 4.0.15 phpMyAdmin - 2.8.2 wo ist mein Gedankenfehler ich denke in dieser Zeile $sql = "UPDATE Haube\_test SET '".$spalte."' = '".$zahl."'"; finde Ihn aber einfach nicht Recht herzlichen Dank wolfgang

Hi,
"UPDATE Haube_test SET „.$spalte.“ = ".$zahl;

ausserdem lies mal was zum Thema SQL Injection.

Gruss
Q

Hallo,

Hallo alx

vielen Dank für deine Antwort

Längeren Quelltext bim nächsten Mal bitte in pre-Tags setzen,
ist leichter zu lesen.

ich werde mich bemühen!

Wenn du in deiner Fehlerbehandlung („Nicht geändert“) noch ein
echo "$sql: ".mysql_error() einfügst, bekommst du auch mit,
warum es nicht funktioniert hat und wie der an mySQL geschicke
Befehl aussah.
Vermutung: register_globals wird aus sein und damit $spalte
und $zahl leer, oben verwendest du doch auch $_POST, warum
hier nicht ?

danke jetzt weiß ich warum ich habe nicht die update sondern select Befehl
würdest du dann eher diesen Befehl schreiben

$sql = "UPDATE Haube_test SET $_POST[’$spalte’] = $_POST[’$zahl’];

Das du die Eingaben prüfen solltest, bzw. mit
mysql_real_escape_string evtl. „gefährliche“ Sonderzeichen
maskieren solltest um SQL-Injections zu vermeiden wurde schon
geschrieben.

ja das ist mir klar aber es gibt nur 3 Personen die auf diese Datei Passwortbeschrängt zugreifen dürfen daher sollte dies kein Problem sein

Das die Update-Zeile den Wert für ALLE Zeilen ändert ist dir
bewusst ? Evtl. fehlt da noch ein WHERE id=…

ja das ist mir bewußt es gibt in dieser Datei nur eine Zeile andere Dateien haben dann mehere da werde ich auch die ID nummer eingeben

Vielen Dank
Höglinger

Hallo Quaser

der Befehl kann eigendlich nicht ganz stimmen fehlt da nicht noch am ende nach $zahl etwas?
ausserdem werde ich es jetz mal mit
$sql = "UPDATE Haube_test SET $_POST[’$spalte’] = $_POST[’$zahl’];
versuchen

"UPDATE Haube_test SET „.$spalte.“ = ".$zahl;

mfg
Höglinger

ich habs

$sql = 'UPDATE Haube_test SET ‚.$_POST[‚spalte‘].‘ = ‚.$_POST[‚zahl‘].‘ ';

$sql = 'UPDATE Haube_test SET ‚.$_POST[‚spalte‘].‘ = ‚.$_POST[‚spalte‘].‘ * ‚.$_POST[‚prozent‘].‘ ';

Dein Tip mit echo "$sql: ".mysql_error() hat mir geholfen
Recht herzlichen Dank

Höglinger

Hallo Wolfgang,

danke jetzt weiß ich warum ich habe nicht die update sondern
select Befehl
würdest du dann eher diesen Befehl schreiben

$sql = "UPDATE Haube_test SET $_POST[’$spalte’] =
$_POST[’$zahl’];

Dein Quoting war doch schon in Ordnung, also

$sql = "UPDATE Haube\_test SET ".$\_POST['spalte']." = '".$\_POST['zahl']."'";

zumindest wenn in $zahl einmal etwas anderes als Ziffern steht, würde ich das drin lassen. Ansonten sind 2 $ zu viel bei dem Array-Index.

Alexander

wenn Zahl eine Zahl ist, dann stimmt es. Wenn Zahl allerdings ein String ist , muss es mit Hochkomma eingeschlossen werden.

Aber Zahl ist ja wohl bei dir in der Datenbank kein String - oder?

gruss
Q

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo alexander

zumindest wenn in $zahl einmal etwas anderes als Ziffern
steht, würde ich das drin lassen. Ansonten sind 2 $ zu viel
bei dem Array-Index.

also $zahl stehen nur Zahlen aber eine bescheidene andere frage
wäre es nicht besser nach erfolgten Datenbankänderung die Variablen zu leeren um eine Reloadfalle zu vermeiden?

Hallo Wolfgang,

frage
wäre es nicht besser nach erfolgten Datenbankänderung die
Variablen zu leeren um eine Reloadfalle zu vermeiden?

Beim Reload wird das Script sowieso „neu“ von Anfang an abgearbeitet, d.h. das Leeren der Variablen bringt an dieser Stelle nichts.
Einfachste Möglichkeit, das neu Senden der Daten zu verhindern, ist nach dem Speichern auf eine andere Seite / Das Formular zur Redirecten, weil dann wird nur diese Seite neu geladen, also im „Speichern“ Teil KEINE Ausgaben machen und per Header(„Location: formular.php“); wieder auf die Formularanzeige umleiten.
Komplizierte Variante ist das Übergeben einer Zufallszahl per hidden-Formularfeld. Diese Zahl muss man dann zusätzlich in der Session auf dem Server speichern und prüfen, ob diese Übereinstimmt. Mit jedem „Ausgeben“ des Formulars erzeugt man dann eine neue Zahl, so das diese Zufallszahl nur einmal zum Speichern benutzt werden kann.

Alexander