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:
$x = 0;
$formular .= '<tr><td colspan="8" align="center" class="c">Rohstoffe</td></tr><tr>';
//Das Array $rohstoffe umfasst 5 Einträge. $id stellt den Namen des Rohstoffs in der DB dar, $name ist der Name der im Formular erscheint.
foreach($rohstoffe as $id => $name){
$formular .= '<td class="x">'.$name.'</td><td class="x"><input id="'.$id.'" type="text" name="'.$id.'" size="8" maxlength="8" value="'.$db[$id].'" tabindex="1"></td>';
++$x;
if($x == 4){
$formular .= '</tr><tr>';
$x = 0;
}
}
$x = 0;
$formular .= '<tr><td colspan="8" align="center" class="c">Schiffe</td></tr><tr>';
//Das Array $einheiten umfasst 74 Einträge, also eine ganze Menge. Das Array $resource ermittelt anhand der ID der einheit den namen den die Einheit in der DB hat. $db ist der Wert der im Formular gegeben wird wenn die Einträge vorgegeben sind, also in der DB und dann gefetcht werden. Wenn das nicht der Fall ist ist $db eine integer mit Wert 0.
foreach($einheiten as $n => $id){
$formular .= '<td class="x">'.$lang['tech'][$id].'</td><td class="x"><input id="'.$resource[$id].'" type="text" name="'.$resource[$id].'" size="8" maxlength="8" value="'.$db[$resource[$id]].'" tabindex="1"></td>';
++$x;
if($x == 4){
$formular .= '</tr><tr>';
$x = 0;
}
}
Alles anzeigen
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:
$query = "UPDATE {{table}} SET ";
$planetquery = "";
//Art des Eintrags in der DB falls es vordefiniert ist, dann wird unterschieden ob etwas addiert oder subtrahiert werden muss. Es ist immer eine der beiden Möglichkeiten.
if($db['category'] == 1)
$rechenwert = '+';
elseif($db['category'] == 2)
$rechenwert = '-';
foreach($rohstoffe as $id => $name){
if($_POST[$id]){
if($_POST['newstatus'] == 1){ //Falls die bearbeitung des Planeten gewünscht ist.
$query .= $id." = ".$_POST[$id].", ";//Update der Daten des Eintrags von dem $db gefetcht wird.
$planetquery .= $id." = ".$id." ".$rechenwert." ".$_POST[$id].", "; //Update der Daten des Planeten auf den Einheiten/Rohstoffe verändert werden sollen
}else{ //Andernfalls wird nur die DB geupdated ohne dass der Planet verändert wird
$query .= $id." = ".$_POST[$id].", ";
}
}
}
//Genau das gleiche nur für die Einheiten.
foreach($einheiten as $n => $id){
if($_POST[$resource[$id]]){
if($_POST['newstatus'] == 1){
$query .= $resource[$id]." = ".$_POST[$resource[$id]].", ";
$planetquery .= $resource[$id]." = ".$resource[$id]." ".$rechenwert." ".$_POST[$resource[$id]].", ";
}else{
$query .= $resource[$id]." = ".$_POST[$resource[$id]].", ";
}
}
}
//Update des Planeten, keine sorge das id = id dient nur dazu dass es keine Probleme mit dem letzten Komma aus der foreach-Schleife gibt.
if($_POST['newstatus'] == 1 && $db['category'] <= 2){ //Ob die Änderung erlaubt ist und die Art des Eintrags einen Planeteneingriff vorsieht.
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');
}
//Update des DB-Eintrags, in jedem Fall wird dieser geupdated...
$query .= 'status='.$_POST['newstatus'].',
time = '.$_SERVER['REQUEST_TIME'].' WHERE id = '.$ticket['id'];
doquery($query,'bugreport');
Alles anzeigen
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!