So verwenden Sie PHP-Tags mit SQL in Dede

墨辰丷
Freigeben: 2023-03-25 20:40:02
Original
1583 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die Verwendung von PHP-Tags mit SQL in Dede vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

  {dede:php}  
    //echo 'vvvv';  
    {/dede:php}   
      
{dede:php}  
  
//print_r($refObj->Fields);  
$sql = "select ars.*, art.typedir from dede_archives AS ars   
        LEFT JOIN dede_arctype AS art ON ars.typeid=art.id   
        where typeid=2 ORDER BY weight ASC ";  
$dsql->SetQuery($sql);//将SQL查询语句格式化  
$dsql->Execute();//执行SQL操作  
//通过循环输出执行查询中的结果  
while($row = $dsql->GetArray()){  
    $link   = $refObj->Fields['indexurl'].'/'.$row['typedir'].'/'.$row['id'];  
    $link   = str_replace('{cmspath}', '', $link);  
    $class  = "ahy";  
    if($refObj->Fields['id'] == $row['id']) $class="ahytt";  
  
    echo &#39;<a href="&#39;.$link.&#39;.html" class="&#39;.$class.&#39;">&#39;;  
    echo $row[&#39;title&#39;];  
    echo &#39;</a> &#39;;  
}  
{/dede:php}
Nach dem Login kopieren


{dede:sql}-Tag-Verwendung

SQL-Tag kann als universelles Tag bezeichnet werden , fragen Sie die Datenbank ab und geben Sie sie aus:

1. Es wird zum Beispiel verwendet, um zu zählen, wie viele Nachrichten insgesamt gesendet wurden. Artikel, die Idee besteht darin, die Gesamtzahl der zusätzlichen Tabelleninhalte des Artikels dede_addonarticle auszugeben.

{dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"}  
  
[field:name = "nums"/]  
  
{/dede:sql}
Nach dem Login kopieren

2. Verwenden Sie ~field~, um spezielle Abfragen durchzuführen. Bisher mussten viele Mitglieder im Forum relevante Inhalte von Mitgliedern ausgeben, die derzeit Artikel veröffentlichen. Dies war zuvor mit SQL- oder Arclist-Tags nicht möglich , weil Der Inhalt jedes Artikels ist unterschiedlich. Hier verwenden wir die 5.5-SQL-Anweisung als Demonstration.

Wir fügen zunächst den folgenden Tag an der entsprechenden Position in der Artikelvorlage hinzu:

 {dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"}  
  [field:id/], DEDE模板   
  {/dede:sql}
Nach dem Login kopieren

Fügen Sie dies auf der Seite „article_article.htm“ ein, wodurch relevante Artikel abgerufen werden, die vom aktuellen Mitglied, hier ~ Autor, veröffentlicht wurden ~ wird vor der Ausführung der Abfrage entsprechend den Umgebungsvariablen des aktuellen Inhalts ersetzt.

Der ~writer~, der in der bedingten Abfrage in der SQL-Anweisung erscheint, also der relevante Inhalt in $refObj->Fields[$value]

Verwenden Sie PHP in der Vorlage

Viele Leute hoffen, dass die Template-Tags von DreamWeaver flexibler sein und die Funktion zum Ausführen von PHP hinzufügen können. Hier hat DedeCMS V5.5 ein spezielles Tag {dede:php}{/dede:php} hinzugefügt, das PHP ausführen kann . Dieses Tag kann PHP-Anweisungen ausführen.

Hier sind ein paar häufig verwendete Beispiele:

1. Der einfachste Ausgabeinhalt:

  {dede:php}  
  $numA = 1;  
  $numB = 2;  
  echo $numA + $numB;  
   
  {/dede:php}
Nach dem Login kopieren

Wenn Sie Informationen in {dede:php} ausgeben möchten, können Sie verwenden es direkt Drucken, Echo und dergleichen werden ausgedruckt und @me zugewiesen

Der Inhalt dieser Ausgabe ist das Berechnungsergebnis:

  3
Nach dem Login kopieren

2. Kombiniert mit SQL-Abfrage zur Ausgabe eines einzelnen Inhalts

 {dede:php}  
  $row = $dsql->GetOne(&#39;select id,typename from dede_arctype where id=2&#39;);  
  print_r($row);  
  {/dede:php}
Nach dem Login kopieren

Der Inhalt dieser Ausgabe ist

  Array  
  (  
  [id] => 2  
  [typename] => 问答  
  )
Nach dem Login kopieren

3. Holen Sie sich die Variablen der aktuellen Seite

Zum Beispiel, wenn wir Geben Sie die [Vorlage]-[Global Mark Test] ein. Im Hintergrund des Systems geben wir den Code ein. Füllen Sie den folgenden Inhalt aus:

 {dede:php}  
  print_r($refObj->Fields);  
   
  {/dede:php}
Nach dem Login kopieren


In PHP, wenn Sie möchten Um einen bestimmten Feldwert zu erhalten, können Sie ihn mit dem Objekt $refObj->Fields abrufen und einschließen, um title = >Fields['title']

<🎜; >

Wenn die Umgebungsvariable standardmäßig bleibt, also „keine Umgebungs-ID verwenden“, werden die folgenden Ergebnisse angezeigt:

 Array  
  (  
  [typeid] => 0  
  [phpurl] => /plus  
  [indexurl] => /  
  [templeturl] => /templets  
  [memberurl] => /member  
  [specurl] => /special  
  [indexname] => 主页  
  [templetdef] => /templets/default  
  )
Nach dem Login kopieren

Dann ändern wir den Umgebungsvariablentest. Hier verwende ich meine lokale Spalte als Test:

 Array  
  (  
  [id] => 3  
  [reid] => 0  
  [topid] => 0  
  [sortrank] => 1  
  [typename] => 产品  
  [typedir] => {cmspath}/product  
  … …  
  [indexname] => 主页  
  [templetdef] => /templets/default  
  [position] => 主页 > 产品 >  
  [title] => 产品  
  )
Nach dem Login kopieren

Auf diese Weise können die lokalen Variablen der aktuellen Seite abgerufen werden. Als nächstes können wir die vorherigen SQL-Anweisungen kombinieren, um unterschiedliche Spalteninhalte basierend auf unterschiedlichen Umgebungen aufzurufen Ausweise.

Zum Beispiel:

 {dede:php}  
  $thisid = $refObj->Fields[&#39;id&#39;];  
  $row = $dsql->GetOne(&#39;select id,typename from dede_arctype where id=&#39;.$thisid);  
  print_r($row);  
  {/dede:php}
Nach dem Login kopieren

Hiermit wird der Titel der aktuellen Spalte aufgerufen. Diese Tag-Funktion ähnelt {dede:field.typename/}

Als nächstes führen wir aus Die SQL-Abfrage und die Ausgabevariablen werden verarbeitet:

$dsql->Execute(&#39;me&#39;,$sql);  
while($rs = $dsql->GetArray(&#39;me&#39;))  
{  
//根据属性处理查询变量  
$rs[&#39;title&#39;] = cn_substr($rs[&#39;title&#39;], $titlelen);  
//获取底层模板  
$ctp->LoadSource($innertext);  
foreach($ctp->CTags as $tagid=>$ctag) {  
if(!empty($rs[strtolower($ctag->GetName())])) {  
$ctp->Assign($tagid,$rs[$ctag->GetName()]); DEDE模板   
}  
}  
//根据底层模板及查询变量得到处理结果  
$revalue .= $ctp->GetResult();  
}
Nach dem Login kopieren

Auf diese Weise ersetzen wir die Abfrageergebnisse durch die relevanten Variablen, die in der zugrunde liegenden Vorlage erscheinen, generieren dann die Ausgabezeichenfolge und speichern alle Zeichenfolgeninformationen in $ aufwerten.

Schließlich diesen Wert zurückgeben return $revalue;

Der Inhalt der gesamten Datei ist wie folgt:

if(!defined(&#39;DEDEINC&#39;))  
{  
exit("Request Error!");  
}  
function lib_writerarc(&$ctag,&$refObj)  
{  
global $dsql,$envs;  
//属性处理  
$attlist="row|12,titlelen|24";  
FillAttsDefault($ctag->CAttribute->Items,$attlist);  
extract($ctag->CAttribute->Items, EXTR_SKIP);  
$revalue = &#39;&#39;;  
$innertext = $ctag->GetInnerText();  
$ctp = new DedeTagParse();  
$ctp->SetNameSpace(&#39;field&#39;, &#39;[&#39;, &#39;]&#39;);  
$sql = "SELECT * FROM dede_archives WHERE writer=&#39;{$refObj->Fields[&#39;writer&#39;]}&#39; limit 0, $row";  
$dsql->Execute(&#39;me&#39;,$sql);  
while($rs = $dsql->GetArray(&#39;me&#39;))  
{  
//根据属性处理查询变量  
$rs[&#39;title&#39;] = cn_substr($rs[&#39;title&#39;], $titlelen);  
//获取底层模板  
$ctp->LoadSource($innertext);  
foreach($ctp->CTags as $tagid=>$ctag) {   
if(!empty($rs[strtolower($ctag->GetName())])) {  
$ctp->Assign($tagid,$rs[$ctag->GetName()]);  
}  
}  
//根 据底层模板及查询变量得到处理结果  
$revalue .= $ctp->GetResult();  
}  
return $revalue;  
}  
?>
Nach dem Login kopieren

Als nächstes testen wir unser Tag, wir ändern die Vorlage „article_article.htm“. , innen Fügen Sie den folgenden Tag-Code hinzu:

{dede:writerarc row=&#39;10&#39; titlelen=&#39;6&#39;}  
[field:title/]   
{/dede:writerarc}
Nach dem Login kopieren

Verwandte Empfehlungen:

dedecms5.7 neueste SQL Ausnutzen der Guestbook-.php-Injection-Schwachstelle

Das Überschreiben der Dedecms-SESSION-Variable führt zur SQL-Injection-Lösung common.inc.php

PHP-Befehlsinjektion dedecms Remote Writing File Link Beispielfreigabe


Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP-Tags mit SQL in Dede. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage