如何将查询结果转换为链接


How do I turn my query result into a link?

我从三列返回数据并显示为:

echo "<p><h3><span class='tyler'>".$results['COL 2']."</span></h3>".$results['COL 4'].$results['COL 3']."</p>";

这工作正常。 COL 4是一个实际的 URL,我正在尝试将其放在锚标签中,并将 COL 3 作为锚文本:

echo "<p><h3><span class='tyler'>".$results['COL 2']."</span></h3>""<a href=".$results['COL 4']"/>".$results['COL 3']."</a></p>";

我正在尝试使用此代码,但它不起作用。我的假设是问题与结束h3标签后的背靠背引号有关。我将如何完成这项工作?

构建输出到 HTML 的大字符串可能会令人困惑。这是你所拥有的:

echo "<p><h3><span class='tyler'>"
     .$results['COL 2']
     ."</span></h3>""<a href=".$results['COL 4']"/>"
     .$results['COL 3']
     ."</a></p>";

我已经分解了它,以更清楚地参考正在发生的事情。在第三行(从 close- span 标记开始(,您有两个紧挨着的双引号。此外,您有引号打开标签的右斜杠部分,但没有字符串连接运算符 ( . (。最后,您混淆了双引号和单引号。你想要:

."</span></h3><a href='".$results['COL 4']."'/>"

但更好的方法是拆分组件:

$title = $results['COL 2'];
$href = $results['COL 4'];
$anchor_text = $results['COL 4'];
// Here you can add debugging statements to ensure you have the right values.
$paragraph = "<p><h3><span class='tyler'>%s</span></h3><a href='%s'>%s</a></p>"
echo sprintf($paragraph, $title, $href, $anchor_text);

此方法使用 sprintf 来"插入"所需的字符串。它使您可以更清楚地构建html,而不必担心特定的"动态"值是什么。当然,还有许多其他方法可以完成这种"模板化"。

关于 PHP 中字符串构建的旁白

这行代码将一个简单的字符串分配给 PHP 中的变量:

$message = "Hello world!";

这行代码使用连接运算符(这是一个点:.("连接"三个字符串:

$html = "<p>".$html."</p>";

此行将产生等效的结果:

$html = "<p>Hello world!</p>";

此行将产生错误:

$bad = "<p>""Hello world!""</p>";

它产生错误的原因是因为语言会将代码"标记化"为以下内容:

<variable name> <assign> <string> <string> <string> <end statement>

除了,从语义上讲,连续三个<string>没有意义。它们之间需要一个"运算符",如下所示:

<variable name> <assign> <string> <concatenate> <string> <concatenate> <string> <end statement>

PHP 知道如何"解析"这串令牌。它将知道计算每个字符串,然后将它们连接在一起。中间阶段是这样的:

<variable name> <assign> <string (composed of three previous strings)> <end statement>

知道这一点,因为串联运算符告诉它如何组合这些字符串。

这让我们回到使用点/连接运算符:

$html = "<p>Hello world!</p>";

现在,HTML 标记如下所示:

<a href="http://www.stackoverflow.com/help">SO Help Page</a>

当PHP"输出"最终结果时,它所做的只是将字符串"回显"或"打印"到HTML响应中。鉴于此,并且考虑到PHP将双引号解释为字符串的"结束",如何将字符串放入变量中,以便像上面的HTML一样打印出来?这是行不通的,因为PHP不知道在这种情况下如何解释http://...

echo "<a href="http://www.stackoverflow.com/help">SO Help Page</a>";

有几种方法可以解决这个问题。您可以"转义"双引号:

echo "<a href='"http://www.stackoverflow.com/help'">SO Help Page</a>";

通过在双引号前插入字符串中的',您可以向 PHP 发出信号,不要结束字符串标记,从而将整个内容解析为单个字符串。

或者,HTML 也接受其属性值的单引号。所以你可以这样做:

echo "<a href='http://www.stackoverflow.com/help'>SO Help Page</a>";

这会在 HTML 响应上产生以下结果:

<a href='http://www.stackoverflow.com/help'>SO Help Page</a>

无论你走哪条路,你都必须记住,PHP 代码不会神奇地知道你正在构建一个 HTML 页面:它只是构造字符串并将其打印到 HTML 响应中。你必须告诉它什么时候忽略字符串的一部分。

我上面的观点是,对于足够长的PHP脚本,这可能会变得令人困惑。因此,将字符串分解为可管理的块,以便您可以看到要插入的内容以及内容(如引号、打开和关闭标签等(的位置,使您的生活更轻松。