| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

11-06-2009, 15:56
|
|
Benni16
Registrierter Benutzer
|
|
Registriert seit: May 2009
Ort: Bayern
Beiträge: 12
|
|
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> "; } 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
Geändert von Benni16 (20-08-2009 um 14:16 Uhr)
|

11-06-2009, 16:09
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
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
|

11-06-2009, 16:20
|
|
Benni16
Registrierter Benutzer
|
|
Registriert seit: May 2009
Ort: Bayern
Beiträge: 12
|
|
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
Geändert von Benni16 (20-08-2009 um 14:16 Uhr)
|

11-06-2009, 16:33
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
|
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
|

11-06-2009, 16:56
|
|
Benni16
Registrierter Benutzer
|
|
Registriert seit: May 2009
Ort: Bayern
Beiträge: 12
|
|
also meinst du das dann so?:
PHP-Code:
$usname = $row['usname']; $comment = str_replace("$usname", "#USNAME#" alt="usname">", $comment);
|

11-06-2009, 17:01
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
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
|

11-06-2009, 17:50
|
|
Benni16
Registrierter Benutzer
|
|
Registriert seit: May 2009
Ort: Bayern
Beiträge: 12
|
|
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?
Geändert von Benni16 (20-08-2009 um 14:17 Uhr)
|

11-06-2009, 17:58
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
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
|

11-06-2009, 18:46
|
|
Benni16
Registrierter Benutzer
|
|
Registriert seit: May 2009
Ort: Bayern
Beiträge: 12
|
|
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
|

11-06-2009, 18:50
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
Zitat von Benni16
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
|

12-06-2009, 12:20
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
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);
Geändert von h3ll (12-06-2009 um 12:23 Uhr)
|

20-08-2009, 03:04
|
|
Benni16
Registrierter Benutzer
|
|
Registriert seit: May 2009
Ort: Bayern
Beiträge: 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: 2
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
Geändert von Benni16 (20-08-2009 um 03:08 Uhr)
|

20-08-2009, 03:29
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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
Geändert von AmicaNoctis (20-08-2009 um 03:33 Uhr)
|

20-08-2009, 13:06
|
|
Benni16
Registrierter Benutzer
|
|
Registriert seit: May 2009
Ort: Bayern
Beiträge: 12
|
|
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
Geändert von Benni16 (20-08-2009 um 13:55 Uhr)
|

20-08-2009, 13:10
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
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.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|