2

ここにデータベースからすべてのデータを選択するためのコードがあります。これが私のコードです。

<?php

$name = $_POST['cname'];

if ($_POST["Search"] == "Search") {
    $query = mysql_query("SELECT * FROM parts WHERE cname LIKE '%$name%'");
    if (!empty($query)) {
        $vsi = 'No Data';
        $date = 'No Data';
        $cname = 'No Data';
    }

    while ($row = @mysql_fetch_array($query)) {
        $vsi = $row["vsi"];
        $date = $row["date"];
        $cname = $row["cname"];
    }

これが私がすべての変数をエコーする方法です、

<tr class="gradeC">
<?php echo "<td width='10%'><font size='-2'> $vsi </font></td>" ?>
<?php echo "<td width='20%'><font size='-2'>$date</font></td>" ?>
<?php echo "<td width='20%'><font size='-2'> $cname</font></td>" ?>
</tr>

私の問題は、

各行から1つの結果しか得られませんが、データベース内のデータは5です。

これが私の結果です

vsi      date             name
123      12/12/2012       test1

ただし、正しい結果は次のようになります。

vsi      date             name
123      12/12/2012       test1
123      12/12/2012       test1
123      12/12/2012       test1
123      12/12/2012       test1
123      12/12/2012       test1

ノート、

データベース内のすべてのデータをすべて同じにします

4

2 に答える 2

8

while ループで TR を使用する必要があります。

<?php

$name = $_POST['cname'];

if ($_POST["Search"] == "Search") {
    $query = mysql_query("SELECT * FROM parts WHERE cname LIKE '%$name%'");
    if (!empty($query)) {
        $vsi = 'No Data';
        $date = 'No Data';
        $cname = 'No Data';
    }

    while ($row = @mysql_fetch_array($query)) {
        $vsi = $row["vsi"];
        $date = $row["date"];
        $cname = $row["cname"];

?>
<tr class="gradeC">
<?php echo "<td width='10%'><font size='-2'> $vsi </font></td>" ?>
<?php echo "<td width='20%'><font size='-2'>$date</font></td>" ?>
<?php echo "<td width='20%'><font size='-2'> $cname</font></td>" ?>
</tr>
<?
    }

?>

警告

あなたのコードはSQLインジェクションgetに対して脆弱です。すべてをエスケープする必要がpostあり、より良いアプローチはPreparedステートメントを使用することです

よく読んだ

  1. PHPでSQLインジェクションを防ぐには?
  2. SQL インジェクションを防ぐには、PDO 準備済みステートメントで十分ですか?

ノート

  1. ext/mysqlプレフィックス mysql_ で名前が付けられたすべての関数を提供する PHP 拡張機能全体は、PHP v5.5.0 で正式に非推奨となり、将来的に削除される予定です。したがって、またはのいずれPDOかを使用しますMySQLi

よく読んだ

  1. mysql 拡張機能は非推奨であり、将来削除される予定です。代わりに mysqli または PDO を使用してください
  2. MySQL 開発者向け PDO チュートリアル
  3. 初心者向け Pdo チュートリアル

これが役立つことを願っています。

于 2013-01-18T05:37:32.953 に答える
0

フェッチの結果は配列になります。一致するすべてのデータベース エントリが含まれます。しかし、エコーは while ループのすぐ外側にあります。そのため、1 つの結果しか返されません。エコーの後に 2 番目の while ループを閉じます。

while ($row = @mysql_fetch_array($query)) {
$vsi = $row["vsi"];
$date = $row["date"];
$cname = $row["cname"];

?>
<tr class="gradeC">
<?php echo "<td width='10%'><font size='-2'> $vsi </font></td>" ?>
<?php echo "<td width='20%'><font size='-2'>$date</font></td>" ?>
<?php echo "<td width='20%'><font size='-2'> $cname</font></td>" ?>
</tr>
<?
}
于 2013-01-18T05:56:47.157 に答える