1

2 行のコードと 1 つの関数の簡単な実装になると思っていたものが、失敗に終わりました。

私の Web ページで を入力できるようにしたいのですが[text]1[/text]、それはその ID のタイトルを取得することです。

function textFormat($text) {
    $raw = array(
        '\'\[text\](?P<id>.*?)\[/text\]\'is'
    );

    $out = array (
        '<a href="index.php?function=getData&reference=text&id=$1">' . getTextTitle() . '</a>'
    );

    preg_replace($raw, $out, $text);
    return $text;
}

function getTextTitle($id) {
     $sql = mysql_query("SELECT title FROM text WHERE id = $id");
     return mysql_result($sql);
}

さて、ここにちょっとした問題があります。おわかりのように、数値のタイトルが付いた変数を使用して関数を呼び出しています。これは引用符でうまく機能しますが、ご存知のように、PHP はそれを好みません。そこで、名前付きグループを選択しました。使用$regs['id']すると機能しません。

私は何か間違ったことをしていますか?

私はこれについて間違った方法で進んでいますか?

4

1 に答える 1

1

ええと、あなたは確かに私が今までとは根本的に異なる方法でそれをやっています、しかし私はあなたが試みていることからそれほど遠くない何かがおそらくうまくいくかもしれないと思います。これを試して:

function textFormat($text) {
    $raw = array(
        '\'\[text\](?P<id>.*?)\[/text\]\'ise'
    );
    $out = array (
        '\'<a href="index.php?function=getData&reference=text&id=$1">\' . getTextTitle(\'$1\') . \'</a>\''
    );
    preg_replace($raw, $out, $text);
    return $text;
}

function getTextTitle($id) {
     $sql = mysql_query("SELECT title FROM text WHERE id = '" . mysql_real_escape_string($id) . "'");
     $res = mysql_result($sql);
     $row = mysql_fetch_array($res);
     return $row ? $row[0] : 'invalid ID';
}

ちなみに、あなたのオリジナルgetTextTitle()は、私が知らないことが他に起こっていない限り、SQLインジェクションを介してデータベースに対して好きなことを誰かにやらせてくれます。どういたしまして。

また、正規表現でそのノイズが何であるかわからない(?P<id>ので、何らかの理由で必要であると想定し、そのままにしておきます。これが正しいかどうかはわかりません。

于 2009-06-11T01:33:50.880 に答える