2013-02-16 42 views
-4

我保证,这将是今天的最后一个问题。但是,我得到了一个错误“警告:mysql_fetch_assoc():提供的参数不是在/home/a1014025/public_html/practice/cart/cart.php一个有效的MySQL结果资源上线58”与此代码:警告:mysql_fetch_assoc():提供的参数不是PHP中的有效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'] [email protected]$_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="[email protected]"> 
      <?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> 

+0

您是否考虑在Google上搜索您的问题? http://i.imgur.com/2YxuPMi.png – 2013-02-16 01:05:26

+0

是的,但我没有找到任何东西,所以我来到这里。 – WorldxFree 2013-02-16 01:06:11

+0

请再次搜索https://www.google.com/search?q=Warning%3A+mysql_fetch_assoc()%3A+supplied+argument+is+not+a+valid+MySQL+result+resource – 2013-02-16 01:07:01

回答

-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_string来防止SQL注入。

+1

'mysql_real_escape_string'将**不会**阻止SQL注入。 OP需要使用参数化语句。此外,'id'确实不**需要引号或转义。 – Kermit 2013-02-16 01:17:53

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; 

我在你的previous question提到它,你似乎忽略它;您的脚本容易受到SQL注入的影响。我强烈催促你了解这是什么,解决它并移动到mysqli_PDO

相关问题