0

チェックボックスを使用して Select クエリを一般化しようとしています。表示される変数の選択肢は、チェックボックスを使用してバックエンドで配列を作成するフロントエンド ファイルから投稿されます。この配列は、select ステートメントの SELECT 句に使用されます。現在、テーブル ヘッドは正しいヘッダーを出力しますが、データも同じデータを出力します。誰かが私のエラーを見つけるのを手伝ってくれますか?

<?php
session_start(); //Begins a session
?>

<html> <head> <title> Genre selection back end </title>
</head>
<body>
<?php
$genre_value =  $_POST['genrelist'];

$choice = $_POST['choice'];

$numvalues = count($choice);
echo '<h2> Table shows some data </h2>';
echo "<table border = '1'>";
echo '<tr>';

for($i= 0; $i < $numvalues; $i ++)
{
echo "<th>" .$choice[$i]. "</th>";
$choicearray = $choicearray . ", " .  $choice[$i];
}
echo '</tr>';

$select = substr($choicearray, 1);
include '../functions/connect.php';
$query = "SELECT '$select' FROM film WHERE Genre = '".$genre_value."'";
$result = mysql_query($query) or die ("Invalid query");

while($row = mysql_fetch_array($result))
    {
    echo "<tr>";
        for($i = 0; $i < $numvalues; $i ++)
        {
        echo "<td>" .$row[$i]. "</td>";
        }
    echo "</tr>";
    }
echo "</table>";
mysql_close($con);
?>
</body>
</html>
4

1 に答える 1

1

selectステートメントで一重引用符を使用しています。これにより、MySQL は正確な文字列値を選択します。

一重引用符を削除します。クエリを次のように変更します

$query = "SELECT $select FROM film WHERE Genre = '".$genre_value."'";

また、このコードを概念の証明以外の目的で使用しないでください。クエリで直接データを信頼しPOSTたり、データを直接送信したりしないでください。GET最初にこれらの値をそれぞれエスケープしてください。

for ループを次のように変更することをお勧めします。

$choicearray = array();
for($i= 0; $i < $numvalues; $i ++)
{
    echo "<th>" .$choice[$i]. "</th>";
    $choicearray[] = mysql_escape_string(trim($choice[$i]));
}
echo '</tr>';
$choicearray = implode(',', $choicearray);

これにより、同じ結果が得られますが、途中ですべてのアイテムがエスケープされます。

于 2013-04-28T23:40:15.130 に答える