pix: select selected makierung

Hallo Leute!
Ich komm einfach nicht weiter. Hab hab heute schon den ganzen Tag gegoogelt aber ich finde einfach keine Antwort. :-(

Mein Problem:

Ich greife auf eine Datenbank zu die mir Werte in ein Selectfeld ausgibt.
Das funktioniert auch reibungslos.
Mein Problem ist das der User auch zwischenzeitlich die Seite verlassen könnte um z.b. eine Info zu öffnen. Ich möchte das wenn der User eine option im select feld ausgewählt hat, diese wieder vorhanden ist wenn er zurück auf die seite kommt.

Hier ein kurzer Code-Ausschnitt aus der neu.php

$name = mysql_query("SELECT DISTINCT name FROM gesellschaften");
$anzahl=mysql_num_rows($name);
$inhalt=mysql_fetch_row($name);

$tnummer=$HTTP_GET_VARS['tnummer'];

print ("<form name='neu_form' action="popup.php" method="post" target="inline">
 <fieldset style="height:510px"><legend><i>Formular</i></legend><br>
       <table align="center" cellpadding="0" cellspacing="0" border="0" width="500">
 <tr>
  <td width="150" align="right">Gesellschaft:&nbsp;</td>");

print("<td width="167"><select name="gesellschaften" class="Auswahl" id="gesellschaften" value="".$_POST['gesellschaften']."" size="1" style="width: 176px">");

for($x=0;$x<$anzahl;$x++)
{
  if ($inhalt[0]!="")
    {
      print("<option value="$inhalt[0]" selected='selected'>$inhalt[0]</option>");
    }
    $inhalt=mysql_fetch_row($name);
}
print("</select></td></tr><tr><td></td><td><br></td></tr>");

Hier ein ausschnitt aus der popup.php

<form name='neu_form' action="neu.php" method="post" target="inline">
    <input type='submit' name='back' value='Zur&uuml;ck' onClick='history.back()' class="input-submit">
    <input type="hidden" name="gesellschaften" id="gesellschaften" value="".$_POST['gesellschaften']."" size="26" maxlength="20">
   </form>

Der Wert wird also auch gespeichert und ausgegeben wenn ich den type in der popup von hidden auf text stelle.
Nur rückgängig wird nicht das betreffende Feld ausgewählt.

Könnt ihr mir bitte weiter helfen?

Grüße

  1. Hello,

    ich habe sowas schon mehrfach fertig gemacht.
    Aber irgendwo sind im Moment die ganzen Tools auf ´meinen sämtlichen Platten verschwunden.
    Ein Schaden von über fünf Jahren :-(

    Allerdings bin ich nicht irre, denn ich ich habe hier noch ein rudeimentäteres Teil gefunden

    http://forum.de.selfhtml.org/archiv/2005/5/t108005/#m672206

    #------------------------------------------------------------------------------
    function make_selectbox
    #------------------------------------------------------------------------------
    (
    $name,                # Name der Selectbox ohne []
    $type,                # S für sinlge, M für Multiple
    $_options,            # assoziatives Array mit den möglichen Optionen
    $_selection = array() # indiziertes Array mit den letzten Post-Werten (Value=" ")
    $_classes = array()   # Array mit den Klassendefinitionen, die eingebunden werden
    )
    {
      if ((strtolower($type) =='s') and (count($_selection) > 0))
      {
        reset($selection);
        $_selection = each($_selection);
      }

    $select = "\n<select name="".trim($name).'[]"'.
                          ((!empty($_classes['select']))?' class="'.$_classes['select'].'"':'').
                          ((strtolower($type)=='m')?' multiple':'').">\n";

    foreach($_options as $key => $val)
      {
        $select.='  <option'.(!empty($_classes['option'])?' class="'.$_classes['option'].'"'."\n         ":'').
                           " value="$key"".(in_array($key,$_selection)?' selected="selected"':'').'>'.
                             htmlentities($val)."</option>\n";
      }

    $select .= "</select>\n";

    return $select;
    }
    #-------------------------------------

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  2. Hello,

    Und noch eine Version

    http://forum.de.selfhtml.org/archiv/2005/8/t113266/#m718620

    Die folgende Nachricht zum Thema stammt von: Tom, 12. 08. 2005, 11:43

    Hello,

    Da war was verloren gegangen...

    »» Um die Selectbox also zu erzeugen, benötigst du mindestens vier Angaben:
    »»
    »» in meinem Beispiel kommt ein Array mit den CSS-Klassennamen dazu, das man
    »» vorher noch füttern muss...
    »»
    »» $_options[1] = 'Hotel';
    »» $_options[2] = 'Gasthof';
    »» $_options[3] = 'Pension';
    »» $_options[4] = 'Ferienwohnung';
    »» $_options[5] = 'Ferienzimmer';
    »» $_options[6] = 'Schlafsaal';
    »» $_options[7] = 'Wohnwagen';
    »» $_options[8] = 'Zelt';
    »»
    »» if (isset($_POST['unterkunft']) and is_array($_POST['unterkunft']))
    »» {
    »»   $_selection = $_POST['unterkunft'];
    »» }
    »» else
    »» {
    »»   $_selection[] = 1;
    »» }
    »»
    »» $_classes['select'] = 'sel_unterkunft';
    »» $_classes['option'] = 'opt_unterkunft';
    »»
    »»
    »» $select = make_selectbox('unterkunft','M',$_options,$_selection,$_classes);
    »»
    »»
    »» Die Klassen müssen natürlich im CSS definiert sein:

    #------------------------------------------------------------------------------
    function make_selectbox
    #------------------------------------------------------------------------------
    (
     $name,               # Name der Selectbox ohne []
     $type,               # S für sinlge, M für Multiple
     $_options,           # assoziatives Array mit den möglichen Optionen
     $_selection=array(), # indiziertes Array mit den letzten Post-Werten (Value=" ")
     $_classes=array()    # Array mit den Klassendefinitionen, die eingebunden werden
    )
    {
      if (strtolower($type)=='s' and count($_selection) > 0)
      {
        reset($_selection);
        $_selection = each($_selection);
      }

    $select = "\n<select name="".trim($name).'[]"'.
                          ((!empty($_classes['select']))?' class="'.$_classes['select'].'"':'').
                          ((strtolower($type)=='m')?' multiple':'').">\n";

    foreach($_options as $key => $val)
      {
        $select.='  <option'.(!empty($_classes['option'])?' class="'.$_classes['option'].'"':'')."\n".
                 "          value="$key"".(in_array($key,$_selection)?' selected="selected"':'').'>'.
                             htmlentities($val)."</option>\n";
      }

    $select .= "</select>\n";

    return $select;
    }

    »»
    »»   <style type="text/css">
    »»   <!--
    »»   .sel_unterkunft
    »»   {
    »»     font-family:Century Gothic,Helvetica,Arial,sans-serif;
    »»     font-size:12pt;
    »»     width:200px;
    »»     height:10em;
    »»   }
    »»
    »»   -->
    »»   </style>
    »»
    »»
    »» Und dann brauchst Du $select später nur noch im HTML-Teil auszugeben, so wie du das ja jetzt auch schon machst.
    »»
    »»
    »» Harzliche Grüße vom Berg
    »» esst mehr http://www.harte-harzer.de
    »»
    »» Tom

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  3. Hello,

    und noch ein Gedicht aus meiner frühen Zeit.
    Das habe ich ebenfalls eben gerade aus dem Netz besorgt.
    Auf meinen eigenen Platten ist es sowohl im aktuellen Pfad als auch in den Datensicherungen verschwunden... Das geht ünber meinen Verstand.
    Zum Glück gibt es Foren und Boards, Kundenserver etc...

    ###############################################################################
    #                         Funktion put_optionlist()                           #
    #                                                                             #

    Funktion zur Ausgabe für Optionlist                                    #  18

    #                                                                             #
    #                                                                             #
    ###############################################################################

    function put_optionlist($con,        // DB-Verbindung
                            $tablename,  // Tabellenname
                            $fieldname,  // Feldname
                            $fieldstr,   // Inhalt des Feldes im Datensatz
                            $size,       // Anzahl der Zeilen der Optionlist
                            $sorted,     // 0 => Anzeige unsortiert
                                         // 1 => Alphabetisch aufsteigend
                                         // 2 => Alphabetisch absteigend
                            $viewtype)   // S => HTML-String(select)
                                         // R =>HTML-String(radio oder checkbox)
    {
      if($viewtype != "R")
      {
        $viewtype = "S";             // HTML-String wird Default
      }

    if(!$con)
      {
        die(N."Der Datenbankserver ist zur Zeit nicht erreichbar.".N);
      }

    // Fieldvalue darf ungültig sein, da es sich auch um den Insertmodus handeln kann

    if((!$tablename)or(!$fieldname)or($tablename == "")or($fieldname == ""))
      {
        return false;
      }

    $descript=mysql_query("describe ".$tablename." ".$fieldname.";",$con);

    if($descript)
      {
        $object=mysql_fetch_object($descript);
      }
      else
      {
        return false;
      }

    if(!$object)
      {
        return false;
      }
      elseif(strtolower(substr($object->Type,0,4))=="enum")
      {
        if($viewtype == "R")
        {
          $radio = true;
          $optiontype = "<input class="box" type="radio" name="rad_".$fieldname."[]"";
        }
        else
        {
          $optiontype = "";
        }
      }
      elseif(strtolower(substr($object->Type,0,3))=="set")
      {
        if($viewtype == "R")
        {
          $radio = false;
          $optiontype = "<input class="box" type="checkbox" name="chk_".$fieldname."[]"";
        }
        else
        {
         $optiontype = " multiple";
        }
      }
      else
      {
        return false;
      }

    $ok=ereg("('(.*)')",$object->Type,$opt_arr);
      if(!$ok)
      {
        return false;
      }
      $optvalues=explode("','",$opt_arr[2]);

    if($sorted==1)
      {
        asort($optvalues);
      }
      elseif($sorted==2)
      {
        arsort($optvalues);
      }

    if (is_array($fieldstr))                 // Feld-Werte aus Post-Array
      {
        $fieldarray=$fieldstr;
      }
      else                                     // Feld-Werte aus DB
      {
        $fieldarray = explode(",",$fieldstr);
      }

    if($viewtype == "R")
      {
        if(!$radio)  // Leere Elemente für Ceckbox unterdrücken
        {
          $i=0;
          while($erg=array_slice($optvalues,$i,1))
          {
            if (trim($erg[0])=="")
            {
              array_splice($optvalues,$i,1);
            }
            else
            {
              $i++;
            }
          }
        }

    if(!$size or ($size <=0))
        {
          $size=1;
        }
        $zeilenanzahl = ceil(sizeof($optvalues)/$size);
        $spaltenanzahl=ceil(sizeof($optvalues)/$zeilenanzahl);
        $returnvalue = "<table class="choice">\n";

    $z=0;
        while($z < $zeilenanzahl)
        {
          $returnvalue.="<tr>\n";
          $s=0;
          while($s < $spaltenanzahl)
          {
            $index=($s * $zeilenanzahl) + $z;
            $optarray=array_slice($optvalues,$index,1);
            $option=$optarray[0];

    if($option)  //  Values ohne Wert unterdrücken
            {
              if(in_array($option,$fieldarray))
              {
                $checked = " checked />";
              }
              else
              {
                $checked=" />";
              }
              $returnvalue.= "<td style='text-align:left'>".$optiontype." value="".$option.""".$checked."</td>";
              $returnvalue.= "<td>".$option."&nbsp;&nbsp;</td>\n";
            }
            $s++;

    }
          $returnvalue.="</tr>\n";
          $z++;

    }
        $returnvalue.= "</table>\n";
      }
      else
      {
        $returnvalue = "<select class="select" name="sel_".
                                $fieldname."[]" size="".$size.""".$optiontype.">\n";

    while(list($key,$option)=each($optvalues))
        {
          if(in_array($option,$fieldarray))
          {
            $selected = " selected";
          }
          else
          {
            $selected = "";
          }

    $returnvalue.="<option value="".$option.""".$selected." >".htmlentities($option)."</option>\n";

    }
        $returnvalue.= "</select>\n";
      }
      return $returnvalue;
    }

    Diese Funktion setzt bereits direklt auf einer MySQL-Datenbank-Tabelle auf und holt dort den Wert raus.

    Es gibt aber noch neuere Versionen...
    Ich bin jetzt etwas aufgeschreckt ob der verlorenen Daten.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  4. Hello,

    und hier noch die fast neueste Version, die ich mir eben vom Kumpel zurückgeholte habe, mit dem ich ein Buch schreiben wollte...
    Irgendwas stimmt hier nicht!

    <?php  ### make_selectbox.php ###

    #------------------------------------------------------------------------------
    function make_selectbox
    #------------------------------------------------------------------------------
    (
     $name,               # Name der Selectbox ohne []
     $type,               # S für sinlge, M für Multiple
     $_options,           # assoziatives Array mit den möglichen Optionen
     $_selection=array(), # indiziertes Array mit den letzten Post-Werten (Value=" ")
     $_classes=array()    # Array mit den Klassendefinitionen, die eingebunden werden
    )
    {
      $select = "\n<select name="".trim($name).'[]"'.
                          ((!empty($_classes['select']))?' class="'.$_classes['select'].'"':'').
                          ((strtolower($type)=='m')?' multiple':'').">\n";

    foreach($_options as $key => $val)
      {
        $select.='  <option'.(!empty($_classes['option'])?' class="'.$_classes['option'].'"':'')."\n".
                 "          value="$key"".(in_array($key,$_selection)?' selected="selected"':'').'>'.
                             htmlentities($val)."</option>\n";
      }

    $select .= "</select>\n";

    return $select;
    }

    #==============================================================================

    main section

    #==============================================================================

    $_options[1] = 'Hotel';
    $_options[2] = 'Gasthof';
    $_options[3] = 'Pension';
    $_options[4] = 'Ferienwohnung';
    $_options[5] = 'Ferienzimmer';
    $_options[6] = 'Schlafsaal';
    $_options[7] = 'Wohnwagen';
    $_options[8] = 'Zelt';

    if (isset($_POST['unterkunft']) and is_array($_POST['unterkunft']))
    {
      $_selection = $_POST['unterkunft'];
    }
    else
    {
      $_selection[] = 1;
    }

    $_classes['select'] = 'sel_unterkunft';
    $_classes['option'] = 'opt_unterkunft';

    $select = make_selectbox('unterkunft','M',$_options,$_selection,$_classes);

    ###############################################################################

    HTML-Output

    ###############################################################################
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <HTML>
    <HEAD>
      <TITLE>Selectbox</TITLE>
      <META NAME="Author" CONTENT="Thomas Schmieder, bitworks Deutschland">
      <META NAME="Keywords" CONTENT="Beispiele, HTML, PHP, Programmierung, Selectbox">
      <META NAME="Description" CONTENT="Kleine Tools für PHP-Programmierer">

    <style type="text/css">
      <!--
      .sel_unterkunft
      {
        font-family:Century Gothic,Helvetica,Arial,sans-serif;
        font-size:12pt;
        width:200px;
        height:10em;
      }

    -->
      </style>

    </HEAD>

    <BODY>

    <h3>Selectbox multiple</h3>

    <!--
    <form action="http://selfhtml.bitworks.de/debug/kontrolle.php" method="POST">
    -->
    <form action="" method="POST">
      <?php echo $select; ?>
      <p><input type="submit" name="btn[test]" value="lass sehen"></p>
    </form>
    </BODY>
    </HTML>

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  5. Hello,

    und noch eine Version, eine Nummer neuer als die andere datenbankbezogene

    <?php     ### optionlist.php ###

    function make_optionlist($con,        // DB-Verbindung
                             $tablename,  // Tabellenname
                             $fieldname,  // Feldname
                             $fieldstr,   // Inhalt des Feldes im Datensatz
                             $size,       // Anzahl der Zeilen der Optionlist
                             $sorted,     // 0 => Anzeige unsortiert
                                          // 1 => Alphabetisch aufsteigend
                                          // 2 => Alphabetisch absteigend
                             $viewtype)   // S => HTML-String wird (select single oder multiple)
                                          // R => HTML-String wird (radio oder checkbox)
    {
      if($viewtype != "R")
      {
        $viewtype = "S";             // HTML-String wird Default
      }

    if(!$con)
      {
        die(N."Der Datenbankserver ist zur Zeit nicht erreichbar.".N);
      }

    // Fieldvalue darf ungültig sein, da es sich auch um den Insertmodus handeln kann

    if((!$tablename)or(!$fieldname)or($tablename == "")or($fieldname == ""))
      {
        return false;
      }

    $descript = mysql_query("describe ".$tablename." ".$fieldname.";",$con);

    if($descript)
      {
        $object=mysql_fetch_object($descript);
      }
      else
      {
        return false;
      }

    if(!$object)
      {
        return false;
      }
      elseif(strtolower(substr($object->Type,0,4))=="enum")
      {
        if($viewtype == "R")
        {
          $radio = true;
          $optiontype = "<input class="box" type="radio" name="rad_".$fieldname."[]"";
        }
        else
        {
          $optiontype = "";
        }
      }
      elseif(strtolower(substr($object->Type,0,3))=="set")
      {
        if($viewtype == "R")
        {
          $radio = false;
          $optiontype = "<input class="box" type="checkbox" name="chk_".$fieldname."[]"";
        }
        else
        {
         $optiontype = " multiple";
        }
      }
      else
      {
        return false;
      }

    $ok=ereg("('(.*)')",$object->Type,$opt_arr);
      if(!$ok)
      {
        return false;
      }
      $optvalues=explode("','",$opt_arr[2]);

    if($sorted==1)
      {
        asort($optvalues);
      }
      elseif($sorted==2)
      {
        arsort($optvalues);
      }

    if (is_array($fieldstr))                 // Feld-Werte aus Post-Array
      {
        $fieldarray=$fieldstr;
      }
      else                                     // Feld-Werte aus DB
      {
        $fieldarray = explode(",",$fieldstr);
      }

    if($viewtype == "R")
      {
        if(!$radio)  // Leere Elemente für Ceckbox unterdrücken
        {
          $i=0;
          while($erg=array_slice($optvalues,$i,1))
          {
            if (trim($erg[0])=="")
            {
              array_splice($optvalues,$i,1);
            }
            else
            {
              $i++;
            }
          }
        }

    if(!$size or ($size <=0))
        {
          $size=1;
        }
        $zeilenanzahl = ceil(sizeof($optvalues)/$size);
        $spaltenanzahl=ceil(sizeof($optvalues)/$zeilenanzahl);
        $returnvalue = "<table class="choice">\n";

    $z=0;
        while($z < $zeilenanzahl)
        {
          $returnvalue.="<tr>\n";
          $s=0;
          while($s < $spaltenanzahl)
          {
            $index=($s * $zeilenanzahl) + $z;
            $optarray=array_slice($optvalues,$index,1);
            $option=$optarray[0];

    if($option)  //  Values ohne Wert unterdrücken
            {
              if(in_array($option,$fieldarray))
              {
                $checked = " checked />";
              }
              else
              {
                $checked=" />";
              }
              $returnvalue.= "<td style='text-align:left'>".$optiontype." value="".$option.""".$checked."</td>";
              $returnvalue.= "<td>".$option."&nbsp;&nbsp;</td>\n";
            }
            $s++;

    }
          $returnvalue.="</tr>\n";
          $z++;

    }
        $returnvalue.= "</table>\n";
      }
      else
      {
        $returnvalue = "<select class="select" name="sel_".
                                $fieldname."[]" size="".$size.""".$optiontype.">\n";

    while(list($key,$option) = each($optvalues))
        {
          if(in_array($option,$fieldarray))
          {
            $selected = " selected";
          }
          else
          {
            $selected = "";
          }

    $returnvalue.="<option value="".$option.""".$selected." >".htmlentities($option)."</option>\n";

    }
        $returnvalue.= "</select>\n";
      }
      return $returnvalue;
    }

    ?>

    Ich glaube, hier hat jemand "gespielt" bei mir als ich im Krankenhaus lag...
    Das ist ja nicht normal. Aber ich habe alles weit genug verteilt ;-)

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  6. Hm also ich komm mit deinen Vorschlägen nicht zurecht.
    Hat sonst noch jmd ne Idee?

    1. Hello,

      Hm also ich komm mit deinen Vorschlägen nicht zurecht.

      Was verstehst Du denn daran nicht?

      Das deutlichste Beispiel ist
      https://forum.selfhtml.org/?t=150060&m=974902

      Das solltest Du mal auf Deinen Server kopieren und etwas damit experimentieren,
      bevor Du fragts:

      Hat sonst noch jmd ne Idee?

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Hi Tom,

        hab mal dein Vorschlag bei mir hochgeladen. Funktioniert schon ansich nur weiß ich nicht wie ich es auf mein Beispiel anwenden soll. Bin nich so der Programmierprofi :-/

        Grüße

  7. Sorry ich wollte dir noch danken das du mir weiter helfen willst.

    Ka aba irgendwie gehts nicht so ganz.

    Hab mir überlegt es evtl. mit javascript zu realisieren. :x

    <script type="text/javascript">
    var test=0;
    function CheckAuswahl () {
    alert(test);
        test = document.neu_form.gesellschaften.selectedIndex;
    }
    function Auswahltreff () {
    alert(test);
     if (document.neu_form.gesellschaften.selectedIndex != test)
      document.neu_form.gesellschaften.selectedIndex = test;
    }
    </script>
    <select onchange="CheckAuswahl()" name="gesellschaften" class="Auswahl" id="gesellschaften">

    Aber irgendwo ist noch der Wurm drinne.
    Die Werte in dem Select Feld sind ja nicht immer gleich, sie können ja erweitert werden durch die DB. Hmm.

    Grüße