0

小さな php サイトを開発する小さな大学プロジェクトに取り組んでいます。いくつかの問題があるようです。あらゆる種類のプログラミングに関しては、私は完全な初心者です。私は文字どおり (提供されたスクリプトから) 切り取りと貼り付けを行っており、必要な方法で物事をまとめようとしています。

データベース クエリからデータを収集する際に問題が発生しているようです。完全に機能するスクリプトが既にあります。別のものを追加しようとしていますが、これを機能させることができないようです。

http://mkiddr.com/phptests/shopping/category.php?id=2

現在、category.php はカテゴリ内のすべての製品を表示しています。ただし、カテゴリの説明も表示したいと思います。次のコードで、これをどのように実行しようとしたかがわかります。

 <?php
session_start();
include "conn.php";
include "header.php";

if (isset($_GET['id'])){
    $CategoryID = $_GET['id'];
    $q="SELECT ProductID, ProductName FROM Products WHERE CategoryID=$CategoryID";
    $d="SELECT Desc FROM ProductCategories WHERE CategoryID=$CategoryID";

    $result = mysqli_query($_SESSION['conn'],$q);

    $result2 = mysqli_query($_SESSION['conn'],$d);

    echo "<div>";
    while ($row = mysqli_fetch_row($result)){
        echo "<p><a href='product.php?id=".$row[0]."'>".$row[1]."</a></p>";
    }
    echo "<p>".$result2."</p>";
    echo "</div>";
    mysqli_free_result($result);
}
include "footer.php";
?>

助けていただければ幸いです。

更新されたコード (まだ機能していません)

   <?php
   session_start();
   include "conn.php";
   include "header.php";

 if (isset($_GET['id'])){
$CategoryID = $_GET['id'];
$q="SELECT ProductID, ProductName FROM Products WHERE CategoryID=$CategoryID";
$d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID";

$result = mysqli_query($_SESSION['conn'],$q);
$result2 = mysqli_query($_SESSION['conn'],$d);  

echo "<div>";
while ($row = mysqli_fetch_row($result)){
    echo "<p><a href='product.php?id=".$row[0]."'>".$row[1]."</a></p>";
}
echo "</div>";
mysqli_free_result($result);

//Description
echo "<div>";
while ($result2 = mysqli_fetch_assoc($result2)){
    echo "<p>".$result2[0]."</p>";
   }

   }
  include "footer.php";
  ?>
4

2 に答える 2

4

私が見たエラーの 1 つは、予約済みキーワードの使用です。

が実行されない理由$dは、 columnDESCが の予約済みキーワードであるためMYSQLです。バッククォートで区切るか、テーブルにエイリアスを指定して機能させることができます。

$d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID";

また

$d="SELECT a.Desc FROM ProductCategories a WHERE CategoryID=$CategoryID";

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-03-07T16:39:47.770 に答える
1

まず、クエリを配列にフェッチすることを忘れないでください。

$result2 = mysqli_fetch_assoc($result2);

クエリは連想配列に保存されるため、そのように呼び出す必要があります $result2['Desc']

<?php
   session_start();
   include "conn.php";
   include "header.php";

 if (isset($_GET['id'])){
$CategoryID = $_GET['id'];
$q="SELECT ProductID, ProductName FROM Products WHERE CategoryID=$CategoryID";
$d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID";

$result = mysqli_query($_SESSION['conn'],$q);
$result2 = mysql_fetch_assoc( mysqli_query($_SESSION['conn'],$d) );  

echo "<div>";
while ($row = mysqli_fetch_row($result)){
    echo "<p><a href='product.php?id=".$row[0]."'>".$row[1]."</a></p>";
}
echo "</div>";
mysqli_free_result($result);

//Description
echo "<div>";
          echo "<p>".$result2['Desc']."</p>";
echo "</div>";

   }
  include "footer.php";
  ?>
于 2013-03-07T16:44:29.120 に答える