2014-01-14 6 views
0

Я делаю сводную корзину покупок, самостоятельно изучая учебник. Но я встретил некоторую ошибку.Ошибка mysql_fetch_array() при попытке получить данные из базы данных

было указано, что "Предупреждение: mysql_fetch_array() ожидает параметр 1, чтобы быть ресурсом, логический дан в C: \ ххх \ ххх \ ххх \ ххх \ ххх \ xxx.php в строке 18"

Я хочу для отображения предметов, которые я купил, поэтому я передаю элементы из базы данных корзины. (Используя инструменты Dreamweaver, я просто перетаскиваю его). Однако элементы не отображаются, но вместо этого он дал мне эту ошибку.

Могу ли я узнать, что не так с моим кодом, введя SQL-инъекцию в сторону (поскольку я не использую его, все еще пытаюсь использовать базовый).

<?php require_once('Connections/MyDatabase.php'); ?> 
<?php 
session_start(); 
?> 

<?php 
$cartTotal = 0; 
if(isset($_POST['CheckoutBTN'])) 
{ 
    date_default_timezone_set('Asia/Singapore'); 
    $time=date('D,F j, Y, H:i:s A'); 
    $uname = $_SESSION['MM_Username']; 
foreach ($_SESSION["supermarketcart"] as $each_item) 
    { 

    $item_id = $each_item['item_id']; 
     $sql = mysql_query("SELECT * FROM supermarket WHERE id = '$item_id' LIMIT 1"); 
     while($row = mysql_fetch_array($sql)){ 
    $productdes = $row['description']; 
    $price = number_format($row['price'],2); 
    $size = $row['packaging']; 
    $itemqty = $each_item['quantity']; 

    $pricetotal = $price * $each_item['quantity']; 
    $cartTotal = number_format($pricetotal + $cartTotal,2); 

    $checkout="INSERT INTO supermarketcart (itemid, productdes, package, itemprice, qty, username, ddate) VALUES 
          ('$item_id', '$productdes', '$size', '$price','$itemqty','$uname','$time')"; 
    mysql_query($checkout)or die(mysql_error()); 

     } 
    } 
} 

?> 
<?php 
//initialize the session 
if (!isset($_SESSION)) { 
    session_start(); 
} 

// ** Logout the current user. ** 
$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; 
if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ 
    $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); 
} 

if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ 
    //to fully log out a visitor we need to clear the session varialbles 
    $_SESSION['MM_Username'] = NULL; 
    $_SESSION['MM_UserGroup'] = NULL; 
    $_SESSION['PrevUrl'] = NULL; 
    unset($_SESSION['MM_Username']); 
    unset($_SESSION['MM_UserGroup']); 
    unset($_SESSION['PrevUrl']); 

    $logoutGoTo = "login.php"; 
    if ($logoutGoTo) { 
    header("Location: $logoutGoTo"); 
    exit; 
    } 
} 
?> 
<?php 
if (!function_exists("GetSQLValueString")) { 
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{ 
    if (PHP_VERSION < 6) { 
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; 
    } 

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 

    switch ($theType) { 
    case "text": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break;  
    case "long": 
    case "int": 
     $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
     break; 
    case "double": 
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; 
     break; 
    case "date": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break; 
    case "defined": 
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
     break; 
    } 
    return $theValue; 
} 
} 

$colname_cart = "-1"; 
if (isset($_SESSION['MM_USERNAME'])) { 
    $colname_cart = $_SESSION['MM_USERNAME']; 
} 
mysql_select_db($database_MyDatabase, $MyDatabase); 
$query_cart = sprintf("SELECT * FROM supermarketcart WHERE username = %s", GetSQLValueString($colname_cart, "text")); 
$cart = mysql_query($query_cart, $MyDatabase) or die(mysql_error()); 
$row_cart = mysql_fetch_assoc($cart); 
$totalRows_cart = mysql_num_rows($cart); 

mysql_select_db($database_MyDatabase, $MyDatabase); 
$query_user_info = "SELECT * FROM user_data"; 
$user_info = mysql_query($query_user_info, $MyDatabase) or die(mysql_error()); 
$row_user_info = mysql_fetch_assoc($user_info); 
$totalRows_user_info = mysql_num_rows($user_info); 
?> 
+0

может у вас добавить mysql_error() для запроса выбора, скорее всего, запрос терпит неудачу где-то в цикле –

+0

вы имеете в виду вот так? $ sql = mysql_query ("SELECT * FROM supermarket WHERE id = '$ item_id" LIMIT 1 ") или die (mysql_error() – user3156220

+0

да так же, как и то, что вы сделали для запроса на вставку –

ответ

0

После фрагмент кода, $each_item['item_id'] не проверяется, если он установлен с чем-то внутри. Последующий запрос не будет иногда (SQL неуспешным, если WHERE близко пусто)

$sql = mysql_query("SELECT * FROM supermarket WHERE id = '$item_id' LIMIT 1"); 

$sql так будет установлен false, и вы получите свою ошибку позже.

Вы, вероятно, отключить предупреждающее сообщение, так что вы не получаете никакой информации из удаленных баз или о отключенном $each_item['item_id']

Изменение уровня Сообщения об ошибках и отладки потом: чтобы сделать это, добавьте это после session_start();

error_reporting(E_ALL); 
Смежные вопросы