在PHP中如何替换函数中特定位置的字符串?

3

我希望从我的函数中打印一些动态数据到传递的字符串,就像这样。

我的函数

function mysql_funX_Repeter($query,$itemtemplet)
{
    $this->mysql_funX_connect();

    $result = mysql_query($query) or die("Repeter Query Error.");
    if (!$result) 
    {
        $message = 'ERROR:' . mysql_error();
        return $message;
    }
    else
    {
        $newtempelt = str_replace("Eval", '$row', $itemtemplet);
        while ($row = mysql_fetch_array($result)) 
        {

            echo $newtempelt;
        }
    }
}

函数中传递值

<ul>
<?php
$rptvalue="<li><a href=''>Eval['name']</a></li>";
$myFun->mysql_funX_Repeter("Select name from tbldemo",$rptvalue);
?>
</ul>

我的输出

  • $row['name']
  • $row['name']
  • $row['name']

我想要的输出结果

  • raj

  • ram

  • prince

但它只显示变量,而不显示数据库中的值。 如何解决这个问题...!!!


我不确定这是为什么,我怀疑这是一种保障措施。这里有一个更简单的用法例子。$row ['name'] ='test'; $rptvalue="<li><a href=''>Eval['name']</a></li>"; echo str_replace("Eval", '$row', $rptvalue); - chris85
不好意思,先生。这样是行不通的。它会显示像 $row['name'] 这样的内容。 - Priyank Patel
我对这种行为不太熟悉,并且一直没有找到相关的文档。我发布的代码是你代码的简化版本,以便演示问题;这样其他人在遇到同样问题时就能更快地复现并知道原因了。 - chris85
你真的应该尽量避免使用mysql_函数,因为它们已经过时了请参见此处。这个问题的答案http://stackoverflow.com/questions/7574437/php-problem-with-function-and-eval-on-array展示了一种实现你所需功能的方法。 - Jonny C
谢谢您,先生。它可以工作了...!!! - Priyank Patel
3个回答

0

我会稍微改变你的方法。

function mysql_funX_Repeter($query,$itemtemplet)
{
    $this->mysql_funX_connect();

    $result = mysql_query($query) or die("Repeter Query Error.");
    if (!$result) 
    {
        $message = 'ERROR:' . mysql_error();
        return $message;
    }
    else
    {
        while ($row = mysql_fetch_array($result)) 
        {

            echo "<li><a href=''>".$row[$itemtemplet]."</a></li>";
        }
    }
}

当然,你的方法调用:

<ul>
<?php
$rptvalue="name";
$myFun->mysql_funX_Repeter("Select ".$rptvalue." from tbldemo",$rptvalue);
?>
</ul>

这就是我避免使用nasty evals的方法。 :)


0
function mysql_funX_Repeter($query,$itemtemplet)
 {
  $html='';
  $this->mysql_funX_connect();
  $result = mysql_query($query) or die("Repeter Query Error.");
  $num_rows=mysql_num_rows($result);
  if($num_rows){
    while ($row = mysql_fetch_array($result)) 
    {
        $newtempelt = str_replace("Eval", $row['column_name'], $itemtemplet);
        $html.="<li><a href=''>".$newtempelt."</a></li>";
    }
  }
  return $html;  
}

//调用方法mysql_funX_Repeter

<ul>
<?php
$rptvalue="name";
echo $myFun->mysql_funX_Repeter("Select ".$rptvalue." from tbldemo",$rptvalue);
?>
</ul>

0

开发者 我的问题已经解决。 感谢您的回复。

我的函数

//This Repeter Function Created By Priyank Patel
function mysql_funX_Repeter($query,$itemtemplet)
{
    $this->mysql_funX_connect();

    $result = mysql_query($query) or die("Repeter Query Error.");
    if (!$result) 
    {
        $message = 'ERROR:' . mysql_error();
        return $message;
    }
    else
    {
        preg_match_all('/{([^}]*)}/', $itemtemplet, $matches);
        $select = '';
        while($row = mysql_fetch_assoc($result)){
            $aux = $itemtemplet;

            for($i = 0; $i < count($matches[0]); $i++){
                $aux = str_replace($matches[0][$i], $row[$matches[1][$i]],$aux);
            }
            $select .= $aux."\n";
        }
        mysql_close();
        return $select;
    }
}

调用方式

<ul><?php $templet="<li>{name}</li>";echo $myFun->mysql_funX_Repeter("Select * from tbldemo",$templet);?></ul>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接