Datensätze in html-template auslesen

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

  • Datensätze in html-template auslesen

    Hey,

    ich habe ein kleines script für news-einträge geschrieben. es geht alles bis dahin, wo ich die datensätze aus mysql in ein template.html auslesen möchte.

    hier die display.php für die anzeige:

    PHP-Code:
    <html>
    <head>
    <title>Newssystem</title>
    </head>
    <body>
    <h2>Newssystem</h2>
    <a href="newsentry.php">News-Eintrag hinzufuegen</a><br><br>
    <?php
    // Logindaten
    include ("connect.php");
    // Templatefunktionen
    include ("templatefunc.php");
    $proseite 10;
    $db  newssystem;
     
    $con mysql_connect($host$user$pass) or die ("<b>Keine</b> Verbindung zum MySQL-Server möglich.");
    mysql_select_db($db$con) or die (mysql_error());
    $result mysql_query("SELECT * FROM news ORDER BY date");
    $Anzahl mysql_num_rows(mysql_query("SELECT * FROM news ORDER BY date"$con));
     
    // Anzeige von Anzahl der Einträge
    $anzahl_eintraege mysql_num_rows($result);
    echo 
    "<p>Anzahl der News-Einträge: $anzahl_eintraege </p>";
     
    // Daten aus Datenbank holen und ausgeben im Template
    for($i 0$i mysql_num_rows($result); $i++)
    {
    while(
    $row mysql_fetch_array($result))
      {
    eval (
    "dooutput(\"".gettemplate("news")."\");"); 
    {
    echo 
    $template;
    }
      }
    }
     
    // 10 Einträge pro Seite
     
    if($Anzahl $proseite)
    {
        
    $Seiten intval($Anzahl/$proseite);
        if(
    $Anzahl%$proseite)
        {
            
    $Seiten++;
        }
        echo
    "Seite ";   
    }
    for(
    $i 1$i <= $Seiten$i++)
    {
        echo 
    "<a href=\"display.php?AktuelleSeite=", ($i-1)*$proseite,"\">$i</a>&nbsp;";
    }
     
    mysql_close($con);
    ?>

    ich lasse über die gettemplate function das news.html template zwischen die while schleife einbauen.

    news.html:


    PHP-Code:
    <html>
    <head>
    <meta http-equiv="Content-Language" content="de">
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Newssystem</title>
    </head>
    <body>
    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: 
    collapse" bordercolor="#111111" width="80%" id="AutoNumber1" height="232">
      <tr>
        <td width="100%" height="19" valign="top" style="border-left: 1px solid #111111;<br>
     border-right: 1px solid #111111; <br>
    border-top-style: solid; border-top-width: 1; border-bottom-style: solid; 
    border-bottom-width: 1"><?php echo $row[usname]; ?></td>
      </tr>
      <tr>
        <td width="100%" height="19" valign="top" style="border-left-color: #111111; 
    border-left-width: 1; border-right-color:<br>
     #111111; border-right-width: 1"><?php echo $row[headline]; ?></</td>
      </tr>
      <tr>
        <td width="100%" height="172" valign="top" style="border-left: 1px solid #111111;<br>
     border-right: 1px solid #111111; <br>
    border-top-style: solid; border-top-width: 1; border-bottom-style: solid;
     border-bottom-width: 1"><br><?php echo $row[content]; ?></</td>
      </tr>
    </table>
    </body>
    </html>
    ich habe bis jetzt 10 einträge in der datenbank gespeichert und wenn ich die display.php aufrufe,
    werden mir wiederrum 10 html-tabellen angezeigt.. ihre felder sind aber weiß

    der quelltext der display.php zeigt mir bei zb der ersten tabelle folgendes:

    HTML-Code:
    <html>
    <head>
    <meta http-equiv="Content-Language" content="de">
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Newssystem</title>
    </head>
    <body>
    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" 
    bordercolor="#111111" width="80%" id="AutoNumber1" height="232">
      <tr>
        <td width="100%" height="19" valign="top" style="border-left: 1px solid #111111;<br>
     border-right: 1px solid #111111;<br>
     border-top-style: solid; border-top-width: 1; border-bottom style: solid; 
    border-bottom-width: 1"><?php echo Hans; ?></td>
      </tr>
      <tr>
        <td width="100%" height="19" valign="top" style="border-left-color: #111111; 
    border-left-width: 1; border-right-color: #111111;<br>
     border-right-width: 1"><?php echo Neue Seite; ?></td>
      </tr>
      <tr>
        <td width="100%" height="172" valign="top" style="border-left: 1px solid #111111;<br>
     border-right: 1px solid #111111;<br>
     border-top-style: solid; border-top-width: 1; borderbottom-style: solid;<br> 
    border-bottom-width: 1"><?php echo Hier ist unsere neue Seite!; ?></td>
      </tr>
    </table>
    </body>
    </html>

    im quelltext werden die daten angezeigt..

    hat jemand eine idee an was das liegen könnte

    greeZ
    Zuletzt geändert von Benni16; 20.08.2009, 14:16.

  • #2
    brich bitte mal deinen quellcode um. und dann poste die gettemplate funktion.

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hier ist die templatefunc.php


      PHP-Code:
      <?php
      function gettemplate($template,$endung="html")
      {
      $templatefolder "templates";
      return 
      str_replace("\"","\\\"",implode("",file($templatefolder."/".$template.".".$endung)));
      }
      function 
      dooutput($template
      {
      echo 
      $template;
      }
      ?>


      wie kann ich hier den quellcode umbrechen?

      greeZ
      Zuletzt geändert von Benni16; 20.08.2009, 14:16.

      Kommentar


      • #4
        wie kann ich hier den quellcode umbrechen?
        indem du auf "ändern" klickst und dann in deinen codeababschnitten ein paar manuelle umbrüche einbaust.

        zu deinem problem. du setzt hier eval völlig falsch ein. das siehts du am ergebnis:
        PHP-Code:
        <?php echo Hans?>
        da sollte nur Hans stehen. tipp, arbeite mit platzhalter wie z.b. #HEADLINE# und nimm dann ein str_replace mit den werten(!) vor.

        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          also meinst du das dann so?:




          PHP-Code:
          $usname $row['usname'];
           
          $comment str_replace("$usname""#USNAME#" alt=\"usname">", $comment); 

          Kommentar


          • #6
            fast. wenn schon, dann z.b. so:
            PHP-Code:
            $comment str_replace('#USNAME#'$usname$comment); 
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              ich habe jetzt folgenden code schnipsel zusammengestellt:

              PHP-Code:
              $usname   $row[usname];
              $headline $row[headline];
              $content  $row[content];
               
              $us str_replace('#USNAME#'$usname$us="#USNAME#"); 
              $he str_replace('#HEADLINE#'$headline$he="#HEADLINE#"); 
              $co str_replace('#CONTENT#'$content$co="#CONTENT#"); 

              komme aber trotzdem nicht weiter :\


              habe ihn so in die news.html eingetragen:

              HTML-Code:
              <?php
              $usname   = $row[usname];
              $headline = $row[headline];
              $content  = $row[content];
               
              $us = str_replace('#USNAME#', $usname, $us="#USNAME#"); 
              $he = str_replace('#HEADLINE#', $headline, $he="#HEADLINE#"); 
              $co = str_replace('#CONTENT#', $content, $co="#CONTENT#");
              ?>
              <html>
              <head>
              <meta http-equiv="Content-Language" content="de">
              <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
              <meta name="ProgId" content="FrontPage.Editor.Document">
              <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
              <title>Newssystem</title>
              </head>
              <body>
              <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="80%" id="AutoNumber1" 
              height="232">
                <tr>
                  <td width="100%" height="19" valign="top" style="border-left: 1px solid #111111;<br>
               border-right: 1px solid #111111; border-top-style: <br>
              solid; border-top-width: 1;<br> border-bottom-style: solid; border-bottom-width: 1"><?php echo "$us" ?></td>
                </tr>
                <tr>
                  <td width="100%" height="19" valign="top" style="border-left-color: #111111;<br>
               border-left-width: 1;<br> border-right-color: #111111; 
              border-right-width: 1"><?php echo "$he" ?></td>
                </tr>
                <tr>
                  <td width="100%" height="172" valign="top" style="border-left: 1px solid #111111;<br>
               border-right: 1px solid #111111; border-top-style: <br>
              solid; border-top-width: 1;<br> border-bottom-style: solid; border-bottom-width: 1"><br><?php echo "$co" ?></td>
                </tr>
              </table>
              </body>
              </html>

              im quelltext sieht dass dann so aus:


              HTML-Code:
              <html>
              <head>
              <title>Newssystem</title>
              </head>
              <body>
              <h2>Newssystem</h2>
              <a href="newsentry.php">News-Eintrag hinzufuegen</a><br><br>
              <p>Anzahl der News-Einträge: 1 </p><?php
               
                 = Hans;
               = Neue Seite!;
                = Hey,
               
              hier ist unsere neue Seite <img src="Smileys/grins.gif" alt=":-)">
               
              <img src="Smileys/daumenhoch.gif" alt="Lol"> 
               
              greeZ;
               
               
               = str_replace('#USNAME#', , ="#USNAME#"); 
               = str_replace('#HEADLINE#', , ="#HEADLINE#"); 
               = str_replace('#CONTENT#', , ="#CONTENT#");
               
              ?>
               
              <html>
              <head>
              <meta http-equiv="Content-Language" content="de">
              <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
              <meta name="ProgId" content="FrontPage.Editor.Document">
              <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
              <title>Newssystem</title>
              </head>
              <body>
              <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="80%" id="AutoNumber1" height="232">
                <tr>
                  <td width="100%" height="19" valign="top" style="border-left: 1px solid #111111; <br>
              border-right: 1px solid #111111; border-top-style:<br> 
              solid; border-top-width: 1; border-bottom-style: solid; border-bottom-width: 1"><?php echo "" ?></td>
                </tr>
                <tr>
                  <td width="100%" height="19" valign="top" style="border-left-color: #111111;<br>
               border-left-width: 1; border-right-color: #111111;<br>
              border-right-width: 1"><?php echo "" ?></td>
                </tr>
                <tr>
                  <td width="100%" height="172" valign="top" style="border-left: 1px solid #111111; border-right: 1px solid #111111;<br> 
              border-top-style: solid; border-top-width: 1; border-bottom-style: solid;<br>
               border-bottom-width: 1"><br><?php echo "" ?></td>
                </tr>
              </table>
              </body>
              </html>
               

              und auf der leeren seite so:

              HTML-Code:
              [B]Newssystem[/B]
               
              News-Eintrag hinzufuegen
               
               
              Anzahl der News-Einträge: 1 
               
               greeZ; = str_replace('#USNAME#', , ="#USNAME#"); = str_replace('#HEADLINE#', , ="#HEADLINE#"); = str_replace('#CONTENT#', , ="#CONTENT#"); ?> 

              liegt es daran dass ich das template mit "echo $template;" in der display.php ausgeben lasse?
              Zuletzt geändert von Benni16; 20.08.2009, 14:17.

              Kommentar


              • #8
                nein. in der news.html setzt du die platzhalter à la #USER#, also so:
                PHP-Code:
                <h1>#HEADLINE#</h1> 
                und in der funktion gettemplate holst du dir die datei und ersetzt die platzhalter:
                PHP-Code:
                function gettemplate()
                {
                  
                $headline 'Irgendwas';
                  
                $templ file_get_contents('news.html');
                  
                $content str_replace ('#HEADLINE#'$headline$templ);
                  echo 
                $content;

                und bitte brich deinen code um. ich habe dir ja schon gesagt wie das geht.

                peter

                btw: arbeite mit einer vernünftigen doctype-definition und vergiss auch diese layout-tabellen.
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  habe die umbrüche schon gemacht

                  ok habe das prinzip jetzt verstanden, doch immernoch holt er keine datensätze aus der tabelle:

                  PHP-Code:
                  <?php
                  function gettemplate() 

                   
                    
                  $headline $row['headline']; 
                    
                  $templ file_get_contents('news.html'); 
                    
                  $content str_replace ('#HEADLINE#'$headline$templ); 
                    echo 
                  $content;  
                  }  
                  ?>

                  wenn ich $headline = neu; mache, dann wird auch "neu" angezeigt.. das funktioniert ja, aber wie gesagt er holt die datensätze nicht aus mysql

                  Kommentar


                  • #10
                    Zitat von Benni16 Beitrag anzeigen
                    aber wie gesagt er holt die datensätze nicht aus mysql
                    du sollst den code nicht einfach kopieren sondern mitdenken! wo holst du dir die datensätze? in der funktion? wohl nicht. also wenn du das wo anders machst, dann musst du die werte schon an die funktion als parameter übergeben und dort verarbeiten.

                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      Das Template hat _nichts_ mit der Datenbank zu tun. Hol dir die Werte vorher, schreib sie in eine Variable und übergib diese Variable an die Funktion, die dir dein Template ausgibt.

                      PHP-Code:
                      function gettemplate($tpl_file, array $tpl_vars)

                          
                      $tpl_content file_get_contents($tpl_file);
                          foreach (
                      $tpl_vars as $name => $value) {
                              
                      $content str_replace ('#' $name '#'$value$tpl_content); 
                          }
                          return 
                      $content;  

                      PHP-Code:
                      $vars = array();
                      $vars['HEADLINE'] = 'blu bla blub';

                      echo 
                      gettemplate('news.html'$vars); 
                      Zuletzt geändert von h3ll; 12.06.2009, 12:23.

                      Kommentar


                      • #12
                        kapiere es immernoch nicht

                        hey,

                        hatte wieder etwas zeit für php und grabe den álten thread heraus, weil ich es immernoch nicht hinbekommen habe..

                        mein template news.html:

                        Code:
                        <html>
                        <head>
                        <meta http-equiv="Content-Language" content="de">
                        <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
                        <meta name="ProgId" content="FrontPage.Editor.Document">
                        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
                        <title>Newssystem</title>
                        </head>
                        <body>
                        <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: <br>
                        collapse" bordercolor="#111111" width="80%" id="AutoNumber1" height="232"><br>
                          <tr>
                            <td width="100%" height="19" valign="top" style="border-left: 1px solid #111111; border-right: 1px solid #111111; 
                        <br> border-top-style: solid; border-top-width: 1; border-bottom-style: solid; border-bottom-width: 1">#USNAME#</td><br>
                          </tr>
                          <tr>
                            <td width="100%" height="19" valign="top" style="border-left-color: #111111; border-left-width: 1;<br>
                         border-right-color: #111111; border-right-width: 1">#HEADLINE#</td><br>
                          </tr>
                          <tr>
                            <td width="100%" height="172" valign="top" style="border-left: 1px solid #111111; border-right: 1px solid #111111;<br>
                         
                        border-top-style: solid; border-top-width: 1; border-bottom-style: solid; border-bottom-width: 1"><br>#MESSAGE#</td><br>
                          </tr>
                        </table>
                        </body>
                        </html>

                        meine templatefunc.php

                        PHP-Code:
                        <?php
                         
                        function gettemplate($template$endung="html"$gesamt)
                        {
                        $templatefolder "templates";
                        return 
                        str_replace("\"","\\\"",implode("",file($templatefolder."/".$template.".".$endung)));
                        }
                        function 
                        dooutput($template
                        {
                        foreach(
                        $gesamt as $wert => $inhalt)
                        echo 
                        str_replace ('#' $wert '#'$inhalt$template);
                        }
                        ?>

                        meine display.php

                        PHP-Code:
                        mysql_select_db($db$con) or die (mysql_error());
                        $result mysql_query("SELECT * FROM news ORDER BY date DESC");
                        $Anzahl mysql_num_rows(mysql_query("SELECT * FROM news ORDER BY date DESC"$con));
                         
                        // Anzeige von Anzahl der Einträge
                        $anzahl_eintraege mysql_num_rows($result);
                        echo 
                        "<p>Anzahl der News-Einträge: $anzahl_eintraege </p>";
                         
                        // Daten aus Datenbank holen und Ausgabe im Template
                        for($i 0$i mysql_num_rows($result); $i++)
                        {
                        while(
                        $row mysql_fetch_array($result))
                          {
                        $message $row[content];
                        $usname $row[usname];
                        $headline $row[headline];
                        $gesamt = array($message$usname$headline);
                          }
                        eval (
                        "dooutput(\"".gettemplate("news")."\");"); 
                        {
                        echo 
                        $template;
                        }


                        folgendes: wenn ich als test auf der display.php unten echo $message; schreibe, werden auch die datensätze aus mysql angezeigt.. nun habe ich die datensätze in variabeln geschrieben und in ein array gepackt, das ich dann der funktion zur verfügung stellen will..

                        hier mein 1. probelm, wie kann ich das array der funktion übergeben?

                        als einzigstes bekomme ich angezeigt:

                        PHP-Code:
                        [B]Newssystem[/B]
                         
                        News-Eintrag hinzufuegen
                         
                         
                        Anzahl der News
                        -Einträge


                        wenn ich in der templatefunc statt foreach ganz normal eine variabel mit $message = hey; setzte, wird das template angezeigt und am platzhalter #MESSAGE# steht dann hey.

                        warum funktioniert das nicht mit den datensätzen aus der tabelle?

                        ich verstehe nicht wie ich die variabeln in der funktion weiterverarbeiten kann..

                        ich danke schonmal für eure hilfe

                        greeZ
                        Zuletzt geändert von Benni16; 20.08.2009, 03:08.

                        Kommentar


                        • #13
                          Hi Benny,

                          da die Frage recht komplex ist, der Code jegliche Einrückung vermissen lässt und auch sonst unaufgeräumt und mit Redundanzen gespickt ist, habe ich ihn lediglich überflogen. Könnte es daran liegen, dass in der markierten Zeile $gesamt gar nicht gesetzt ist? Das hätte man doch aber merken müssen, da muss doch eine Fehlermeldung kommen oder ignorierst du die???

                          PHP-Code:
                          function gettemplate($template$endung="html"$gesamt)
                          {
                          $templatefolder "templates";
                          return 
                          str_replace("\"","\\\"",implode("",file($templatefolder."/".$template.".".$endung)));
                          }
                          function 
                          dooutput($template
                          {
                          foreach(
                          $gesamt as $wert => $inhalt// ##MARKE##
                          echo str_replace ('#' $wert '#'$inhalt$template);

                          Bevor du die nächste Anschlussfrage stellst, räum bitte deinen Code auf. Nicht nur in unserem Interesse, sondern auch in deinem, um nicht noch mehr Fehler einzubauen oder durch Altlasten hervorzurufen. Rücke anschließend den Code bitte ein (hauptsächlich in unserem Interesse).

                          Gruß,

                          Anja

                          PS: Noch ne alte Weisheit: "If eval() is the answer, you're almost certainly asking the wrong question." -- Rasmus Lerdorf
                          Zuletzt geändert von AmicaNoctis; 20.08.2009, 03:33.
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #14
                            hey,

                            also hab das alles etwas durchforstet und bin über meinen code gegangen..

                            nun hab ich versucht, das array in eine session zu speichern und diese dann wiederrum ausgeben zu lassen.
                            das funktioniert auch, doch er ließt immer nur einen wert, statt 3 werte aus dem array aus.

                            nochmal die codes:


                            templatefunc.php:


                            PHP-Code:
                            <?php
                            ini_set
                            ('display_errors'1);  
                            error_reporting(E_ALL);
                            function 
                            gettemplate($template$endung="html")
                            {
                            $templatefolder "templates";
                            return 
                            str_replace("\"","\\\"",implode("",file($templatefolder."/".$template.".".$endung)));
                            }
                            function 
                            dooutput($template
                            {
                            foreach(
                            $_SESSION['gesamt'] as $name => $value
                            {
                                 
                            $content str_replace ('#' $name '#'$value$template); 
                                }
                                echo 
                            $content;  
                            }
                            ?>


                            display.php:

                            PHP-Code:
                            mysql_select_db($db$con) or die (mysql_error());
                            $result mysql_query("SELECT * FROM news ORDER BY date DESC");
                            $Anzahl mysql_num_rows(mysql_query("SELECT * FROM news ORDER BY date DESC"$con));
                             
                            // Anzeige von Anzahl der Einträge
                            $anzahl_eintraege mysql_num_rows($result);
                            echo 
                            "<p>Anzahl der News-Einträge: $anzahl_eintraege </p>";
                             
                            // Daten aus Datenbank holen und Ausgabe im Template
                            for($i 0$i mysql_num_rows($result); $i++)
                            {
                            while(
                            $row mysql_fetch_array($result))
                              {
                            $vars               =  array(); 
                            $vars['HEADLINE']   =  $row['headline'];
                            $vars['USNAME']     =  $row['usname'];
                            $vars['MESSAGE']    =  $row['content'];
                            $_SESSION['gesamt'] =  $vars
                              }
                            eval (
                            "dooutput(\"".gettemplate("news")."\");"); 
                            {
                            echo 
                            $template;  
                            }


                            im template news.html bekomme ich dann in der tabelle nur den platzhalter #MESSAGE# ersetzt. #USNAME# und #HEADLINE# im gegensatz nicht.

                            so sieht die Seite aus:




                            thx schonmal
                            Zuletzt geändert von Benni16; 20.08.2009, 13:55.

                            Kommentar


                            • #15
                              eval() ist böse. Lass den Blödsinn.

                              Und rück deinen PHP-Code ordentlich ein, wenn du willst, dass ihn andere Leute lesen können.

                              Kommentar

                              Lädt...
                              X