Maison >développement back-end >tutoriel php >Comment utiliser les balises PHP avec SQL dans Dede

Comment utiliser les balises PHP avec SQL dans Dede

墨辰丷
墨辰丷original
2018-05-15 16:20:011614parcourir

Cet article présente principalement comment utiliser les balises php avec sql dans dede. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

  {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} utilisation de la balise

la balise sql peut être appelée C'est une balise universelle. Interrogez la base de données et affichez-la. Voici quelques utilisations de cette balise :

1. Elle est utilisée pour afficher du contenu statistique. Par exemple, comptons le nombre total de publications. Combien d'articles y a-t-il ? L'idée est d'afficher le nombre total de contenus de table supplémentaires de l'article dede_addonarticle.

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

2. Utilisez ~field~ pour effectuer des requêtes spéciales. Par exemple, de nombreux membres du forum devaient auparavant afficher le contenu pertinent des membres qui publient actuellement des articles. Cela n'était pas possible avec SQL ou Arclist. balises avant. , parce que le contenu de chaque article est différent, nous utiliserons ici l'instruction SQL 5.5 comme démonstration.

Nous ajoutons d'abord la balise suivante à la position correspondante dans le modèle d'article

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

Mettez-la sur la page article_article.htm, qui récupérera les articles pertinents publiés par le membre actuel, ici ~writer~ remplacera les variables d'environnement en fonction du contenu actuel avant d'exécuter la requête.

Le ~writer~ qui apparaît dans la requête conditionnelle de l'instruction SQL, c'est-à-dire le contenu pertinent dans $refObj->Fields[$value]

Utiliser PHP dans le modèle

Beaucoup de gens espèrent que les balises de modèle de Dreamweaver pourront être plus flexibles et ajouter la fonction d'exécution de PHP. Ici, DedeCMS V5.5 a ajouté une balise spéciale {dede:php}{/dede:php} qui peut exécuter PHP. . Cette balise peut exécuter des instructions PHP.

Voici quelques exemples couramment utilisés :

1. Le contenu de sortie le plus simple :

  {dede:php}  
  $numA = 1;  
  $numB = 2;  
  echo $numA + $numB;  
   
  {/dede:php}

Si vous souhaitez afficher des informations dans {dede:php}, vous peut directement utiliser print, echo et autres pour imprimer la valeur attribuée à @me n'est pas valide

Le contenu de cette sortie est le résultat du calcul :

  3

2. Combiné avec la sortie d'une requête SQL Un seul élément de contenu

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

Le contenu de sortie est

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

3. Obtenez les variables de la page actuelle

Pour exemple, on rentre ici le [template]-[ du background système Global tag test], on remplit le contenu suivant dans le code :

 {dede:php}  
  print_r($refObj->Fields);  
   
  {/dede:php}


Si vous souhaitez obtenir une certaine valeur de champ en PHP, vous pouvez utiliser l'objet $refObj-> ;Fields pour être inclus pour obtenir title => $refObj->Fields['title']

Si la variable d'environnement reste la valeur par défaut, c'est-à-dire "ne pas utiliser l'ID d'environnement", nous verrons les résultats suivants :

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

Modifions ensuite la variable d'environnement à tester Ici. J'utilise ma colonne locale comme test :

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

De cette façon, les variables locales de la page actuelle sont récupérées. Ensuite, nous pouvons combiner les instructions SQL précédentes pour en appeler différentes. contenu des colonnes en fonction de différents ID d’environnement.

Par exemple :

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

Il s'agit d'appeler le titre de la colonne actuelle. Cette fonction de balise est similaire à {dede:field.typename/}

Suivant. nous exécutons la requête traite SQL et les variables de sortie :

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

De cette façon, nous remplaçons les résultats de la requête par les variables pertinentes qui apparaissent dans le modèle sous-jacent, puis générons la chaîne de sortie et stockons toutes les informations de chaîne en $ réévaluer.

Enfin, retournez cette valeur return $revalue;

Le contenu de l'ensemble du fichier est le suivant :

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

Ensuite, nous allons tester notre balise, nous modifions l'article_article Modèle .htm, ajoutez le code de balise suivant à l'intérieur :

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

Recommandations associées :

dedecms5.7 La dernière vulnérabilité d'injection SQL exploit guestbook.php

l'écrasement de la variable dedecms SESSION conduit à une solution d'injection SQL common.inc.php

Injection de commande PHP dedecms écriture à distance exemple de lien de fichier partage


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn