extract () ошибка с заказами клиентов в php - PullRequest
0 голосов
/ 11 марта 2012

У меня проблемы с созданным мной php-файлом заказа клиента.

Я пытаюсь выбрать stockID из моей таблицы Stock, а userID и orderID из моей таблицы Orders.

Затем он будет вставлен в мою таблицу Ordered_Items.

Он отлично работает при заказе одного элемента, однако при заказе нескольких элементов отображается следующая ошибка:

Предупреждение: extract (): Первый аргумент должен быть массивом в /home/k0900863/www/Coursework/order.php в строке 101

foreach ($cart as $id=>$no)
   {
      $result=mysql_query("SELECT * FROM Stock WHERE stockID='$id'");
      $row=mysql_fetch_array($result);
      extract($row); // Line 101
      $result2=mysql_query("SELECT MAX(orderID) FROM Orders WHERE userID='$userID'");
      $row2=mysql_fetch_array($result2);
      extract($row2);
      mysql_query("INSERT INTO Ordered_Items (stockID, units, orderID) 
                   VALUES ('$id', '$no', '$orderID')");   
   }

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

mysql_fetch_array может вернуть FALSE вместо Array. Лучше использовать это:

$result=mysql_query("SELECT * FROM Stock WHERE stockID='$id'");
if ($row=mysql_fetch_array($result)) { 
  extract($row); // Line 101
  // Rest of your code ...
}

См. Также: extract.

0 голосов
/ 11 марта 2012
$row=mysql_fetch_array($result); 

(по умолчанию) возвращает массив с числовыми и ассоциативными ключами.

Это означает, что extract ($ row) будет пытаться создать переменные типа

$ 1

, а также

$ columnname

, а $ 1 - недопустимое имя для переменной, поскольку переменная - числовое значение

Аналогично, для $ row2 у вас есть «MAX (orderID)», что означает, что extract попытается создать переменную с именем

$ MAX (orderID)

Или используйте второй аргумент для mysql_fetch_array ()

$row=mysql_fetch_array($result, MYSQL_ASSOC); 

или используйте

$row=mysql_fetch_assoc($result); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...