有条件地使MySQL查询结果成为PHP中的超链接

时间:2013-02-25 14:15:27

标签: php mysql

第一个问题。和我一起晒黑!

我正在尝试让mysql查询的某个单元格成为我最终创建的用户配置文件的超链接。我可以将所有内容都作为链接,但不仅仅是名称字段。现在我只是显示所有显示的链接到主键(playerID)以进行测试。

我知道问题出现在这里:if (($cell->name)=='fName')

任何帮助都会很棒。这是我第一次使用mysql和php,所以随时可以告诉我其他错误。谢谢!

<?php

// db login info
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db_login.php';

// connecting, selecting, & error messages
if (!mysql_connect($db_host, $db_user, $db_pwd))
    die("Can't connect to database");

if (!mysql_select_db($db))
    die("Can't select database");

// get parsed playerID
$id = $_GET[id];

$result = mysql_query("SELECT *
                       FROM players p
                       LEFT JOIN baseball b ON p.playerID = b.playerID
                       LEFT JOIN hockey h ON p.playerID = h.playerID
                       LEFT JOIN football f ON p.playerID = f.playerID
                       WHERE p.playerID = '$id';");
if (!$result) {
    die("Query to show fields from table failed");
}

$fields_num = mysql_num_fields($result);

echo "<table border='1' cellpadding='1'><tr>";

// printing column headers
for($i=0; $i<$fields_num; $i++)
{
        $field = mysql_fetch_field($result);
        echo "<td><b>{$field->name}</b></td>";
        }

echo "</tr>\n";

// printing table rows
while($row = mysql_fetch_row($result))
{
    echo "<tr>";

    foreach($row as $cell){

        if (($cell->name)=='fName'){
            echo "<td><a href=\"info.php?id={$row[0]}\">$cell</a></td>";
                    }
        else {
            echo "<td>$cell</td>";
                    }
            }
    echo "</tr>\n";

}
echo "</table>";
// clear result variable
mysql_free_result($result);
mysql_close($result);

echo "<a href=\"testing.php\">Back</a>";
?>

2 个答案:

答案 0 :(得分:0)

对我来说,你需要这样的东西:

<?php

// db login info
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db_login.php';

// connecting, selecting, & error messages
if (!mysql_connect($db_host, $db_user, $db_pwd))
    die("Can't connect to database");

if (!mysql_select_db($db))
    die("Can't select database");

// get parsed playerID
$id = $_GET[id];

$result = mysql_query("SELECT *
                       FROM players p
                       LEFT JOIN baseball b ON p.playerID = b.playerID
                       LEFT JOIN hockey h ON p.playerID = h.playerID
                       LEFT JOIN football f ON p.playerID = f.playerID
                       WHERE p.playerID = '$id';");
if (!$result) {
    die("Query to show fields from table failed");
}

print_r ($result);

$fields_num = mysql_num_fields($result);

echo "<table border='1' cellpadding='1'><tr>";
echo "<td><b>SCHMOHAWKS</b></td><tr>";

// printing column headers
for($i=0; $i<$fields_num; $i++)
{
        $field = mysql_fetch_field($result);
        echo "<td><b>{$field->name}</b></td>";
        }
echo "</tr>\n";

// printing table rows
// koala note: use mysql_fetch_assoc instead
while(($row = mysql_fetch_assoc($result)) != FALSE){
    echo "<tr>";

    // $row is array... foreach( .. ) puts every element
    // of $row to $cell variable

    foreach($row as $cell_name => $cell){

        // cell name will be the associative array's key
        // so things are as simple as this:
        if ($cell_name=='fName'){
            echo "<td><a href=\"info.php?id=$row[0]\">$cell</a></td>";
                    }
        else {
            echo "<td>$cell</td>";
                    }
            }
    echo "</tr>\n";

}
echo "</table>";
// clear result variable
mysql_free_result($result);
mysql_close($result);

echo "<a href=\"testing.php\">Back</a>";

答案 1 :(得分:0)

注意:您可能应该使用PDO,因为如果我理解正确,您已弃用的功能已被弃用。


显然我的答案不符合您的预期,甚至没有投票,但它应该有效。也许不是,如果你只是复制并粘贴它,因为我可能在你的代码的其余部分遗漏了一些东西,但原则就在那里。使用mysql_fetch_assoc获取一个关联数组,其中包含列名作为键。循环遍历数组并检查键以查找要以不同方式处理的特殊情况。

无论哪种方式,您都需要学习如何阅读文档,更重要的是如何使用函数var_dump来查看您正在处理的内容。例如,尝试运行以下命令:

while($row = mysql_fetch_assoc($result))
{
    var_dump($row);
}

输出什么?它能给你你的想法吗?它实际上是一个数组吗?按键看起来像你期望的那样吗?接下来你可以尝试运行它:

while($row = mysql_fetch_assoc($result))
{
    foreach($row as $name => $value)
        var_dump($name, $value);
    break; // Skip rest of rows in this case
}

名称和价值应该是什么?你要做的事情并不是太难,如果你只是复制并粘贴代码而不试图了解正在发生的事情,你就不会学到太多东西:)


在你的循环中,我不确定你要做什么,但这应该有效:

while($row = mysql_fetch_assoc($result))
{
    echo "<tr>";
    foreach($row as $name => $value)
    {
        if ($name == 'fName')
            printf('<td><a href="info.php?id=%u">%s</a></td>', $row['id'], htmlspecialchars($value));
        else
            printf('<td>%s</td>', htmlspecialchars($value));
    }
    echo "</tr>\n";
}

重要的变化是:

  • 请改用mysql_fetch_assoc,以便获取列名而不是列号作为键。
  • $name =>添加到foreach循环以在循环期间访问该名称。
  • 使用printfhtmlspecialchars更安全地打印您的值。