-1

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

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

<?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>";
?>
4

2 回答 2

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>";
于 2013-02-25T14:21:47.013 回答
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更安全地打印您的值。
于 2013-02-25T14:23:04.723 回答