Funktion in Variablen ausgeben

qsrs

Erfahrenes Mitglied
Hallo,

ich habe ein Problem mit einer Funktion, die ich in einer Variablen, die wiederum in einer For-Schleife eingesetzt wird, ausgeben möchte. Die Funktion gibt eine Baumhierarchie in einer Select-Box aus. In der For-Schleife soll dann eine gewisse Anzahl dieser Boxen erzeugt werden. Gekürzt sieht das dann so aus:

PHP:
<?php 
for ($i = 1; $i <= $number_uploads; $i++) {
 if ($i <= $number_uploads) {
  $show_category_field = "
  <select name=\"dbfiles_category_id".$i."\" id=\"dbfiles_category_id".$i."\">
  ".show_category (0,0)."
  </select>";
//...Code
echo $show_category_field;
  }
 }
?>

Die Funktion wird zwar ausgeführt, aber die Werte werden nicht wie gewünscht im Select-Feld ausgegeben, sondern einfach darüber. Was mache ich falsch? Vielen Dank für Antworten.
 
Zuletzt bearbeitet:
Hi,
ne Selectbox sieht glaube ich so aus:
Code:
<select name="was">
<option value="1">1</option>
<option value="2">2</option>
</select>

schiese
 
Du hast zwar das Select Feld erzeugt, aber keine Auswahlmöglichkeiten gegeben.

<select name="derNamedesSelectFeldes">
<option value="wertDieserOption">Anzeige</option>
<option value="wertDieserOtion">Anzeige</option>
</select>

So müsste das dann aussehen.

Zudem kannst du m.E. auch die IF-Abfrage weglassen. Da du die Bedingung in einer for Schleife verpackt hast wird die if anweisung immer true sein. Verbessere mich wenn ich falsch liege :-)
 
Hallo,

die <option>-Felder werden in der Funktion erzeugt. Die Funktion arbeitet auch ohne Probleme, nur eben nicht in der For-Schleife und wenn sie in der Variablen ausgegebn wird. Die Funktion sieht übrigens so aus:

PHP:
<?php
function show_category ($id, $offset) {
 while ($result_fs = mysql_fetch_assoc ($results_fs)) {
  printf ("<option value=\"".$result_fs[id]."\">");
 
  for ($i = 0; $i < $offset; $i++) {
   printf ("&nbsp;&rsaquo;&nbsp;");
   }
  printf ($result_fs[category]);
  printf ("</option>");
  show_category ($result_fs[id], $offset + 1);
  } 
 } 
?>
Hat einer zu der ursprünglichen Frage eine Idee? Vielen Dank.
 
Moin, versuch es mal damit:

PHP:
 <?php
function show_category ($id, $results_fs, $offset) {
 while ($result_fs = mysql_fetch_assoc ($results_fs)) {
  printf ("<option value=\"".$result_fs[id]."\">");
 
  for ($i = 0; $i < $offset; $i++) {
   printf ("&nbsp;&rsaquo;&nbsp;");
   }
  printf ($result_fs[category]);
  printf ("</option>");
  show_category ($result_fs[id],$results_fs , $offset + 1);
  } 
 } 
?>

den Parameter $id brauchst du ja eigentlich gar nicht?! also eigentlich weglassen...

mfg
 
Hallo,

nein, an der Funktion liegt es nicht. Wenn ich die Funktion nicht in der Variablen und der For-Schleife ausgebe, dann funktioniert sie ja. Also nochmal.

Das funktioniert:

PHP:
<?php
function show_category ($id, $offset) {
 while ($result_fs = mysql_fetch_assoc ($results_fs)) {
  printf ("<option value=\"".$result_fs[id]."\">");
 
  for ($i = 0; $i < $offset; $i++) {
   printf ("&nbsp;&rsaquo;&nbsp;");
   }
  printf ($result_fs[category]);
  printf ("</option>");
  show_category ($result_fs[id], $offset + 1);
  } 
 } 
?>

HTML:
<select name="dbfiles_category_id" size="10" id="dbfiles_category_id">
<?php show_category (0,0); ?>
</select>

Das funktioniert nicht:

PHP:
<?php
function show_category ($id, $offset) {
 while ($result_fs = mysql_fetch_assoc ($results_fs)) {
  printf ("<option value=\"".$result_fs[id]."\">");
 
  for ($i = 0; $i < $offset; $i++) {
   printf ("&nbsp;&rsaquo;&nbsp;");
   }
  printf ($result_fs[category]);
  printf ("</option>");
  show_category ($result_fs[id], $offset + 1);
  } 
 } 
?>

PHP:
for ($i = 1; $i <= $number_uploads; $i++) {
if ($i <= $number_uploads) {
$show_category_field = "
<select name=\"dbfiles_category_id\" id=\"dbfiles_category_id\">
".show_category (0,0)."
</select>";
echo $show_category_field;
}
}
 
Zuletzt bearbeitet:
printf() ist doch zur direkten ausgabe von Texten, wenn mich nich alles irrt. Statt einer Ausgabe solltest du eher den Text in der Funktion in einer Variable Zwischenspeichern und zusammensetzen und dann am Ende, wenn alles 'option's erstellt wurden, per return zurückgeben.

Die Funktion könnte dann z.B. so ausehen:
PHP:
<?php
function show_category ($id, $offset, $return_options = "") 
{
   while ($result_fs = mysql_fetch_assoc ($results_fs)) 
   {
      $return_options .= "<option value=\"".$result_fs[id]."\">";
 
      for ($i = 0; $i < $offset; $i++) 
      {
         $return_options .= "&nbsp;&rsaquo;&nbsp;";
      }
      $return_options .= $result_fs[category];
      $return_options .= "</option>";

      return show_category ($result_fs[id], $offset + 1,$return_options );
   } 
   
   return $return_options;
 } 
?>

Ungetestet. Schaau mal was dabei rauskommt, Kannst du auch ganz einfach mit "echo show_category (0,0);" testen.
Wenn nichts ausgegeben wird, schreib ich die Funktion nochmals etwas um.
 
Zuletzt bearbeitet:
Hallo,

erst einmal vielen Dank für deine Hilfe. Jetzt werden die Einträge zwar in dem Select-Feld angezeigt, allerdings bringt er mir nur zwei Einträge aus der Datenbank (die erste Hauptkategorie und deren Subkategorie) und dann ist Schluss.
 
Zurück