Hallo,
ich möchte eine Variable von php an smarty übergeben. Umgekert habe ich das schon hinbekommen.
[{php}]
//Auslesen der Anahl der Disk
$sql = "SELECT set_inhalt
FROM z_technik
WHERE oxid_id = '$idvergleich'
";
$result_anzahl_disk = mysql_query($sql);
$azd = mysql_result($result_anzahl_disk,0,0);
[{/php}]
Die Variable $azd soll an smarty übergeben werden. Ich möchte dann dort wieder prüfen, ob Bedingungen erfüllt sind z.B.
warum schreibst du deinen PHP-Code (so wie ich es lese) überhaupt in dein Template? Der hat da nix verloren. Warum nicht einfach einen Zweizeiler als Modul und nen Getter?
Ich fürchte nämlich, dass dein $idvergleich ungefiltert aus einer Variable kommt. Richtig? Jeder der das hier ließt, hackt dir deinen Shop in 30 Sekunden!
[QUOTE=leofonic;60797]Im php muss es statt $smarty $this heißen.
Edit: Aber Joscha hat natürlich recht.[/QUOTE]
Hallo,
wenn das mit dem PHP so bedenklich ist, würde ich das genre anders lösen.
Ich habe in der tabs.tpl, also dort, wo die Beschreibung der Produkte steht folgendes eingebaut:
[{include file=“page/details/inc/z_inhalt.tpl”}]
Innerhalb dieser z_inhalt.tpl führe ich die bereits gepostete Datenbankabfrage aus.
Die Abfrage erfolgt aus einer neuen Tabelle, die noch nicht im Shopsystem vorhanden war.
Mein Problem ist jetzt, dass ich die Abfrage aus einer Datenbank mittels php schon kannte und das somit relativ leicht umsetzen konnte.
Die Verbindung der Daten zum Produkt waren auch leicht, da ich die variable der aktuellen oxid_id auf der Seite von Smarty an php übergeben konnte.
Leider ist es mir nicht klar, wie ich anders als mit der bereits geposteten Abfrage die Daten aus der neuen Tabelle auslese.
Ich habe versucht, in den einzelnen Ordnern im Shop nachzuvollziehen, wie die Variablen ausgelesen werden und an welcher Stelle die an die Templates übergeben werden.
Ich kann nur vermuten, dass dies in der oxfunctions.php erfolgt?
Und dann wird in weiterer Folge das Auslesen der Daten eines einzelnen Artikel in der oxarticle.php erfolgen die im Verzeichnis Core liegt?
Danke und Gruß,
Norbert
Grundsätzlich gehört ins Template wirklich nur die Ausgabe. Die Funktion sollte davon getrennt sein. Das stellt sicher, dass dein Code später auch mit einem anderen Template verwendet werden kann. Das anfänglich etwas umständlich erscheinende Herangehensweise relativiert sich schnell!
Auf jeden Fall solltest du Usereingaben niemals vertrauen. Erwartest du also eine oxId als Wert, dann ist das eine alpha-nummerische Zeichenkette mit maximal 32 Zeichen. Teste den Wert daruaf und entferne sonst alles andere oder brich ggf. ab. So kann dir niemand eine SQL-Injection in die Datenbank jagen.
Wenn du nach dem Framework vorghest, kannst du das umgehen, indem du deine Werte entsprechen ausließt und bereinigst. Das passiert im Hintergrund, wenn du deine Parameter wie folgt aufrufst:
$this->getConfig()->getParamter('meineVariable')
Deine Änderungen gehören in ein eigenes Modul. Oder ggf. noch in modules/functions.php. Die oxfunctions.php ist tabu! gilt übrigens grundsätzlich und vor allem für alles was mit ox* oder OX* anfängt!
@rubbercut:
die Variable idvergleich kann man so nicht im php-Block verwenden, und wenn du $oSmarty holst, solltest du es auch verwenden und nicht $smarty, wie gesagt geht auch einfach $this.