1

数日間取り組んできた特定の PHP コードに問題があります。これは、日と月を入力できるレポート コードであり、その特定の日の総売上を一覧表示します。

しかし、クエリに値がない(データがない)場合、「この特定の日に売上はありません」と表示されるという最後のステートメントを作成できないようです。これが私が取り組んできたコードです。しかし、最後の echo ステートメントは実行されていません。何か案は?

    <?php
  session_start();
  if ((isset($_SESSION["admin"])) ){
   $day=@$_POST['day'];
   $month=@$_POST['month'];
  echo "<center><h2>Sales report on " .$day. "." .$month. ".2013</h2></center>";

    echo "<center><table style='border:2px solid black;' align=center width=600>";
    echo "<tr><th colspan=12><center><h2>Sales Report</h2><hr size='2' color='black' /></center></th></tr>";
    echo " <th width=400> Amount Collected</th>";
    ?>              
              <br> 
               <?php
$x = 1; //counter
//open a connection to a MySQL server using function mysql_connect 
//returns a MySQL link identifier on success, or FALSE on failure.
$conn= mysql_connect("localhost","root","");
if (!$conn)
    die ("Connection error: ".mysql_error());
else {
    //select a MySQL database
    //returns TRUE on success or FALSE on failurue.
    $db=mysql_select_db("cqfos");
    if(!$db)
        die ("DB not found: ".mysql_error());
    else {
        //put query in a variable $query
        $query= "select ROUND(sum(orderdetails.tprice),2)
                 from orders JOIN orderdetails ON orders.orderID = orderdetails.orderID WHERE DAY(orders.date) = '$day' AND MONTH(orders.date) = '$month'";
        $result=mysql_query($query);
        if(!$result)
            die ("Invalid query: ".mysql_error());
        //if record exists
        else {
            //fetch a result row as both associative array and numeric array
                if(mysql_num_rows($result)== 1){
                    while ($row=mysql_fetch_array($result,MYSQL_BOTH)){
                    echo "<tr>";
                    echo "<td align='center'>RM ".$row[0]."</td></tr>";  
                    $x++; //increase the counter
                    }
                    }
                else {
                    echo "<tr><th colspan=12>No sales made.</td></tr>";}



                }
             }
        }

echo"</table></center>";

?>
4

3 に答える 3

0

あなたのSQLは(おそらく)複数の行を返すので、前に述べた行を次のように変更してください:

if(mysql_num_rows($result)>0){
于 2013-09-22T22:08:39.060 に答える
0

$day と $month をサニタイズしていないため、コードが SQLi に対して脆弱であることを知らせるだけです。また、 PDO の使用を検討してください

まだ行っていない場合 - SQL ステートメントを PHPMyAdmin で実行してみて、どこにエラーが出力されるか (エラーがある場合) を確認してください。それ以外の場合は、データが出力されます。*

*変数の代わりに日/月を手動で入力します。

于 2013-09-22T22:31:23.270 に答える