我认为这将简单地实现两行代码和一个函数,结果证明是失败的。
在我的网页上,我希望能够输入[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']
无效。
我做错了吗?
我是以错误的方式解决这个问题吗?
答案 0 :(得分: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>
噪音的含义是什么,所以我假设出于某种原因需要它并且不管它。我不知道这是否正确。