-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

注:私が正しく理解していれば、使用している関数は非推奨になっているため、代わりに 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 に答える
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 に答える