Problem mit POST-Form in verbindung mit SQL-Update

  • Nabend und hallo an alle, das hier ist mein erster Post und ich habe auch gleich ein Problem, ich hoffe dass mir hier jemand helfen kann da ich langsam echt nicht mehr weiter weiss ^^

    Also, ich habe ein ziemlich großes Formular gebastelt dass ich per POST abschicke und das Script sich aus den vorhandenen sowie abgeschickten Daten einen SQL-Query bastelt der anschließend an den Server gesendet wird. Vom Prinzip und von der Praxis her funktioniert das auch Problemlos, nur nicht zu 100%. Es soll eine Art Eingabevereinfachung sein die es mir ermöglicht so ziemlich alle Daten einer bestimmten Tabelle zu bearbeiten, das Problem ist nur dass der Query richtig ist und das Formular keinen Fehler aufweist den ich entdecken kann, ein "echo" des Queries zeigte auch an das alles stimmt, allerdings wird nur ein Teil des Queries ausgeführt und der andere Teil bleibt unbearbeitet.

    Das Formular wird per PHP generiert, hier die wichtigen Teile:

    Daraus wird ein Formular gebastelt das dann mit einem Submit-Button bestätigt wird. Alles wird von der gleichen Datei bearbeitet, intressant wäre es zu überprüfen ob der Fehler daraus herruht.

    Jedenfalls wird nach dem Abschicken folgendes gemacht:

    Das Problem ist nun dass nur die Einheiten geändert werden wenn alles true ist, die Rohstoffe allerdings nicht. Es macht auch keinen Unterschied ob ich die Rohstoffe einfach direkt in den Query einfüge ohne dass die Schleife machen zu lassen, einen seperaten Query dafür erstelle oder es anderweitig update. Sobald ich aber die Einheiten rausnehme sodass nur noch die Rohstoffe geupdated werden geht es mit den Rohstoffen, wirklich nachvollziehbar ist das alles für mich nicht, da im $_POST-Array auch alle notwendigen Werte gegeben sind und der UPDATE-Query auch die Rohstoffupdates zusätzlich zu den Einheitenupdates enthält. Beides ist ine inem <form method="POST">Formular mit nur einem Submitbutton</form>. Aber sobald irgendwas zusätzlich zu den Rohstoffen da ist werden diese nicht geupdated.

    Ich hoffe jemand kann mir helfen oder sieht etwas das ich ständig übersehe, denn so ist meine programmierung nahezu nutzlos, es sollte alles mit einem Klick richtig bearbeitet werden.

    Danke für Hilfe und/oder Ideen schonmal im Vorraus! :)

  • Kannst du uns mal mal schreiben wie die Tabelle\n aussehen und wie die Queries aussehen? (brauchst ja nur ein echo von $query zu machen)

    PHP
    doquery("UPDATE {{table}} SET 
      ".$planetquery."
      id = id
      WHERE
      galaxy={$_POST['planet_gala']} AND system={$_POST['planet_sys']} AND planet={$_POST['planet_pos']} AND planet_type={$_POST['planet_type']} ",'planets');

    id = id ??? Sinn?

    Gruß crAzywuLf :D

  • Nabend,

    also das echo der Variable $planetquery sieht bspw. so aus:

    Code
    metal = metal + 5000000, crystal = crystal + 2100000, deuterium = deuterium + 500000, food = food + 3000000, water = water + 4000000, light_raider = light_raider + 5000, big_ship_cargo = big_ship_cargo + 4000,

    dadurch erklärt sich auch das id = id, ich weiss das es nicht schön ist aber es dient nur dazu dass es keinen Syntax Error gibt da bei der gesamte Query durch die foreach-Schleife generiert wird und so vor dem WHERE ein Komma wäre. Es fehlen auch mysql_real_escape_string in dem Code, allerdings ist das nicht die Ursache dafür dass dieser Teil

    Code
    light_raider = light_raider + 5000, big_ship_cargo = big_ship_cargo + 4000,


    bearbeitet wird, allerdings dieser nicht:

    Code
    metal = metal + 5000000, crystal = crystal + 2100000, deuterium = deuterium + 500000, food = food + 3000000, water = water + 4000000,

    Das gesamte HTML-Formular ist ziemlich groß und ich will es nicht unbedingt posten da es von PHP generiert wurde und optisch nicht sonderlich ansprechend ist.

    Die Einträge der Tabellen haben die gleichen Namen wie die Angegebenen im MySQL-Query oben. Daran liegt es also nicht. Einziger Unterschied zwischen den Einheiten und den Rohstoffen ist dass die Rohstoffe als DOUBLE und die Einheiten als INT in der DB gespeichert sind. Daran liegt es aber nicht.

    Wenn ich exakt den gleichen Query in PHPMyAdmin ausführe wird alles geupdated. Wenn ich mein Script ausführe aber nur die Einheiten...

  • Mit so wenig Code und Infos kann man dir einfach schlecht helfen...

    Falls du es dir anders überlegst, poste hier mal ein SHOW CREATE TABLE `x` von der Tabelle und einen vollständigen Query, sowie die Funktion doquery()

    Gruß crAzywuLf :D