hinzugefügt Select Optionen werden nicht übertragen

tholmer

Mitglied
Hello,

ich mal wieder...

Ich baue ein Script welches Rezepte in eine Datenbank einträgt. Es geh speziell um die Zutaten. Dafür habe ich Links eine Auswahlbox (size="10") und rechts davon eine Auswahlbox. Unter der rechten ist noch ein Eingabefeld für neue Zutaten und darunter wiederum ein Button zum Eintragen in die linke Liste. Beim Aufruf wird durch PHP die rechte Liste mit den Zutaten gefüllt die bereits in der DB stehen. Zwischen den beiden Listen sind noch 2 Buttons mit denen man sozusagen die Zutaten rüber und nüber schieben kann. Man hat dann 2 Möglichkeiten: Entweder man wählt eine Zutat aus der rechten Liste und fügt sie per Button in die Linke Liste ein (alles Javascript) oder man gibt unten eine neue Zutat ein und drückt auf den Button. Soweit funktioniert auch alles, die Zutaten stehen dann in der linken Liste, da wo sie stehen sollen. Nun zum Problem: Die Zutaten werden nicht übergeben, besser gesagt die POST Variable ist dann leer. Dann hab ich verschiedenes ausprobiert, aber nichts hat funktioniert. Es werden auch per onsubmit() alles Einträge erst selektiert (multiple Liste) und dann wird das Formular abgeschickt. Das Array was ich eigtl erhalten sollte ist leer. Aber nun das kuriose :D Wenn ich im HTML Code mal aus Testzwecken <option value="1">Vodka</option> oder so reinschreibe und dann das Formular abschicke, funktioniert alles gut und PHP hat die Daten die es braucht. Habs auch mit FF ausprobiert und Opera.

Hier mal paar Code- Schnipsel:
HTML:
<div style="float: left; position: relative;">
        <select size="10" name="script_added[]" id="script_added" multiple="multiple" style="width: 150px;">
          <!-- <option value="1">2;cl;Vodka</option>
          <option value="0">4;cl;O-Saft</option>
          <option value="0">2;Stck;Zitronen</option> //-->
        {S_SCRIPT_ADDED_OPTIONS}
        </select>
      </div>
      
      <div style="float: left; position: relative;">
        <button onclick="request_prompt('added'); return false;" class="btnmain" style="margin-left: 5px; margin-top: 50px;">&lt;&lt;</button>
        <button onclick="delAdded(); return false;" class="btnmain" style="margin-left: 5px; margin-top: 50px;">&gt;&gt;</button>
      </div>
      
      <div style="float: left; position: relative;">
        <select size="7" name="script_added" id="all_added" style="margin-left: 5px; width: 150px;">{S_ADDED_OPTIONS}</select><br />
        <input type="text" name="new_added" id="new_added" style="margin-left: 5px; margin-top: 5px; width: 150px;" /><br />
        <button class="btnmain" style="margin-left: 5px; margin-top: 5px; width: 150px;" onclick="request_prompt('new'); return false;">{L_ADD_ADDED}</button>
      </div>
      <br clear="all" /><br />
      <p>{L_ADDED_EXPLAIN}</p>
(Platzhalter wegen Template Parser)

Ich hoffe ich werde jetzt nicht geschlagen weil es schon so viele Threads gibt. Ich hab gesucht aber dieses spezielle Problem nicht gefunden.
Vielleicht gibts auch mal wieder eine gaanz einfache Erklärung. Das php Script funktioniert mit hoher Sicherheit, die anderen Formdaten werden auch normal übertragen.
 
HTML:
<script language="Javascript" type="text/javascript">
  <!-- 
  // ein kleines Script f&uuml;r die Zutaten
  var AllAdded = document.getElementById("all_added");
  var ScriptAdded = document.getElementById("script_added");
  var RequestDiv = document.getElementById("request_div");
  
  var new_added = "";
  var new_added_amount = 0;
  var new_added_unit = "";
  var mode = "";
  var added_value = 0;
  
  function request_prompt(add_mode)
  {
    new_added = "";
    new_added_amount = 0;
    new_added_unit = "";
    
    mode = add_mode;
    
    if ( add_mode == "new" )
    {
      new_added = document.getElementById("new_added").value;
      added_value = 0;
      if ( new_added == "" )
      {
        alert("{L_ERR_NO_ADDED}");
        return false;
      }
    }
    else
    {
      added_value = AllAdded.options[AllAdded.selectedIndex].value;
      new_added = AllAdded.options[AllAdded.selectedIndex].text;
      if ( added_value == 0 && mode == "added" )
      {
        alert("L_ADDED_NO_CAT");
        reset_added();
        return false;
      }
    }
    
    RequestDiv.style.display = "block";
  }
  
  function putAdded(mode)
  {
    new_added_unit = document.getElementById("added_unit").value.replace(/;/g, "");
    new_added_amount = document.getElementById("added_amount").value.replace(/;/g, "");
    new_added = new_added.replace(/;/g, "");
    
    added = new Option(new_added_amount.replace(/(^\s*)|(\s*$)/, "") + ";" + new_added_unit.replace(/(^\s*)|(\s*$)/, "") + ";" + new_added.replace(/(^\s*)|(\s*$)/, ""), added_value);
    ScriptAdded.options[ScriptAdded.length] = added;
    document.getElementById("new_added").value = "";
    
    reset_added();
  }
  
  function delAdded()
  {
    ScriptAdded.options[ScriptAdded.selectedIndex] = null;
  }
  
  function close_added_div()
  {
    RequestDiv.style.display = "none";
  }
  
  function mark_added()
  {
    for(i = 0;i < ScriptAdded.length;i++)
    {
      ScriptAdded.options[i].selected = true;
    }
  }
  
  function reset_added()
  {
    close_added_div();
    new_added = "";
    new_added_amount = 0;
    new_added_unit = "";
    document.getElementById("added_unit").value = "Stck";
    document.getElementById("added_amount").value = 0;
  }
   //-->
</script>

request_prompt() öffnet ein "div" in der man die Menge und die Einheit eingibt.

putAdded() schreibt dann "Menge;Einheit;Zutat" in die linke Liste, wobei mir gerade aufgefallen ist das dann beim Formular eh nur der value der Liste mitgegeben wird aber das macht nichts da mach ich aus dem Wert halt auch einfach "ID_Menge;Enheit;Zutat".

delAdded() löscht die Zutat aus der Liste.

close_added_div schließt das Abfrage Div wieder (ich wollte kein Prompt nehmen weil man das nicht selbst gestalten kann).

mark_added() markiert beim Absenden des Formulars alle Einträge in der linken Liste (funktioniert)

reset_added() schließt das DIV, setzt Felder zurück.
 
Kann mir keiner helfen? Ich kann sonst nicht am Script weiterarbeiten :( Hab derzeit noch bei google gesucht aber da find ich auch keine Antworten.
 
ICH HAB IHN! endlich, der Fehler ist gefunden. Nach stundenlangen Tests hat sich herausgestellt das die beiden Listen den gleichen Namen haben. Ich bin unwürdig -.-
 
Zurück