-4

私は約束します、これが今日の最後の質問になります。しかし、エラーが発生しました'警告:mysql_fetch_assoc():指定された引数は次のコードで/home/a1014025/public_html/practice/cart/cart.phpの58行目の有効なMySQL結果リソースではありません'

<?php
include('connect.php');
session_start();
?>
<html>
<head>
    <title>Cart</title>
    <link rel='stylesheet' href='css/main.css' />
</head>
<body>
    <?php
    $page = 'index.php';

    if(isset($_GET['add'])){
        $add_id = $_GET['add'];
        $quantity = mysql_query("SELECT id, quantity FROM products WHERE id='$add_id'");
        while($quantity_row = mysql_fetch_assoc($quantity)){
            if($quantity_row['quantity'] !=@$_SESSION['cart_'.$add_id]){
                @$_SESSION['cart_'.$_GET['add']]+='1';
                header('Location: index.php');
            }
            else{
                header('Location: index.php?err=max');
            }
        }

    }

    if(isset($_GET['remove'])){
        $_SESSION['cart_'.(int)$_GET['remove']]--;
        header("Location: index.php");
    }

    if(isset($_GET['delete'])){
        $_SESSION['cart_'.(int)$_GET['delete']]='0';
        header('Location: index.php');
    }

    function products(){
        $get = mysql_query("SELECT id, name, description, price FROM products WHERE quantity > 0 ORDER BY id DESC");
        if(mysql_num_rows($get) == 0){
            echo "There are no products to display.";
        }
        else{
            while($get_row = mysql_fetch_assoc($get)){
                echo '<p>'.$get_row['name'].'<br />'.$get_row['description'].'<br />$'.$get_row['price'].' <a href="cart.php?add='.$get_row['id'].'">Add</a></p>';
            }
        }
    }

    function paypal_items(){
        $num = 0;
        foreach($_SESSION as $name => $value){
            if($value!=0){
                if(substr($name, 0, 5) == 'cart_'){
                    $id = substr($name, 5, strlen($name)-5);
                    $get = mysql_query("SELECT id, name, price, shipping, shipping2 FROM products WHERE id=".$id);
                    while($get_row = mysql_fetch_assoc($get)){
                        $num++;
                        echo '<input type="hidden" name="item_number_'.$num.'" value="'.$id.'">';
                        echo '<input type="hidden" name="item_name_'.$num.'" value="'.$get_row['name'].'">';
                        echo '<input type="hidden" name="amount_'.$num.'" value="'.$get_row['price'].'">';
                        echo '<input type="hidden" name="shipping_'.$num.'" value="'.$get_row['shipping'].'">';
                        echo '<input type="hidden" name="shipping2_'.$num.'" value="'.$get_row['shipping2'].'">';
                        echo '<input type="hidden" name="quantity_'.$num.'" value="'.$value.'">';

                    }
                }
            }
        }
    }

    function cart(){
        $total = 0;
        foreach($_SESSION as $name => $value){
            if($value>0){
                if(substr($name, 0, 5)=='cart_'){
                    $id = substr($name, 5, strlen($name)-5);
                    $get = mysql_query("SELECT id, name, price FROM products WHERE id='$id'");
                    while($get_row = mysql_fetch_assoc($get)){
                        $sub = $get_row['price']*$value;
                        echo $get_row['name'].' x '.$value.' @ $'.number_format($get_row['price'], 2).' = $'.$sub.' <a href="cart.php?add='.$id.'">[+]</a> <a href="cart.php?remove='.$id.'">[-]</a> <a href="cart.php?delete='.$id.'">[Delete]</a><br />';
                    }
                }
                $total += $sub; 
            }
        }
        if($total==0){
            echo "You cart is empty.";
        }
        else{
            echo "<p>Checkout with PayPal for your $".$total." total.</p>";
            ?>
            <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
            <input type="hidden" name="cmd" value="_cart">
            <input type="hidden" name="upload" value="1">
            <input type="hidden" name="business" value="ddromano@comcast.net">
            <?php paypal_items(); ?>
            <input type="hidden" name="currency_code" value="USD">
            <input type="hidden" name="amount" value="<?php echo $total; ?>">
            <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but03.gif" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
            </form>
            <?php

        }
    }

    ?>
</body>

4

2 に答える 2

0

スクリプトでエラーを抑制するのをやめてください。

@$_SESSION['cart_'.$_GET['add']]+='1';

エラー報告を有効にして、スクリプト内の問題がどこにあるかをよりよく理解できるようにします。

そのコードの 58 行目は次を指しています。

57  $get = mysql_query("SELECT id, name, price, shipping, shipping2 FROM products WHERE id=".$id);
58  while($get_row = mysql_fetch_assoc($get)){
    ...

mysql_関数内でリソースを使用しているため、接続が範囲外である可能性が最も高くなります。関数に接続を渡すか、接続をグローバル化する必要があります。

function paypal_items($conn){

または

function paypal_items(){
    global $conn;

以前の質問で言及しましたが、あなたはそれを無視しているようです。スクリプトは SQL インジェクションに対して脆弱です。これが何であるかを学び、修正して、またはに移動することを強くお勧めします。mysqli_PDO

于 2013-02-16T01:25:50.503 に答える
-1

行 57 の SQL にエラーがあるようです - id の値は引用符で囲む必要があります:

$get = mysql_query("SELECT id, name, price, shipping, shipping2 FROM products WHERE id='".$id."'");

次を使用して、php にこれを自動的に報告させることができますor

$get = mysql_query(...) or die(mysql_error());

ところで、クエリを送信する前に、クエリをサニタイズする必要があります。変数を SQL ステートメントに渡すときはいつでも、mysql_real_escape_stringSQL インジェクションを防ぐために使用します。

于 2013-02-16T01:14:37.933 に答える