if Abfrage

Moin,
Ich glaube ich habe den Fehler gefunden. Die Funktion macht am Anfang ein UL und am Ende. Aber das 1ste UL und das letzte UL ist zuviel

So sollte aussehen

PHP:
<ul>
    <li>Ebene1</li>
    <li>Ebene1</li>
    <li>Ebene1         // Hier beginnt die Funktion
        <ul>
            <li>Ebene2</li>
            <li>Ebene2</li>
        </ul>
    </li>
    <li>
        <ul>
            <li>Ebene2</li>
            <li>Ebene2</li>
        </ul>
    </li>              // Hier endet die Funktion
    <li>Ebene1</li>
    <li>Ebene1</li>
</ul>



Das 1ste UL und das letzte UL aus der Funktion ist zuviel.

PHP:
echo "<div class=\"menu\">";
echo "<ul class=\"menu\">

<li><a href=\"$_SERVER[PHP_SELF]\">Zurück</a></li>
<li><a href=\"../angebote-1.php\">ANGEBOTE</a></li>

       // Funktion für das Anzeigen des restlichen Menü`s

function navigation($katid)
{
    $retVal = false;
    $res1 = mysql_query("
                SELECT
                        kat_id,
                        kat_bez,
                        eb
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

    if( mysql_num_rows($res1) ) {
        $retVal = '<ul>';
        while( $erg1 = mysql_fetch_assoc($res1) ) {
            if( zaehlen($erg1["kat_id"]) ==0 ) {
                continue;
            }
            $retVal .= '<li>';
            if( ($buffer = navigation($erg1['kat_id'])) === false ) {
                $retVal .= '<a href="'.htmlspecialchars($_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id'])).'">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')</a>';
            } else {
                $retVal .= htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')' . $buffer;
            }
            $retVal .= '</li>';
        }
        $retVal .= '</ul>';
    }
    mysql_free_result($res1);
    return $retVal;
}

echo navigation(0);

function zaehlen($katid)
{
        list ($anzahl) = mysql_fetch_row(mysql_query("
                SELECT
                        count(*)
                FROM
                        bm_kat
                WHERE
                        bm_kat = ".$katid."
        "));

        $res1 = mysql_query("
                SELECT
                        kat_id
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

        while($erg1 = mysql_fetch_assoc($res1))
                $anzahl += zaehlen($erg1["kat_id"]);

        mysql_free_result($res1);

        return $anzahl;
}

      echo "</ul>";

echo "</div>";
Gruß
grübel grübel
 
Ich hab jetzt mal alles ausprobiert was ich weis, nur gelingt es mir nicht.
Die Funktion darf nicht mit eiem ul anfangen und enden sondern mit Li und dann erst ul.
Da das Menü nur ein Teil von einem Menü ist.

mfg
 
Ist es normal so fordernd zu sein?
PHP:
function navigation($katid)
{
	$retVal = false;
	$res1 = mysql_query("
                SELECT
                        kat_id,
                        kat_bez,
                        eb
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

	if( mysql_num_rows($res1) ) {
		$retVal = '<ul>';
		while( $erg1 = mysql_fetch_assoc($res1) ) {
			if( zaehlen($erg1["kat_id"]) ==0 ) {
				continue;
			}
			$retVal .= '<li>';
			if( ($buffer = navigation($erg1['kat_id'])) === false ) {
				$retVal .= '<a class="hide" href="'.htmlspecialchars($_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id'])).'">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')</a>';
				$retVal .= '<!--[if lte IE 6]><a href="'.htmlspecialchars($_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id'])).'">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')<table><tr><td><![endif]-->';
			} else {
				$retVal .= '<a class="hide">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')</a>';
				$retVal .= '<!--[if lte IE 6]><a href="'.htmlspecialchars($_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id'])).'">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).') <table><tr><td><![endif]-->';

				$retVal .= $buffer;
				$retVal .= '<!--[if lte IE 6]></td></tr></table></a><![endif]-->';
			}
			$retVal .= '</li>';
		}
		$retVal .= '</ul>';
	}
	mysql_free_result($res1);
	return $retVal;
}
 
nein,

nur wenn du wüsstest was ich schon für Antworten erhalten habe.

sorry wollte dich natürlich nicht angreifen, bin ja über jede Hilfe dankbar
Gruß
grübel grübel
 
Es funktioniert leider nicht.
Jetzt wird in beiden Browser nichts mehr angezeigt.

Habe mich verschrieben

Es ist dieses Teil für die Anzeige im IE

PHP:
<!--[if IE 7]><!--></a><!--<![endif]-->
                        <!--[if lte IE 6]>

Muster für ein Menü was so funktioniert im IE:
Ist nur zum schauen wie ich das eingebaut habe.

PHP:
echo "<div class=\"menuw\">";
echo" <ul class=\"menuw\">";

   echo" <li><a href=\"\">Jahrzehnt&nbsp;»
                   <!--[if IE 7]><!--></a><!--<![endif]-->
                        <!--[if lte IE 6]><table><tr><td><![endif]-->
            <ul>";
              while ($erg4 = mysql_fetch_assoc($jahrzehnt))
             {
         echo" <li><a  href=\"$_SERVER[PHP_SELF]?id=".$menu1."&wert=".$wert."&jahrzehnt=".$erg4["jz"]."&jz1=".$erg4["jahr"]."&jz2=".$erg4["jahr1"]."&zs=".$erg4["bm_zs"]."\">".$erg4["jahr"]." bis ".$erg4["jahr1"]."
<!--[if IE 7]><!--></a><!--<![endif]-->
                        <!--[if lte IE 6]><table><tr><td><![endif]-->
";

$jahreszahl=mysql_query("SELECT
                        bm_kat.bm_kat,
                        bm_kat.bm_id,
                        bm_versionen.vers_id,
 
In dem genannten Navigationsmenü kommt das aber gar nicht vor.

Ich habe die Funktion mal in zwei zerlegt: eine zur Ermittlung der Navigationsstruktur und eine zum Zusammenbauen des endgültigen Navigationsmenüs. So kannst du die Funktionen beider unabhängig voneinander testen.
PHP:
function getNavigation( $katid )
{
	$retVal = false;
	$res1 = mysql_query("
                SELECT
                        kat_id,
                        kat_bez,
                        eb
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

	if( mysql_num_rows($res1) ) {
		$retVal = array();
		while( $erg1 = mysql_fetch_assoc($res1) ) {
			if( zaehlen($erg1["kat_id"]) ==0 ) {
				continue;
			}
			$key = $erg1['kat_bez'].' ('.zaehlen($erg1['kat_id']).')';
			if( ($buffer = getNavigation($erg1['kat_id'])) === false ) {
				$retVal[$key] = $_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id']);
			} else {
				$retVal[$key] = $buffer;
			}
		}
	}
	mysql_free_result($res1);
	return $retVal;
}

function buildNavigation( $structure )
{
	$retVal = '<ul>';
	foreach( $structure as $key => $val ) {
		if( is_array($val) ) {
			$retVal .= '<li><a class="hide">'.htmlspecialchars($key).'</a>';
			$retVal .= '<!--[if lte IE 6]><a class="hide">'.htmlspecialchars($key).'<table><tr><td><![endif]-->';
			$retVal .= buildNavigation($val);
			$retVal .= '<!--[if lte IE 6]></td></tr></table></a><![endif]-->';
		} else {
			$retVal .= '<li><a href="'.htmlspecialchars($val).'">'.htmlspecialchars($key).'</a></li>';
		}
	}
	$retVal .= '</ul>';
	return $retVal;
}

$structure = array(
	'foo' => '/foo',
	'bar' => array(
		'foo' => '/foo',
		'bar' => '/bar',
	),
);
echo buildNavigation($structure);
 
Also so viel Arbeit musst du dir nicht machen.

Richtig das kommt in den Menü nicht vor

Richtig das College Maik hat ne Woche gebraucht bis es bei mir geklappt hat mit dem Menü. Manche brauchen halt etwas mehr Zeit.
Das erste habe ich mir vor über 1nem Jahr in mein Script, weil einiges nicht funktionierte.
Deshalb benutze ich jetzt dieses: Habe es nur etwas im Aussehen verändert.

http://www.cssplay.co.uk/menus/flyout_4level.html

PHP:
<!--[if IE 7]><!--></a><!--<![endif]--> 
       <!--[if lte IE 6]><table><tr><td><![endif]-->

Habe mal den Hak in deine Funktion rein geschrieben aber wie immer es klappt nicht.
Das ist jetzt mein gesamtes Menü
Gruß

PHP:
echo "<div class=\"menu\">";
echo "<ul class=\"menu\">

<li><a href=\"$_SERVER[PHP_SELF]\">Zurück</a></li>
<li><a href=\"../angebote-1.php\">ANGEBOTE</a></li>
<li><a href=\"$_SERVER[PHP_SELF]\">Tauschlisten</a></li>

<li class=\"sub\"><a href=\"$_SERVER[PHP_SELF]\">S U C H E N<!--[if IE 7]><!--></a><!--<![endif]-->
<!--[if lte IE 6]><table><tr><td><![endif]-->";
       echo"<ul>";
          echo"<li>";
            echo "<form action=\"../index1.php\" method=\"GET\" >";

echo"<table class=\"suchen\">
   <tr>
     <td width=\"33%\">Land:</td>
     <td width=\"*%\"colspan=\"2\">

         <select name=\"land\" cellspacing=\"2\" cellpadding=\"2\"size=\"4\">";

                 $arr_land = array('BRD','Berlin','DDR','Österreich','Frankreich','Schweiz');
                      foreach($arr_land as $str_land){
                 echo '<option value="'.$str_land.'"';
                      if (isset($_GET['land']) and $_GET['land'] == $str_land)
                 {
                         echo 'selected';
                 }
                         echo '>'.$str_land.'</option>';
                 }
echo "
     </select>
     </td>
     </tr>
     <tr>
       <td width=\"33%\">MiNr:</td>
       <td width=\"25%\">
          <input type=\"Text\" name=\"minr\" size=\"3\" value=\"".$_GET["minr"]."\"></td>
       <td width=\"*%\" align=\"center\">
          <input type=\"submit\" name=\"suchen\" value=\"suchen\"></td>";
echo "</tr>
  </table>";
echo" </form>";

       $_SESSION["suchen"] = $_GET["suchen"];
               $suchen = $_SESSION["suchen"];
       $_SESSION["minr"] = $_GET["minr"];

echo"</li>";
echo"</ul>";

echo"<!--[if lte IE 6]></TD></TR></TBODY></TABLE></A> <![endif]-->";

echo"</li>";

function getNavigation( $katid )
{
    $retVal = false;
    $res1 = mysql_query("
                SELECT
                        kat_id,
                        kat_bez,
                        eb
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

    if( mysql_num_rows($res1) ) {
        $retVal = array();
        while( $erg1 = mysql_fetch_assoc($res1) ) {
            if( zaehlen($erg1["kat_id"]) ==0 ) {
                continue;
            }
            $key = $erg1['kat_bez'].' ('.zaehlen($erg1['kat_id']).')';
            if( ($buffer = getNavigation($erg1['kat_id'])) === false ) {
                $retVal[$key] = $_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id']);
            } else {
                $retVal[$key] = $buffer;
            }
        }
    }
    mysql_free_result($res1);
    return $retVal;
}

function buildNavigation( $structure )
{
    $retVal = '<ul>';
    foreach( $structure as $key => $val ) {
        if( is_array($val) ) {
            $retVal .= '<li><a>'.htmlspecialchars($key).;
            $retVal .= '<!--[if IE 7]><!-->'</a>'<!--<![endif]-->
       <!--[if lte IE 6]><table><tr><td><![endif]-->
<a class="hide">'.htmlspecialchars($key).'<table><tr><td><![endif]-->';
            $retVal .= buildNavigation($val);
            $retVal .= '<!--[if IE 7]><!-->'</a>'<!--<![endif]-->
       <!--[if lte IE 6]><table><tr><td><![endif]-->
</td></tr></table></a><![endif]-->';
        } else {
            $retVal .= '<li><a href="'.htmlspecialchars($val).'">'.htmlspecialchars($key).'</a></li>';
        }
    }
    $retVal .= '</ul>';
    return $retVal;
}

$structure = array(
    'foo' => '/foo',
    'bar' => array(
        'foo' => '/foo',
        'bar' => '/bar',
    ),
);
echo buildNavigation($structure);

function zaehlen($katid)
{
        list ($anzahl) = mysql_fetch_row(mysql_query("
                SELECT
                        count(*)
                FROM
                        bm_kat
                WHERE
                        bm_kat = ".$katid."
        "));

        $res1 = mysql_query("
                SELECT
                        kat_id
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

        while($erg1 = mysql_fetch_assoc($res1))
                $anzahl += zaehlen($erg1["kat_id"]);

        mysql_free_result($res1);

        return $anzahl;
}


echo "</ul>";

echo "</div>";
 
In dem Fall sollte es reichen die buildNavigation()-Funktion wie folgt zu ändern:
PHP:
function buildNavigation( $structure )
{
	$retVal = '<ul>';
	foreach( $structure as $key => $val ) {
		if( is_array($val) ) {
			$retVal .= '<li class="sub"><a>'.htmlspecialchars($key);
			$retVal .= '<!--[if IE 7]><!--></a><!--<![endif]--><!--[if lte IE 6]><table><tr><td><![endif]-->';
			$retVal .= buildNavigation($val);
			$retVal .= '<!--[if lte IE 6]></td></tr></table></a><![endif]-->';
		} else {
			$retVal .= '<li><a href="'.htmlspecialchars($val).'">'.htmlspecialchars($key).'</a></li>';
		}
	}
	$retVal .= '</ul>';
	return $retVal;
}
 
Fehler Anzeige:
Warning: htmlspecialchars() expects parameter 1 to be string, array given in

Die Zeile 395 bei mir ist:

$retVal .= '<li class="sub"><a href="'.htmlspecialchars($val).'">'.htmlspecialchars($key);

class="sub" existiert habe es auch nachgeschaut.
 
Zurück