mit folgendem werden in einem Text diese Zeichenfolge {MyTag:xxx}durch Text
aus einer Datenbank-Tabelle mit
entsprechender Id ersetzt.
Ich möchte den Tag wie folgt erweitern [MyTag:xxx:lang:tab}
Hierbei soll die DB-Tabelle 'textbausteine' und die Sprachspalte also row[2]
bei jedem "MyTag" eingestellt werden können.
include("db_zugriff.php");
$content["all"] = preg_replace('/\{MyTag:(\d+)\}/ie', 'get_db_entry($1);',
$content["all"]);
function get_db_entry($myid=0){
$myid = intval($myid);
$html = '';
if($myid) {
$query = ("select * from textbausteine WHERE id='$myid'");
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_row ($result);
$num = mysql_num_rows($result);
if ($num>0){
$html = $row[1];
}
}
return $html;
}
Für Hilfe wäre ich dankbar.
Gruss
Christoph
> mit folgendem werden in einem Text diese Zeichenfolge
> {MyTag:xxx}durch Text aus einer Datenbank-Tabelle mit
> entsprechender Id ersetzt.
>
> Ich möchte den Tag wie folgt erweitern {MyTag:xxx:lang:tab}
Du lässt sehr viel Spielraum für Raterei. Ich setze jetzt einfach mal
voraus, dass in 'lang:tab' 'lang' ein Schlüsselwort und 'tab' ein
Platzhalter für ein Sprachkürzel sind.
> include("db_zugriff.php");
> $content["all"] = preg_replace('/\{MyTag:(\d+)\}/ie',
> 'get_db_entry($1);', $content["all"]);
$search = '/\{MyTag:(\d+):lang:([a-z]+)\}/ie';
$replace= 'get_db_entry($1,$2);';
$content['all'] = preg_replace($search, $replace, $content["all"]);
> function get_db_entry($myid=0){
function get_db_entry($myid=0, $language='de')
{
...
}
Innerhalb der Funktion suchst du dir dann den passenden Datensatz.
MfG
Niels
--
> Bitte FAQ lesen und Shift-Taste nutzen.
wieso shift-taste? versteh das nicht so ganz.
[Alexander Fleischer in dclpm]
versuchs mal so:
Die Werte zu $id, $lang und $tab kannst du ja vorher schon ermitteln,
sind nur exemplarisch!
<?php
$id = 2;
$lang = "de";
$tab = "textbausteine";
$string = "MyTag:xxx:lang:tab";
$pattern = "/(\w):(\w+):(\w+):(\w+)/";
$replacement = "\${1}:".$id.":".$lang.":".$tab;
print preg_replace($pattern, $replacement, $string);
// Oder so ;)
print "<hr>";
$tmpString = "MyTag:%d:%s:%s";
print sprintf($tmpString, $id, $lang, $tab);
?>
Ciao
Stefan
> Du lässt sehr viel Spielraum für Raterei. Ich setze jetzt einfach mal
> voraus, dass in 'lang:tab' 'lang' ein Schlüsselwort und 'tab' ein
> Platzhalter für ein Sprachkürzel sind.
>
Hallo Niels,
danke erstmal.
Es ist tatsächlich etwas wirr, was ich da schreibe. Ich versuche es
nocheinmal:
Funktionieren tut es ja bereits mit diesem Textstring: {MyTag:123}
Die DB-Tabelle "textbausteine" sieht z.B. so aus:
ID deutsch englisch
1 Text1 mytext1
2 Text2 mytext2
... ..... .....
Nun möchte ich {MyTag:123:deutsch:textbausteine} verwenden,
D.h. Es soll direkt die Tabellen-Spalte sowie der Tabellen-Namen bei
{MyTag:1:deutsch:textbausteine}
verwendet werden können.
Das müsste dann so aussehen:
if($myid) {
$query = ("select * from $tab WHERE id='$myid'"); //$tab kommt von
{MyTag:xxx:lang:tab}
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_row ($result);
$num = mysql_num_rows($result);
if ($num>0){
$html = $row['$lang']; //$lang kommt von {MyTag:xxx:lang:tab}
}
Wie komme ich nun an die Variablen $tab und $lang.
Gruß und Dank
Christoph
> Es ist tatsächlich etwas wirr, was ich da schreibe. Ich versuche es
> nocheinmal:
>
> Funktionieren tut es ja bereits mit diesem Textstring: {MyTag:123}
> Die DB-Tabelle "textbausteine" sieht z.B. so aus:
>
> ID deutsch englisch
> 1 Text1 mytext1
> 2 Text2 mytext2
> ... ..... .....
Das Design der Datenbank ist nicht normalisiert.
> Nun möchte ich {MyTag:123:deutsch:textbausteine} verwenden,
> D.h. Es soll direkt die Tabellen-Spalte sowie der Tabellen-Namen bei
> {MyTag:1:deutsch:textbausteine}
> verwendet werden können.
$search = '/\{MyTag:(\d+):(\w+):(\w+)\}/ie';
$replace= 'get_db_entry($1,$2,$3);';
$content['all'] = preg_replace($search, $replace, $content['all']);
function get_db_entry($myid=0, $language='deutsch', $table=null)
{
if ($myid==0 || %table==null) return false;
$sqlStr = "SELECT $language
FROM $table
WHERE id=$myid";
$result = mysql_query($sqlStr)
or die($sqlStr.'<br>'.mysql_error());
$html = '';
while ($row=mysql_fetch_assoc($result)) {
$html.= $row[$language];
}
return $html;
}
Beschäftige dich mal mit folgenden FAQ-Artikeln:
27.1. Halte Code links. Verwende Wächter statt Schachtel-if
http://www.dclp-faq.de/q/q-stil-waechter.html
8.5. Welche Bauelemente kommen in Regulären Ausdrücken vor?
http://www.dclp-faq.de/q/q-regexp-bauelemente.html
MfG
Niels
--
IcH fInDe AuCh, dAsS eS nIcHt So WiChTig IsT, eInEn TeXt In KoRrEcKtEr
gRoSs- Und KlEiNsChReIbUnG zU vErFaSsEn, Da DiEs DeR LeSbArKeIt KaUm
AbBrUcH tUt UnD zUdEm AuSdRuCk MeInEr InDiViDuAlItAeT iSt.
[Joachim Kromm in dsnu]
> Das Design der Datenbank ist nicht normalisiert.
Hallo Niels,
vielen Dank, nun tut es.
Was meinst Du mit der nicht normalisierten Datenbank?
Christoph
Du benötigst für jede Sprache eine neue Spalte, die Struktur der Tabelle
muss also ständig geändert werden. Richtig normalisiert muss es etwa so
aussehen:
id|language|phrase
wobei language einen Zeiger in eine Nachschlagetabelle (numerisch oder
als internationales Sprachkürzel; in diesem Falle kann die zweite
Tabelle entfallen) enthält.
Der Primärschlüssel wird aus id und language zusammengesetzt, id allein
ist jetzt nicht mehr eindeutig. Beispiel:
id | language | phrase
---+----------+---------------
1 | de | Guten Tag
1 | en | Hi
2 | de | Arbeit
2 | en | work
MfG
Niels
--
Mir fehlen die Kenntnisse, um überhaupt eine Vorstellung davon zu
haben, wo ich ansetzen kann den Fehler zu suchen. Einen
Programmierfehler kann ich aber ausschließen.
[Florian Steyer in dclpi]