php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit Array & Template


 
yogi64
16-06-2003, 13:33 
 
Hallo Leute,

ich habe ein Problem mit einem Script was ich gern bei mir einsetzen möchte. Dieses Script arbeitet mit Templates und läuft auch bei akt. PHP-Versionen super. Ich verwende aber eine ältere PHP-Version und vermute da mal den Grund das das Script nicht fehlerfrei läuft.

Hier mal der Originalcodeschnippel vom Autor. Hier werden die Datensätze aus der Tabelle ausgelesen in Variablen gespeichert und sollten dann an die Platzhalter im Template weitergegeben werden, das funktioniert mit meiner PHP-Version 4.0.0 nicht


// Standard-Template laden wenn kein User-Template vorhanden ist!
$get_tpl_1=mysql_query("SELECT tpl_1 FROM ja_$sql_cfg_bb") or die("Template kann nicht geladen werden!<br>".mysql_error());
$template_e=mysql_fetch_array($get_tpl_1);
$template=$template_e[tpl_1];
/* Kein Template in der MySQL-Datenbank?! => Standard anzeigen */
if ($template == '') {
$template = "<table border=0 cellpadding=2 cellspacing=3 width=100%><tr><td width=96 align=center valign=top ";
$template.= "rowspan=5>{BILD}</td><th colspan=2>\"{TITEL}\"</td></tr><tr><th>Autor:</th><td>{AUTOR}</td></tr>";
$template.= "<tr><th>Verlag:</th><td>{VERLAG}</td></tr><tr><th>Preis:</th><td>{PREIS} EUR</td></tr><tr><th ";
$template.= "align=left colspan=2>Kurzbeschreibung dieses Titels:</td></tr><tr><td align=left colspan=3><p ";
$template.= "align=justify>{BESCHR}...</p></td></tr><tr><td colspan=3 align=right><a href=\"{URL}\" ";
$template.= "target=\"_blank\">...mehr über dieses Buch</a> & <a href=\"{URL}\" target=\"_blank\">Bestellen</a>";
$template.= "</td></tr></table><br>";
}
while($erg=mysql_fetch_array($inhalt)) {
if (file_exists($imgpfad."/".$erg[ASIN].".jpg")) {
$info = getimagesize($imgpfad."/".$erg[ASIN].".jpg");
$v_bild = "<A HREF=\"$PHP_SELF?action=go&ASIN=$erg[ASIN]\" target=\"_blank\"><img ";
$v_bild.= "src=\"$imgurl/$erg[ASIN].jpg\" $info[3] border=0 alt=\"$erg[Titel]\"></a>";
} else {
$info = getimagesize($imgpfad."/keinbild.gif");
$v_bild = "<A HREF=\"$PHP_SELF?action=go&ASIN=$erg[ASIN]\" target=\"_blank\"><img ";
$v_bild.= "src=\"$imgurl/keinbild.gif\" $info[3] border=0 alt=\"keine Vorschau\"></a>";
}
$v_titel = stripslashes($erg[Titel]);
$v_autor = stripslashes($erg[Autor]);
$v_verlag = stripslashes($erg[Verlag]);
$v_preis = $erg[Preis];
$v_beschr = stripslashes($erg[Beschreibung]);
$v_url = "$PHP_SELF?action=go&ASIN=$erg[ASIN]";
echo str_replace(
array("{BILD}","{TITEL}","{AUTOR}","{VERLAG}","{PREIS}","{BESCHR}","{URL}"),
array($v_bild,$v_titel,$v_autor,$v_verlag,$v_preis,$v_beschr,$v_url),
$template);
}

Hat jemand eine Idee, wie ich das auch mit einer alten PHP-Version lauffähig bekomme? Entscheidend sind wohl die Zeilen ab echo str_replace(.... Ich habe versucht es mit einer kl. Änderung hinzubekommen. Mit dem Ergebnis, das nun zwar die Platzhalter richtig gefüllt werden, aber es wird immer nur ein und der selbe Datensatz ausgegeben. anstatt alle 4 verschiedenen :(


$array_1 = array("{BILD}","{TITEL}","{AUTOR}","{VERLAG}","{PREIS}","{BESCHR}","{URL}");
$array_2 = array($v_bild,$v_titel,$v_autor,$v_verlag,$v_preis,$v_beschr,$v_url);
for($x1=0;$x1<7;$x1++) { $template = str_replace($array_1[$x1],$array_2[$x1],$template);
}
echo $template;
}



Wie schon erwähnt, was ich sehr merkwürdig finde, bei anderen funktioniert das Script im Original fehlerfrei, die PHP höher 4.0.0 einsetzen....

Vielleicht kann mir ja einer helfen, das das Script auch bei mir fehlerfrei läuft. Ich würde mich über jede Hilfe freuen :)

cu Yogi

 
norbert
16-06-2003, 16:24 
 
du überschreibst dir $template schon nach dem ersten Durchgang der
while-schleife

schreib mal
$output= str_replace($array_1[$x1],$array_2[$x1],$template);

echo $output;

 
yogi64
16-06-2003, 17:50 
 
Hallo Norbert,

danke Dir für Dein Tip :). Zeitgleich habe ich auch noch ein Freund befragt und um Hilfe gebeten. Er hat folgende Lösung gefunden:


$temp = $template;
for($x=0;$x<7;$x++) { $temp = str_replace($array_1[$x],$array_2[$x],$temp);
}
echo $temp;


Nun läuft alles Bestens :)

Was mich aber trotz allem verwundert, warum die Originalroutine nun überhaupt nicht funktioniert(e), siehe grösseren Codeschnippel....

Yogi

 
Wurzel
16-06-2003, 17:56 
 
ein blick ins manual gibt aufschluss:
Seit PHP 4.0.5 kann jeder Parameter von str_replace() auch ein Array sein.
http://de3.php.net/manual/de/function.str-replace.php

 
yogi64
16-06-2003, 18:28 
 
Hi Wurzel,

danke Dir für Dein Tip.

cu Yogi


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:15 Uhr.