Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie PHP-Tags mit SQL in Dede

So verwenden Sie PHP-Tags mit SQL in Dede

墨辰丷
墨辰丷Original
2018-05-15 16:20:011585Durchsuche

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}


{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}

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}

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}

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

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}

Der Inhalt dieser Ausgabe ist

  Array  
  (  
  [id] => 2  
  [typename] => 问答  
  )

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}


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  
  )

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] => 产品  
  )

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}

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();  
}

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;  
}  
?>

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}

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!

Stellungnahme:
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