Michl75: List/Menü mit vorgabe aus DB

Hallo Forum,

war schon lange nicht mehr hier und hab auch seit langem kein PHP mehr gemacht..

Vielleicht könnt Ihr mir bitte kurz weiterhelfen...

Habe in einer MySQL-DB Kundendaten die ich in einem Formular bearbeiten möchte.
Habe nun ein List/Menü das das anzeigen soll, daß in der DB hinterlegt ist...

0 = Nein
1 = Ja

<?php
      echo "<select name="KUST01_ho" id="KUST01_ho">";
        echo "<option value="1">Ja</option>";
        echo "<option value="0">Nein</option>";
      echo "</select>";
      ?>

Wie ich ein Textfeld vorbelege mit den Daten aus der DB weis ich noch aber das List/Menü... leider nicht mehr

z.B.:

<? echo "<input type="hidden" name="KUST01_ID" value="$KUST01_ID"/>"; ?>

Könnt Ihr mir bitte weiterhelfen? Danke...

Viele Grüße aus Bayern
Michl

  1. Mir ist es wieder eingefallen ...

    hier :

    if ($KUST01_ho == "1")
            {
         $ho0 = "";
            $ho1 = "selected";
         } else {
         $ho0 = "selected";
         $ho1 = "0";
         }
        ?>    <label>
          <?php
          echo "<select name="KUST01_ho" id="KUST01_ho">";
            echo "<option value="0" selected="$ho0">Nein</option>";
            echo "<option value="1" selected="$ho1">Ja</option>";
          echo "</select>";
       ?>

    1. Also bei zwei Auswahlmöglichkeiten geht ja wie im Vorpostin geschrieben...
      aber bei mehreren geht nicht mehr...

      So wollte ich das realisieren...  <- geht auch anders ? :)

      <?
          if($KUST01_brache == "101")
         { $s101 = "selected";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      if($KUST01_brache == "102")
         { $s101 = "";
           $s102 = "selected";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "103")
         { $s101 = "";
           $s102 = "";
           $s103 = "selected";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "104")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "selected";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "109")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "selected";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "201")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "selected";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "s202")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "selected";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "s209")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "selected";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "301")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "selected";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "302")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "selected";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "309")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "selected";
           $s701 = "";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "701")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "selected";
           $s705 = "";
           $s801 = ""; }

      elseif($KUST01_brache == "705")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "selected";
           $s801 = ""; }

      elseif($KUST01_brache == "801")
         { $s101 = "";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = "selected"; }

      else
         { $s101 = "selected";
           $s102 = "";
           $s103 = "";
           $s104 = "";
           $s109 = "";
           $s201 = "";
           $s202 = "";
           $s209 = "";
           $s301 = "";
           $s302 = "";
           $s309 = "";
           $s701 = "";
           $s705 = "";
           $s801 = "";  }

      echo "<select name="KUST01_branche" id="KUST01_branche">";
                echo "<option value="101" selected="$s101">101-Architekten</option>";
                echo "<option value="102" selected="$s102">102-öffentliche Stellen</option>";
                echo "<option value="103" selected="$s103">103-Wohnbaugesellschaft</option>";
                echo "<option value="104" selected="$s104">104-Bauträger</option>";
                echo "<option value="109" selected="$s109">109-sonst. ausschreibende Stellen</option>";
                echo "<option value="201" selected="$s201">201-Bedachungsfachhandel</option>";
                echo "<option value="203" selected="$s202">202-Baustoffhandel</option>";
                echo "<option value="209" selected="$s209">209-sonst. Handel</option>";
                echo "<option value="301" selected="$s301">301-Dachdecker</option>";
                echo "<option value="302" selected="$s302">302-Holzverarbeiter</option>";
                echo "<option value="309" selected="$s309">309-sonst. Verarbeiter</option>";
                echo "<option value="701" selected="$s701">701-Sachverständige</option>";
                echo "<option value="705" selected="$s705">705-Innung</option>";
                echo "<option value="801" selected="$s801">801-Hausverwaltung</option>";
              echo "</select>";
        echo "$KUST01_brache";
        ?>

      1. echo $begrüßung;

        Also bei zwei Auswahlmöglichkeiten geht ja wie im Vorpostin geschrieben...
        So wollte ich das realisieren...  <- geht auch anders ? :)

        Es muss anders gehen, denn so wie du das gemacht hast ist es a) zu aufwendig, und b) falsch. Beim selected-Attribut kommt es nicht auf den Inhalt an, sondern auf das Vorhandensein bzw. die Abwesenheit des kompletten Attributs.

        echo "<select name="KUST01_branche" id="KUST01_branche">";
                  echo "<option value="101" selected="$s101">101-Architekten</option>";
                  echo "<option value="102" selected="$s102">102-öffentliche Stellen</option>";

        Reduktion auf das Wesentliche ist besser als das mehrfache Kopieren des immer wieder gleichen Codes mit nur geringfügig geänderten Stellen. Jetzt willst du vielleicht den Fehler mit dem selected-Attribut ausbessern und macht nun 15 Ersetzungen. Je länger die Datenliste wird, desto aufwendiger wird das ganze Verfahren. Für wiederholte Dinge hat man zum einen Schleifen erfunden, zum anderen Datenstrukturen, die man einfach durchlaufen kann.

        Als erstes nähme ich ein Array für die Daten (falls diese hart kodiert vorhanden sein sollen).

        $branchen = array(
            '101' => 'Architekten',
            '102' => 'öffentliche Stellen',
            ...);

        Wenn du genau hinsiehst ist hier in den Werten nur der reine Name enthalten, keine Nummer, selbst der Bindestrich fehlt. Letzterer ist sicher überflüssig und scheint mir nur beim Auflisten gebraucht zu werden. Die Nummer hingegen wird als Schlüssel verwendet. Wenn nun irgendwann ein Wert hinzukommt, muss nur ein neues Element in dem Array angelegt werden und nicht überall im Quelltext gesucht und geändert werden wo diese Werte vorkommen.

        echo '<select name="KUST01_branche" id="KUST01_branche">';
          foreach ($branchen as $nr => $branche) {
            printf('<option value="%s" %s>%s-%s</option>',
              htmlspecialchars($nr),
              ($KUST01_brache == $nr ? 'selected="selected"' : ''),
              htmlspecialchars($nr),
              htmlspecialchars($branche));
          }
          echo '</select>';

        Mit dieser Schleife hast du eine Stelle Code, die sich um sämtliche deiner Werte kümmert. Du hast damit nur noch eine Stelle, die gewartet werden muss statt vieler.

        Durch den geschickten Einsatz von sowohl ' als auch " spart man sich so manches Escape-Zeichen und macht damit den Code ein Stück einfacher lesbar.

        Die htmlspecialchars()-Aufrufe um $nr sind bei deinen Schlüsselwerten derzeit entbehrlich, schaden aber auch nicht. Das gleiche gilt für $branche, wobei ich hier die Wahrscheinlichkeit des Vorkommens eines der Zeichen <>" und besonders & in den Werten die später vielleicht mal hinzugefügt werden als deutlich höher als bei $nr werte. Jetzt darauf zu verzichten und es später, wenn es wirklich benötigt wird, hinzuzufügen zu vergessen, kann man sich von vornherein sparen.

        Statt des einen printf()-Aufrufs und der Verwendung des ternären Operators kann man natürlich auch einzelne echo-Anweisungen und ein if zusammenstückeln. Ich findes es jedoch übersichtlicher, das komplette option-Element zusammenhängend und in einer Zeile zu notieren. Die Platzhalter zeigen auch schön deutlich die Stellen, an denen am Ende veränderliche Werte zu finden sein werden.

        echo "$verabschiedung $name";