Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem Dynamisches Menü

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem Dynamisches Menü

    Hallo meine lieben,

    und zwar programmiere ich zurzeit an einem dynamischen Menü für mein Lernprojekt. Verbindung funktioniert aber ich soll angeblich ein Syntax Fehler in meiner menue.php Datei besitzen. Ich suche und suche aber finde den Syntaxfehler nicht, habe ich was vergessen oder so ?

    PHP-Code:
    <div id="menuetop"></div>
    <div id="menue">
    <?php
    $sql 
    'SELECT id, label, link_url, parent_id FROM menue';                  
    while(
    $row=mysqli_fetch_array($result)){              
    $cat_id=$row['id'];              
    $cat_name=$row['label'];              
    $cat_url=$row['link_url'];          
    echo 
    "<ul>";          
    echo 
    "<li><a href=".$cat_url.">".$cat_name."</a></li>";          
    echo 
    "</ul>";                  
    ?>    
    </div>

  • #2
    Wo ist die schliessende geschwungene Klammer?

    Weiters fehlt htmlspecialchars() für die Ausgabe nach HTML.

    Und schau dir auch das mal an: http://php-de.github.io/jumpto/eva-prinzip/

    Kommentar


    • #3
      Desweiteren erzeugst du für jeden Link eine komplett neue Liste. Das ist sicher nicht gewollt.

      Und noch ein Tipp: Versuche den ganzen PHP Teil noch vor der ersten HTML Ausgabe abzuarbeiten. Man gewöhnt sich diesen schlechtes Stil sonst schnell an^^ In deinem "<div id="menue">" gibst du dann nur noch mit echo die Liste aus.

      Kommentar


      • #4
        Also erstmal danke ^^ Das ich depp "}" vergessen habe ist schon peinlich. das mit den htmlspecial schaue ich mir mal genauer an

        Gortun das würde ich ja gerne aber noch bin ich bei der Fehlersuche warum er mir mein CSS zerlegt wenn ich oben die Anweißungen abarbeite.


        Aktuell habe ich es nun so umgebaut:
        PHP-Code:
        <?php
        $sql 
        'SELECT id, label, link_url, parent_id FROM menue';
        $result=mysqli_query($mysqli,$sql) or die(mysqli_error());
        ?>
        <div id="menuetop"></div>
        <div id="menue">
        <?php
                
        while($row=mysqli_fetch_array($result)){
        $cat_id=$row['id'];
        $cat_name=$row['label'];
        $cat_url=$row['link_url'];
        echo 
        "<ul>";
        echo 
        "<li><a href=".$cat_url.">".$cat_name."</a>";
        }
        ?>
        </li>
        </ul>
        </div>
        So müsste sich nun nicht immer eine neue erzugen wenn ich das nun so richtig sehe ? Wie du siehst will ich oben auslagern. Wenn ich das aber mache zerlegt es mir mein CSS. Habe es mal in Angang gepackt. Auf http://leaguechapter.de/pizzabremen/ kannst du sehen wie es unzerlegt aussehen soll. Habt ihr da eine Idee ? Aktuell liefert mir auf jedenfall meine mysql error keine fehlermeldung aber zeigt auch keine ergebnisse an, bin ich schon mal ein schritt weiter Mal sehen ob ich den Fehler selber finde

        Kommentar


        • #5
          PHP-Code:
          while($row=mysqli_fetch_array($result)){
          ...
          echo 
          "<ul>"
          Du erzeugst bei jedem Schleifendurchlauf eine neue Liste und nicht nur einen Listenpunkt. Das <ul> muss über die while-Schleife und das </li> muss wieder rein.

          Zur Demonstration - So müsste eine Liste aussehen:
          HTML-Code:
          <ul>
          <li></li>
          <li></li>
          ...
          </ul>
          Du erzeugst aber das hier:
          HTML-Code:
          <ul><li><ul><li><ul><li>
          ...
          </li></ul>

          Nachtrag:
          Ich habe mir mal den Quellcode deiner Seite angeguckt. Du solltest dich auf jedenfall nochmal mit HTML beschäftigen. Firebug sagt, dass du den <title> und den <link> tag im Body hast.
          Nachtrag Nachtrag: Okay... Firebug interpretiert das vermutlich falsch, weil du noch vorm Doctype eine Ausgabe hast. Das muss natürlich auch weg.

          Kommentar


          • #6
            Habe die PHP Anweisung nun unter das Doctype gemacht. Ja HTML kann ich schon nur so manche Regeln muss ich noch lernen
            Asoo ok Dann habe ich es falsch verstanden Danke für die Info

            Kommentar


            • #7
              Ok irgendwie bleibt der Fehler das mir nichts angezeigt wird, vielleicht sehr ihr den Fehler.

              Also ich binde auf meiner Index Datei mit include_once die connect ein
              PHP-Code:
              <?php
                 
              require_once 'config.php';
                
                 
              $dbhost $host;
                 
              $dbuser $user;
                 
              $dbpass $pass;
                 
              $dbname $db;
                
                 
              $conn mysql_connect($dbhost$dbuser$dbpass$dbname);
                 if(! 
              $conn )
                 {
                   die(
              'Could not connect: ' mysql_error());
                 }
                 echo 
              'Connected successfully then a fail can be';
              ?>
              Dann habe ich meine euch bekannte menue.php welche ich einbinde mit include. In der habe ich nun nach einem Tutorial und nach eurem Rat ein wenig umgebaut:
              PHP-Code:
              <?php

              $result
              =mysql_query("SELECT id, label, link, parent FROM menu ORDER BY parent, sort, label");
              // Create a multidimensional array to conatin a list of items and parents
              $menu = array(
                  
              'items' => array(),
                  
              'parents' => array()
              );
              // Builds the array lists with data from the menu table
              while ($items mysql_fetch_assoc($result))
              {
                  
              // Creates entry into items array with current menu item id ie. $menu['items'][1]
                  
              $menu['items'][$items['id']] = $items;
                  
              // Creates entry into parents array. Parents array contains a list of all items with children
                  
              $menu['parents'][$items['parent']][] = $items['id'];
              }

              function 
              buildMenu($parent$menu)
              {
                 
              $html "";
                 if (isset(
              $menu['parents'][$parent]))
                 {
                    
              $html .= "
                    <ul>\n"
              ;
                     foreach (
              $menu['parents'][$parent] as $itemId)
                     {
                        if(!isset(
              $menu['parents'][$itemId]))
                        {
                           
              $html .= "<li>\n  <a href='".$menu['items'][$itemId]['link']."'>".$menu['items'][$itemId]['label']."</a>\n</li> \n";
                        }
                        if(isset(
              $menu['parents'][$itemId]))
                        {
                           
              $html .= "
                           <li>\n  <a href='"
              .$menu['items'][$itemId]['link']."'>".$menu['items'][$itemId]['label']."</a> \n";
                           
              $html .= buildMenu($itemId$menu);
                           
              $html .= "</li> \n";
                        }
                     }
                     
              $html .= "</ul> \n";
                 }
                 return 
              $html;
              }

              ?>
              <div id="menuetop"></div>
                  <div id="menue">
                      <div class="nav">
                          <?php echo buildMenu(0$menu); ?>
                      </div>
                  </div>
              So wenn ich nun also dann es hochlade und die Seite neu mache sagt er mir das er zur Datenbank verbunden ist aber das Menue wird mir nicht angezeigt. Weiß einer von euch wo der Fehler sein kann ? Den normalen Php Error Report wie MySQl Error Report bin ich schon durchgegangen und kriege keine Meldung warum auch immer -.-

              Error report mache ich mit
              PHP-Code:
              error_reporting(E_ALL & ~E_NOTICE); 
              Ich habe nun auch schon den genauen Tutorial Code genommen und sogar bei dem kriege ich keine Anzeige von meinem Menue aus der Datenbank oO

              Kommentar


              • #8
                Öhm, kann es sein das du mysql_ und mysqli_ mischt? Das geht nicht gut.

                Und mysqli_error() braucht auch den Conn-Parameter, siehe Doku. http://php.net/manual/de/mysqli.error.php

                Kommentar


                • #9
                  Ich nehme mal deinen ersten Code und schreibe ihn richtiger. Ich mach das ebend mal um die Uhrzeit ausm Kopf, evtl. ist ein Fehler drin, aber probiers mal aus.

                  PHP-Code:
                  <?php
                  $sql 
                  'SELECT id, label, link_url, parent_id FROM menue';
                  $result=mysqli_query($mysqli,$sql) or die(mysqli_error());
                  $menu '<ul>';

                  while(
                  $row=mysqli_fetch_array($result)){
                  $menu .= '<li><a href="'.$row['link_url'].'">'.$row['label'].'</a></li>';
                  }

                  $menu .= '</ul>';
                  ?>  
                  <!DOCTYPE html>
                  <html>
                  <head>
                  <title>Mein Seitenname</title>
                  <link rel="stylesheet" type="text/css" href="css/style.css"
                  ...
                  </head>
                  <body>
                  .......
                  <div id="menue"><?php echo $menu?></div> .....
                  </body>
                  </html>
                  Achja... nimm den " echo 'Connected successfully then a fail can be';" auf jedenfall raus.

                  Kommentar


                  • #10
                    Zitat von hausl Beitrag anzeigen
                    Weiters fehlt htmlspecialchars() für die Ausgabe nach HTML.

                    Und mysqli_error() braucht auch den Conn-Parameter, siehe Doku. http://php.net/manual/de/mysqli.error.php

                    Glaube ich würde oben mit fetchAll / MYSQLI_ASSOC ( http://php.net/manual/de/mysqli-result.fetch-all.php ) in ein Array und dann unten in der Ausgabe mit der alternativen Syntax oder per sprinf() arbeiten.


                    Eher sowas .. zuerst:
                    PHP-Code:
                    $sql "SELECT id, label, link_url, parent_id FROM menue";
                    $result mysqli_query($mysqli$sql) or die( mysqli_error($mysqli) );
                    $aMenuItems mysqli_fetch_all($resultMYSQLI_ASSOC); 

                    dann - entweder:
                    PHP-Code:
                    <!DOCTYPE html>
                    <html>
                    <head></head>
                    <body>

                    <div id="menue"><ul>
                        <?php foreach ($aMenuItems as $item): ?>
                            <li><a href="<?=htmlspecialchars($item['link_url'], ENT_COMPAT'UTF-8')?>"><?=htmlspecialchars($item['label'], ENT_COMPAT'UTF-8')?></a></li>
                        <?php endforeach; ?>
                    </ul></div>

                    </body>
                    </html>

                    oder:
                    PHP-Code:
                    <!DOCTYPE html>
                    <html>
                    <head></head>
                    <body>

                    <div id="menue"><ul><?php
                        
                    foreach ($aMenuItems as $item) {
                            
                    printf(
                                
                    '<li><a href="%s">%s</a></li>',
                                
                    htmlspecialchars($item['link_url'], ENT_COMPAT'UTF-8'),
                                
                    htmlspecialchars($item['label'], ENT_COMPAT'UTF-8')
                            );
                        }
                    ?></ul></div>

                    </body>
                    </html>

                    Kommentar


                    • #11
                      Entschuldigt Ich hatte noch ein paar Sachen zu erledigen Danke für eure Informationen und Beispiele. Ich werde es mir morgen in aller Frische mal anschauen und schauen wie die Umsetzung sich so ergibt

                      Also der Fehler scheint irgendwo in der Abfrage zu sein bei nun egal ob euren Code oder mein Code.
                      Sobald ich

                      PHP-Code:
                      <?php
                      $sql 
                      "SELECT id, label, link_url, parent_id FROM menue";
                      $result mysqli_query($mysqli$sql) or die( mysqli_error($mysqli) );
                      $aMenuItems mysqli_fetch_all($resultMYSQLI_ASSOC);
                      ?>
                      wage einzubauen oder auch meine form aus der menue,php zerschießt es umgehend meine ganze Anzeige die ich per CSS gemacht habe oO

                      Kommentar


                      • #12
                        Hmmm... werf nochmal deinen aktuellen Code hier rein, oder noch besser: Schau dir mal den fertig generierten Quelltext der Seite an und versuche selbst herauszufinden, wo der Fehler auftreten könnte. Css ist vollkommen unabhängig von PHP. Mit PHP holst du in deinem Fall einfach nur ein paar Strings aus der Datenbank und generierst HTML Code. Wenn die Anzeige "zerschossen" ist, dann liegt es wohl eher am HTML oder CSS.

                        Kommentar


                        • #13
                          Mein Code oben war auch nur ein Beispiel, den du nicht einfach so reinklaschen sollst. Der muss schon dazu passen zu Eingabe, Verarbeitung und Ausgabe.

                          Kommentar

                          Lädt...
                          X