• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Eine Liste mit allen Listen Elementen richtig anzeigen

webber979

Neues Mitglied
Hallo Leute,
ich schreibe an diesem Quellcode schon länger kann aber keine Lösung finden.
Mein Ziel ist das schlussendlich so eine Liste ausgegeben wird:

Kategory1
-Hallo
-Hallo2
-Hallo3
Kategory2
-Bye1
-Bye2
-Bye3
Kategory3
-ef
-werw

die mysqltabelle sieht wie folgt aus

id|name|matchingul|linum
1 | hallo1 1 1
2 |hallo2 1 2
5 hallo3 1 3
4 bye1 2 1
9 bye2 2 2
11 bye3 2 3
7 ef 3 1
8 werf 3 2


Die spalte "matchingul" besagt zu welcher kategory es zugehört
Die spalte "linum" besagt an welcher position es in der kategory steht.

Der folgende Quellcode zeigt die Liste nur wie gewünscht an, wenn die ids in der reihenfolge sind.
Sind sie aber nicht.
Was muss ich in den Quellcode schreiben, damit nicht nach der id abgezählt wird sondern der array nummer UND, dass im Falle das der wert von $tablemenu[$f]["lis"] nicht erreicht ist noch mal von vorne angefangen wird, aber das nur die listenelemente, die noch nicht ausgegeben worden sind in der reihenfolge ausgegeben werden.
Sodass alle listenelemente einer kategory trotz verschiedener id in der reihenfolge linum abgearbeitet werden.
Ich würde euch für jede hilfe dankbar sein.


PHP:
<?php $mysqli = new mysqli("localhost", "root", "", "AFCIMS_db");
  if ($mysqli->connect_error) {
      echo "Connection Error: " . mysqli_connect_error() . "Please try again later!";
      exit();
  }
  else {
  $lielementsresult = $mysqli->query(" SELECT * FROM sites ") ; 
  $ulelementsresult = $mysqli->query(" SELECT * FROM ullist ") ;
  echo "Headings:";
  
 $tablemenu = array();$lielements = array();$ii = 1;
 $f = 1;
 a: while (  
  $row = $ulelementsresult->fetch_array() )
 {     $tablemenu[$row["id"]] = $row;
      echo "</br><input type=\"text\" size=\"2\" value=\" "; echo  $tablemenu[$f]["id"]; echo" \" /> ";
  echo "<input type=\"text\" size=\"7\" value=\" " . htmlspecialchars($tablemenu[$f]["name"]) . " \" /> <input        type=\"submit\" value=\"change\" /> 
          <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
          
          while($row2 = $lielementsresult->fetch_array() )
          {        $lielements[$row2["id"]] = $row2;
          if ( $lielements[$ii]["matchingul"] == $f && $lielements[$ii]["linum"] !== $tablemenu[$f]["lis"] +1  )
          {
      echo "</br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"text\" size=\"2\" value=\" "; echo  $lielements[$ii]['linum']; echo" \" /> ";
  echo "<input type=\"text\" size=\"7\" value=\" " . htmlspecialchars($lielements[$ii]['name']) . " \" /> <input type=\"submit\" value=\"change\" /> 
          <br>";
             $ii++;
             }
             else {
        $f++; 
        goto a;
             }
          }



  }
 // echo "<br>Sites:<br>";
 
  
  
  $lielementsresult->close();
  $ulelementsresult->close();
  $mysqli->close();
  }
  ?>

Danke im vorraus
webber979
 
Werbung:
Hallo,


also davon abgesehen das der code etwas caotisch ist und deswegen schlecht zu lesen ordne doch einfach die DB abfrage
PHP:
SELECT * FROM ullist order by matchingul, linum
und schon bekommst die in der richtgen reinfolge ausgespuckt.

Jetzt nur in der while schleife ein vergleich machen ob der jetztige "matchingul" wert mit dem vorhergehenden anders ist dann weist ah neu gruppe.

ps: schau mal nach "EVA-Prinzip PHP" in Verarbeitung hat keine Ausgabe zu sein, ist übersichtlicher und macht auch vieles leichter, denn kannst mal schnel ein zusätzlich schleife einbauen ohne gleich alles neu zu machen weil die ausgabe nicht mehr an der richtigen stelle ist :O)

Cheffchen
 
PHP:
 <?php $mysqli = new mysqli("localhost", "root", "", "AFCIMS_db");
  if ($mysqli->connect_error) {
      echo "Connection Error: " . mysqli_connect_error() . "Please try again later!";
      exit();
  }
  else {
  $lielementsresult = $mysqli->query(" SELECT * FROM sites ORDER BY linum ASC; ") ; 
  $ulelementsresult = $mysqli->query(" SELECT * FROM ullist ORDER BY id ASC; ") ;
  echo "Headings:";
  
 $tablemenu = array();$lielements = array();$ii = 1;
 $f = 0;
 while (  
  $row = $ulelementsresult->fetch_array() )
 {    $ii=1;
 $f++;
     $tablemenu[$row["id"]] = $row;
 
      echo "</br><input type=\"text\" size=\"2\" value=\" "; echo  $tablemenu[$f]["id"]; echo" \" /> ";
  echo "<input type=\"text\" size=\"7\" value=\" " . htmlspecialchars($tablemenu[$f]["name"]) . " \" /> <input        type=\"submit\" value=\"change\" /> 
          <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
          
          
  while($row2 = $lielementsresult->fetch_array() )
        {        $lielements[$row2["linum"]] = $row2;
        if ( $lielements[$ii]["matchingul"] == $f )
        {
        echo "if";echo $lielements[$ii]['name']; echo "<br>";
        
        
        }
        $ii++;
        
        }
        
}
  
 // echo "<br>Sites:<br>";
 
  
  
  $lielementsresult->close();
  $ulelementsresult->close();
  $mysqli->close();
  }
  ?>
Hab jetzt versucht mit diesem Code den im ersten Kommentar beschriebenen "Baum" zu erreichen. Es wird nur das erste untermenü angezeigt.
Sieht jemand einen grundlegenden fehler?
 
Werbung:
Zurück
Oben