suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php function 无法调用正则表达式的值

求解,如题,达到的目的是,读出内容标注的用户id,从数据库中取出用户名。
问题,只能读出“$1”,无法取值。

function usvid($csse,$uvid){
    global $db,$DBprefix;
    echo $csse.$uvid; $query_usersid="select * from ".$DBprefix."users where Uid='$csse' order by Uid desc"; $sql_usersid=mysql_query($query_usersid); while ($usersid=mysql_fetch_array($sql_usersid)){
    $bbs_H=$usersid['UserName'];   } 
    return $bbs_H; 
    }

function vubb($str){
    $str=preg_replace("/\[userid=(.+?)\](.+?)\[\/userid\]/is",usvid("$1",'$2'),$str);
    return $str; 
    } 
    
    echo vubb("[userid=10000]xy[/userid]");
怪我咯怪我咯2778 Tage vor415

Antworte allen(3)Ich werde antworten

  • 巴扎黑

    巴扎黑2017-05-16 13:02:47

    1. preg_replace第二个参数只能是字符串或数组,函数用法错误

    2. 改为正确的preg_replace_callback,第二个参数是回调函数

    改写样例如下(没测对与否):

    function usvid($match) // 被修改
    {
        $csse = $match[1]; // 新增行
        $uvid = $match[2]; // 新增行
        
        global $db, $DBprefix;
        echo $csse.$uvid; 
        $query_usersid = "select * from ".$DBprefix."users where Uid='$csse' order by Uid desc";
        $sql_usersid = mysql_query($query_usersid); 
        while ($usersid = mysql_fetch_array($sql_usersid)) {
            $bbs_H = $usersid['UserName'];   
        } 
        return $bbs_H; 
    }
    
    function vubb($str)
    {
        $str = preg_replace_callback("/\[userid=(.+?)\](.+?)\[\/userid\]/is", "usvid", $str); // 修改行
        return $str; 
    } 
        
    echo vubb("[userid=10000]xy[/userid]");

    只改动4行,楼主可以再试试,如果有错误请见谅。

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-16 13:02:47

    谢邀!

    然后呢,有什么问题么?

    我解读你的sql是:

        select * from users where Uid='$1' order by Uid desc

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:02:47

    function usvid($csse,$uvid) // 被修改
    {
        global $db, $DBprefix;
        $query_usersid = "select * from ".$DBprefix."users where Uid='$csse' order by Uid desc";
        return  $query_usersid;
        $sql_usersid = mysql_query($query_usersid); 
        while ($usersid = mysql_fetch_array($sql_usersid)) {
            $bbs_H = $usersid['UserName'];   
        } 
        return $bbs_H; 
    }
    
    function vubb($str)
    {
        $str = preg_replace("/\[userid=(.+?)\](.+?)\[\/userid\]/is", usvid("$1",'$2'), $str); // 
    } 
        
    echo vubb("[userid=10000]xy[/userid]");

    测试了一下 输出 的sql 和 你要求的一样啊
    select * from users where Uid='10000' order by Uid desc

    Antwort
    0
  • StornierenAntwort