Array in Array schreiben und in SQL verwenden

Sturmrider

Erfahrenes Mitglied
Hi @all
Habe da ein Problem, vielleicht könnt ihr mir da ja einen Lösungsvorschlag machen ^---^
ich wollte das Menü
HTML:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--    
    
    //Korrektur der Submenu-Position
    intXPadding = 0;
    intYPadding = -4;
    
    //Zeit bis zum Schliessen(ms)
    intTimeout = 50;
    
    //hier werden später die Timeouts gespeichert... jeweils separat für jedes Submenu
    arrTimeouts = new Array();

    /**
      *  liefert beim Initialisieren des Menues zum jeweiligen Hauptmenupunkt 
      *  die passende Tabbelle
      *  objMenu=Elternknoten der Hauptmenu-Tabelle
      *  intSub=Index des Menupunktes
      **/
      
      function get_sub(objMenu, intSub)
      {
            intTable =- 1;
            
            for(j = 0; j < objMenu.childNodes.length; ++j)
                {
                    intTable += (objMenu.childNodes[j].tagName=='TABLE') ? 1 : 0;
                    
                    if(intTable==intSub)
                        {
                            return(objMenu.childNodes[j]);
                        }  
                    arrTimeouts.push(false);
                }
        return false;
        }



        /**
          *  Initialisiert das Menu beim ersten mouseover der Hauptmenupunkte-Tabelle
          *  ansonsten anzeigen/verstecken der jeweiligen Submenu-Tabelle
          *  objElem = (erster Aufruf)?Hauptmenupunktabelle:Index Menupunkt
          *  blnEvt = (!erster Aufruf)?(over=1||out=0):nix;
          **/
          
          
          function menu(objElem, blnEvt)
          {
          
            //initalisieren de Menues beim ersten Aufruf
            if(arrTimeouts.length == 0)
                {
                    objElem.onmouseover = new Function('f','return false');
                    objMenu = objElem.parentNode;
                    
                    for(i = 0; i < objElem.rows[0].cells.length; ++i)
                        {
                            objCell = objElem.rows[0].cells[i];
                            objCell.onmouseover = new Function('f', 'menu('+i+', 1)');
                            objCell.onmouseout  = new Function('f',' menu('+i+', 0)');
                            objSub = get_sub(objMenu, i+1);
                            objSub.style.position = 'absolute';
                            objSub.style.left = intXPadding + 
                                                (objCell.offsetLeft + (objSub.offsetLeft - objSub.rows[0].cells[0].offsetLeft));
                            objSub.style.top  = intYPadding +
                                                objCell.offsetHeight +
                                                (objCell.offsetTop + (objSub.offsetTop - objSub.rows[0].cells[0].offsetHeight));
                            objSub.id = 'sub'+i;
                            objSub.width = 1;  //fixt opera-Macke mit Tabellenbreite
                            objSub.onclick = new Function('f', 'this.style.visibility = "hidden"');
                            objSub.onmouseover = new Function('f', 'menu('+i+', 1)');
                            objSub.onmouseout  = new Function('f', 'menu('+i+', 0)');
                            objSub.className = 'sub';
                        }
                    return;
                }
                
              //Zeigen
              if(blnEvt)
                    {
                        clearTimeout(arrTimeouts[objElem]);
                        document.getElementById('sub'+objElem).style.visibility = "visible";
                    }
              //Verstecken
              else
                    {
                        arrTimeouts[objElem] = setTimeout('document.getElementById("sub'+objElem+'").style.visibility="hidden"', intTimeout);
                    }
    
          }
//-->
</script>
<body>
<!-- 
    *alle Menutabellen(und nur diese) in einem div verpacken 
    *erste Tabelle für Hauptmenupunkt
    *für jeden Hauptmenupunkt eine weitere Tabelle mit Submenu
    *für leeren Hauptmenupunkt siehe 4. Tabelle
    *in erste Tabelle [onmouseover="menu(this)"]
    *andere Tabellen [style="visibility:hidden"]
    *der Klassenname des div's ist nur für Gestaltung per CSS von Interesse
    *die Submenue-Tabellen erhalten vom Skript den Klassennamen "sub"(auch zwecks Gestaltung) 
-->
 <div class="menu">
  <table onmouseover="menu(this)">
	<tr>
	  <td><a href="#">Main#1</a></td>
	  <td><a href="#">Main#2</a></td>
	  <td><a href="#">Main#3(leer)</a></td>
	  <td><a href="#">Main#4</a></td>
	</tr>
  </table>
  <table style="visibility:hidden">
	<tr><td><a href="#">Sub#1_1</a></td></tr>
	<tr><td><a href="#">Sub#1_2</a></td></tr>
	<tr><td><a href="#">Sub#1_3</a></td></tr>
	<tr><td><a href="#">Sub#1_4</a></td></tr>
  </table>
  <table style="visibility:hidden">
	<tr><td><a href="#">Sub#2_1</a></td></tr>
	<tr><td><a href="#">Sub#2_2</a></td></tr>
	<tr><td><a href="#">Sub#2_3</a></td></tr>
  </table>
  <table style="display:none">
    <tr><td></td></tr>
  </table>
  <table style="visibility:hidden">
	<tr><td><a href="#">Sub#4_1</a></td></tr>
	<tr><td><a href="#">Sub#4_2</a></td></tr>
	<tr><td><a href="#">Sub#4_3</a></td></tr>
	<tr><td><a href="#">Sub#4_4</a></td></tr>
	<tr><td><a href="#">Sub#4_5</a></td></tr>
	<tr><td><a href="#">Sub#4_6</a></td></tr>
  </table>
 </div>
</body>
</html>
in MySQL schreiben.
Dafür habe ich für das Obermenü und das Untermenü eine SQL-Tabelle angelegt.
Das Problem bei dem ganzen ist: Die Reinfolge der Untermenüs muss gleich der Reinfolge der Obermenüs sein. bzw. in SQL die katPos des Untermenüs muss immer gleich der ID des Obermenüs sein. Immer wenn das zutrifft, solle jede Zeile des Untermenüs wo katPos = ID ist in einer For-Schleife ausgelesen werden und in eine Tabelle als neue Zeile geschrieben werden. Wenn alle mit katPos = z.B. 2 abgearbeitet wurden soll die Tabelle geschlossen werden.
Wenn katPos = ID einmal nicht zutrifft z.B. ID = 4 ist aber keine katPos = 4 da ist, soll eine Tabelle mit dem Code <table style=display:none><tr><td></td></tr></table> erstellt werden.
Das ganze muss so laufen, da sonst der JavaScript-Teil nicht funktioniert.
Ich habe bisher folgendes soweit für die Oberkategorien geschrieben, was auch funktioniert (auszug aus dem Script, also nicht wegen SQL-Verbundung etc. wundern):
PHP:
<?
$y = 0;
//Oberkategorien ermitteln u. in Array packen
$sql = "SELECT ID, name, sessionID FROM m_menu_oberkat WHERE (visible = 1) ORDER BY pos ASC";;
$handle = mysql_query($sql, $db) or die ("Kein Obermenü gefunden!");
for($i=0;$i<mysql_num_rows($handle);$i++)
{
$oberkat[$i]=mysql_fetch_array($handle);
}

echo "\n\n<DIV class=\"menu\">\n";
echo "<TABLE onmouseover=\"menu(this)\" border=0><TR>\n";
	
for($i=0;$i<count($oberkat);$i++) {		//Oberkat auslesen
     if (!$oberkat[$i]['sessionID'] == "") { $k = "?site=";}
       echo "<TD><A HREF=\"". $maindir ."index.php" . $k . $oberkat[$i]['sessionID'] ."\">". $oberkat[$i]['name'] ."</A></TD>\n";
//++++++++++++++++Untermenü - Hier ist das Problem! +++++++++++++
$id[$y] = $oberkat[$i]['ID'];
$y++;
}
echo "</TR></TABLE>\n";
?>
untem vom Script ist das Problem! Ich möchte gerne die IDs in einen Array schreiben und ihn im Folgenden Script mithilfe einer For-Schleife aufrufen und Wert für Wert abarbeiten:
PHP:
for($g=0;$g<count($id);$g++) {
$sql = "SELECT name, sessionID FROM m_menu_subkat WHERE (visible = 1) AND (katPos = '$id[$g]') ORDER BY Pos ASC";
$handle = mysql_query($sql, $db) or die ("Kein Submenü gefunden!");
// Array erstellen
for($f=0;$f<mysql_num_rows($handle);$f++)
{
$unterkat[$f]=mysql_fetch_array($handle);
}

if ($unterkat[0] == "") {echo "<table style=display:none><tr><td></td></tr></table>\n";}else{

echo "<TABLE style=\"visibility:hidden\" border=1>\n";
	   for($f=0;$f<count($unterkat);$f++) {
		echo "<TR><TD><A HREF=\"". $maindir ."index.php?site=". $unterkat[$f]['sessionID'] ."\">". $unterkat[$f]['name'] ."</A></TD></TR>\n";
}
echo "</TABLE>";}
}
echo "</DIV>\n";
Wenn ich oben in der For-Schleife:
echo $id[$g] ."<BR>";
schreibe, werden genau die Werte aufgelistet, die ich brauche bzw. suche und haben möchte. Aber sobald ich dann hingehe und in den SQL-Teil versuche einzubinden werden diese Werte kreuz und Quer durcheinander gewürfelt und doppelt und dreifach aufgerufen...
Könnt ihr mir da irgendwie helfen? (ich weiß leider nicht wie ich mein Problem besser beschreiben kann uu)

Sry, wenn das ganze ziemlich chaotisch eingerückt ist ^^° *nie richtig gelernt hat*
 
-> Ich wollte nur noch einmal fragen, ob mir hier jemand vielleicht mit meinem Problem helfen kann? büüüdeeee
 
Zuletzt bearbeitet:
Zurück