2012-05-11 3 views
-1

Я прохожу эту вещь, чтобы сортировать работу, но моя функция AddItem не работает. Я нажимаю ссылку «добавить элемент» на странице продуктов, и она выводит меня на страницу корзины. Но на странице корзины ничего нет. Я надеюсь, что кто-то сможет это увидеть и сказать мне, что делать, чтобы исправить это.Функция AddItem, похоже, не работает

AddItem функция:

function AddItem($itemId, $qty) { 
      // Will check whether or not this item 
      // already exists in the cart table. 
      // If it does, the UpdateItem function 
      // will be called instead 


      // Check if this item already exists in the users cart table 
      $result = mysql_query("select count(*) from cs368_cart where cookieID = '" . GetCartID() . "' and itemId = $itemId"); 
      $row = mysql_fetch_row($result); 
      $numRows = $row[0]; 

      if($numRows == 0) { 
        // This item doesn't exist in the users cart, 
        // we will add it with an insert query 
        mysql_query("insert into cs368_cart(cookieID, itemId, qty) values('" . GetCartID() . "', $itemId, $qty)"); 
      }  
      else { 
        // This item already exists in the users cart, 
        // we will update it instead 

        UpdateItem($itemId, $qty); 
        }  
      } 

Я только что проверил мои cs368_cart таблицы базы данных и она пуста.

mysql> select * from cs368_cart 
-> ; 
Empty set (0.00 sec) 

По-видимому, ничего не добавляется. Мне интересно, правильно ли мой запрос?

Мои столы:

mysql> select * from cs368_products 
-> ; 
+--------+----------------+---------------------------------------------+-----------+ 
| itemId | itemName  | itemDesc         | itemPrice | 
+--------+----------------+---------------------------------------------+-----------+ 
|  1 | French Vanilla | A medium blend with a hint vanilla   |  9.79 | 
|  2 | Hazelnut Cream | A light blend with a spicy note of Hazelnut |  9.69 | 
|  3 | Columbian  | A medium-dark blend straight up    |  9.89 | 
+--------+----------------+---------------------------------------------+-----------+ 
3 rows in set (0.00 sec) 

и моей корзины столы;

mysql> show columns from cs368_cart; 
+----------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+----------+-------------+------+-----+---------+----------------+ 
| cartId | int(11)  | NO | PRI | NULL | auto_increment | 
| cookieId | varchar(50) | NO |  |   |    | 
| itemId | int(11)  | YES |  | NULL |    | 
| qty  | int(11)  | YES |  | NULL |    | 
+----------+-------------+------+-----+---------+----------------+ 
4 rows in set (0.00 sec) 

Это мой GetCartId я в отдельном PHP файл, который bieng называется правильно файлом PHP с помощью этой функции AddItem.

function GetCartId(){ 
    if(isset($_COOKIE["cartId"])){ 
    return $_COOKIE["cartId"]; 
} 
else { 
    session_start(); 
    setcookie("cartId", session_id(), time()+((3600*24)*30)); 
    return session_id(); 
} 
+2

Пожалуйста, прекратите писать новый код с помощью древних 'mysql_ *' функций. Они больше не поддерживаются, и сообщество начало процесс [устаревания] (http://news.php.net/php.internals/53799). Вместо этого вы должны узнать о подготовленных операторах и использовать либо [PDO] (http://php.net/pdo), либо [MySQLi] (http://php.net/mysqli). Если вы хотите узнать, [здесь довольно хороший учебник по PDO] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers). –

+0

Что такое SQL, идущий в результат $ на вашей странице печати, вы предоставили нам цикл while, но не то, что на самом деле передается. – grahamrb

+0

@Truth Look, я был в PHP/MySQL примерно 2 недели с whopping 4 класса на нем в более старой книге, которая не упоминает PDO. Я обязательно посмотрю на это. Благодарю. Я также ценю драйв с небольшой помощью, кроме комментариев. –

ответ

1

Похоже, вы пытаетесь вставить cartId в качестве строки, когда ваша таблица имеет cartId как целое число. Рассмотрим более подробно ваш SQL в строках PHP.

+0

Я изменил свой cartId на varchar (100) в таблице, и это, похоже, тоже не помогло. –

+0

На самом деле мне нужно было поменять cartId на cookieId. –

1

Вы должны изменить вставки запроса на нечто подобное, ниже которого будет сказать вам, что случилось с вашей вставкой sataement (и это хорошая практика, чтобы обрабатывать ошибки грациозно)

<?php 
    $queryResult = mysql_query("insert into cs368_cart(cookieID, itemId, qty) values('" . GetCartID() . "', $itemId, $qty)"); 
if (!$queryResult) { 
    die('Invalid query: ' . mysql_error()); 
} 

?> 

на основе пример в http://php.net/manual/en/function.mysql-query.php

+0

Извините, что не делал. Я заметил, что у меня был cookieID вместо cookieId. Он должен был быть последним. Также несколько других мест, в которых я получил, о которых позаботились. –

Смежные вопросы