Ergebnis 1 bis 4 von 4

Thema: Problem mit POST-Form in verbindung mit SQL-Update

  1. #1
    HTML Newbie
    Registriert seit
    31.10.2009
    Beiträge
    4
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard 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:
    PHP-Code:
    $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;
      }

    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:
    PHP-Code:

    $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'] == && $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'); 
    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!
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    König(in) Avatar von crAzywuLf
    Registriert seit
    03.02.2009
    Beiträge
    1.175
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit POST-Form in verbindung mit SQL-Update

    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-Code:
      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

  3. #3
    HTML Newbie
    Themenstarter

    Registriert seit
    31.10.2009
    Beiträge
    4
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit POST-Form in verbindung mit SQL-Update

    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...

  4. #4
    König(in) Avatar von crAzywuLf
    Registriert seit
    03.02.2009
    Beiträge
    1.175
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit POST-Form in verbindung mit SQL-Update

    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

Ähnliche Themen

  1. Verbindung - Problem
    Von Darkxor im Forum Computer - Internet Forum
    Antworten: 1
    Letzter Beitrag: 14.04.2010, 00:27
  2. Post Thank You Hack 4.2 Problem
    Von atlanter im Forum Webanwendungen - Webapplikationen
    Antworten: 8
    Letzter Beitrag: 26.01.2007, 17:17
  3. PHP-Variable in post-form verwenden
    Von Drenton im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 17.09.2006, 14:31
  4. PHP POST Problem
    Von Evil_Zangief im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 8
    Letzter Beitrag: 13.04.2006, 10:49
  5. Problem mit meinem post Formular
    Von Spreech im Forum HTML & CSS Forum
    Antworten: 8
    Letzter Beitrag: 28.05.2004, 13:16

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •