 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
31.08.2002, 17:29
|
#1
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
[PHP/mySQL] Template Problem mit if / else
Ich hab gerad ein Problem, das mich zur Verzweiflung bringt ... ich arbeite an einem templatebasierendem Newssystem.
Es soll einen Cheeck geben, ob es News gibt oder nicht. Gibt es welche, wird ein Array mit allen News erstellt (ROWS).
Gibt es keine News, wird nur ein Array mit einem Textinhalt erstellt (KEINENEWS).
Sieht so aus:
PHP-Code:
$result = mysql_query("SELECT id,titel,time,content FROM news WHERE status='view' ORDER BY time DESC",$dbase);
if(empty($result))
{
$t->set_var(array("KEINENEWS" => "Derzeit gibt es keine neuen News oder Events."));
}
else
{
while ($daten = mysql_fetch_array($result))
{
$titel=stripslashes($daten[titel]);
$datum=unix2date($daten[time],"long");
$inhalt=substr(bbcode2html($daten[content]), 0, 200)." ...";
$link="details.php?id=".$daten[id];
$t->set_var(array("NEWSTITEL" => $titel, "NEWSDATUM" => $datum, "NEWSCONTENT" => $inhalt, "NEWSLINK" => $link));
$t->parse("rows", "row", true);
}
}
Das Problem ist - wenn News existieren, werden diese auch ganz brav erstellt, eingebaut und und auch dargestellt.
Gibt es keine News, sollte ja eigentlich das andere Array erstellt und eingebaut werden - aber es passiert nicht. Ich hab keine Ahnung, wieso!
Im Template selbst sind {ROWS} und {KEINENEWS} eingebaut. Daher müsste entweder das eine oder andere angezeigt / eingebaut werden. Aber das funktioniert wie schon gesagt nur mit den News.
Irgendwelche Ideen? 
__________________
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
|
|
|
31.08.2002, 17:43
|
#2
|
|
TP-Specialist
Registriert seit: Feb 2002
Ort: Wien
|
Hi Adagio,
also wenn ich das richtig sehe, muss du im ersten Zweig ebenfalls das $t->parse(wasimmerdahineinkommt) angeben, sonst wird ja im Falle, dass keine News vorhanden sind, nur das Array erstellt, aber nichts ins Template eingefügt.
Kann das sein?
|
|
|
31.08.2002, 17:46
|
#3
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
Nein, das ist doch nur ein Ausschnitt der Codes. Das wird alles in der letzten Zeile "geparst".
Wenn ich zum Test das Array KEINENEWS nicht in diese if/else Abfrage baue sondern "einfach so", wird es ja dargestellt. Pack ich es aber da rein, wird es das nicht mehr. Daher bin ich ja so irritiert ...
Hier ist der ganze Code ... Du siehst, SEITENTITEL wird genauso erstellt wie KEINENEWS und wird auch ohne Probleme dargestellt. Aber pack ich das in die if/else Abfrage, gehts nicht mehr.
PHP-Code:
<?php
# News page
# Last change: 30.08.2002 19:00
include("../../inc/common/functions.php");
include("../../inc/common/template.inc");
include("../../inc/common/config.php");
# create Template instance called $t
# for debugging add , "keep"
$t = new Template("../../tpl/news");
# define variables named page and box, referencing files
$t->set_file(array(
"HAUPTSEITE" => "hauptseite.html",
"META" => "../../inc/meta/meta.html",
"LOGO" => "../../inc/topnav/logo.html",
"NAVIGATION" => "../../inc/topnav/topnav_4.html",
"LEFTNAVIGATION" => "../../inc/leftnav/news.html",
"SMALLNAVIGATION" => "../../inc/smallnav/smallnav.html",
"NEWSBLOCK" => "news.html"));
# extract the block named "row" from "box", creating a
# reference to {rows} in "box".
$t->set_block("NEWSBLOCK", "row", "rows");
# define the variable SEITENTITEL
$t->set_var(array("SEITENTITEL" => "Format//Webdesign - News & Events / Aktuelle News"));
# Get all data from the database
$result = mysql_query("SELECT id,titel,time,content FROM news WHERE status='view' ORDER BY time DESC",$dbase);
if(empty($result))
{
$t->set_var(array("KEINENEWS" => "Derzeit gibt es keine neuen News oder Events."));
}
else
{
while ($daten = mysql_fetch_array($result))
{
$titel=stripslashes($daten[titel]);
$datum=unix2date($daten[time],"long");
$inhalt=substr(bbcode2html($daten[content]), 0, 200)." ...";
$link="details.php?id=".$daten[id];
$t->set_var(array("NEWSTITEL" => $titel, "NEWSDATUM" => $datum, "NEWSCONTENT" => $inhalt, "NEWSLINK" => $link));
$t->parse("rows", "row", true);
}
}
# build page...
$t->parse("SEITE", array("NAVIGATION","META","LOGO","LEFTNAVIGATION","SMALLNAVIGATION","HAUPTSEITE"));
# finish and print it.
$t->p("SEITE");
?>
__________________
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
|
|
|
31.08.2002, 17:55
|
#4
|
|
TP-Specialist
Registriert seit: Feb 2002
Ort: Wien
|
Oh, da hab ichs falsch verstanden. Komm grad nicht dazu, mir das genau anzusehen, aber hast wenns nur an der Abfrage liegt, hast du es schon mal mit
PHP-Code:
if ((!$result) or (empty($result)) {
versucht - mag sein, dass er mit empty nicht das leere DB-Handle erkennt 
|
|
|
31.08.2002, 18:29
|
#5
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
Nee, das geht auch nicht ... manmanman ...
__________________
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
|
|
|
31.08.2002, 18:33
|
#6
|
|
TP-Veteran
Registriert seit: Jan 2002
|
hm...genau dort hätt ich den fehler auch zuerst gesucht...hast dus mal mit ner mysql_affected_rows()-Überprüfung probiert?
|
|
|
31.08.2002, 18:50
|
#7
|
|
TP-Specialist
Registriert seit: Feb 2002
Ort: Wien
|
Seltsam, seltsam. Zu seb's Vorschlag könntest du alternativ noch die Select-Anweisung direkt im mysql Monitor eingeben und schauen, ob da ein empty set oder eine Fehlermeldung zurückkommt.
Wenn da ein empty set ausgegeben wird, dann in der Schleife mit echo mal testen, ob das Skript überhaupt in den richtigen Zweig reingeht.
Wenn das auch ok ist, kanns ja wohl nur noch an der Methode $t->set_var liegen, wenn der Rest mit einem selbst erstellten Array funktioniert.
Ansonsten hilft bei mir manchmal, das Zeug auf die Seite legen und am nächsten Tag damit weitermachen 
|
|
|
01.09.2002, 00:13
|
#8
|
|
TP-Newbie
Registriert seit: Jul 2001
Ort: Hilden (NRW)
|
Hi Adagio,
ich bin relativ neu hier, lese zwar schon ne ganze Zeit mit aber was geschrieben habe ich noch nicht.
Somit bist du der erste dem ich versuche zu helfen.
Ich denke dein Problem ist aber nicht so schwer, falls ich es richtig verstanden habe, und zwar prüfst du ja denn Inhalt von $result mit "if(empty($result))", $result wird aber immer einen Inhalt haben weil mysql_query() ein Ergebnisszeiger zurückgibt und somit hat $result immer einen Wert und "if(empty($result))" gibt FALSE zurück.
Versuch es doch mal so:
PHP-Code:
$result = mysql_query("SELECT id,titel,time,content FROM news WHERE status='view' ORDER BY time DESC",$dbase);
if(mysql_num_rows($result) == "0")
{
$t->set_var(array("KEINENEWS" => "Derzeit gibt es keine neuen News oder Events."));
} else {
// Dein Rest halt...
}
Ich hoffe mal mein erster Beitrag hier war jetzt nicht direckt totaler Quatsch!
Cu,
Chacky
|
|
|
02.09.2002, 11:11
|
#9
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
Hey, das war es - hätt' ich auch selbst drauf kommen, aaah
Auf alle Fälle - danke! 
__________________
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:28 Uhr.
|
 |