Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
5 / 2 / 0
Регистрация: 12.07.2014
Сообщений: 183
1

В массив приходит bool(false), почему?

10.04.2015, 10:52. Показов 5619. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую!
По урокам делаю интернет магазин, который имеет каталог:
В массив приходит bool(false), почему?

но при обращении к корзине (файл basket.php) выдает:
Ваша корзина
Произошла ошибка при выводе товаров
Тогда как в самой корзине товары есть!
Вот содержимое файла basket.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
    // подключение библиотек
    require "inc/lib.inc.php";
    require "inc/db.inc.php";
?>
<html>
<head>
    <title>Корзина пользователя</title>
</head>
<body>
    <h1>Ваша корзина</h1>
<?php 
$goods = myBasket();
if(!is_array($goods)){
    echo 'Произошла ошибка при выводе товаров';
    exit;
}
if($goods)
    echo '<p>Верниться в <a href="catalog.php">Каталог</a></p>';
else
    echo  '<p>Корзина пуста! Вернитесь в <a href="catalog.php">каталог</a></p>';
?>
<table border="1" cellpadding="5" cellspacing="0" width="100%">
<tr>
    <th>N п/п</th>
    <th>Название</th>
    <th>Автор</th>
    <th>Год издания</th>
    <th>Цена, руб.</th>
    <th>Количество</th>
    <th>Удалить</th>
</tr>
<?php
    $i=1; $sum=0;
    foreach ($goods as $item){
?>
    <tr>
    <td><?= $i?></td>
    <td><?= $item['title']?></td>
    <td><?= $item['author']?></td>
    <td><?= $item['pubyear']?></td>
    <td><?= $item['price']?></td>
    <td><?= $item['quantity']?></td>
    <td><a href="delete_from_basket.php?id="<?=$item['id']?>">Удалить</a></td>
    </tr>
<?
$i++;
$sum += $item['price'] * $item['quantity'];
}
?>
</table>
 
<p>Всего товаров в корзине на сумму: <?=$sum?> руб.</p>
 
<div align="center">
    <input type="button" value="Оформить заказ!"
                      onClick="location.href='orderform.php'" />
</div>
 
</body>
</html>
Проверил, с помощью var_dump($goods) выдает bool(false), тогда как в этой переменной должен быть массив из заказов.
Если что, то вот содержимое lib.inc.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
function clearInt($data){
    return abs((int)$data);
}
function clearStr($data){
    global $link;
    return mysqli_real_escape_string($link, trim(strip_tags($data)));
}
function saveBasket(){
    global $basket;
    $basket = base64_encode(serialize($basket));
    setcookie('basket', $basket, 0x7FFFFFFF);
}
function basketInit(){
    global $basket, $count;
    if(!isset($_COOKIE['basket'])){
        $basket = array('orderid' => uniqid());
        saveBasket();
    }else{
        $basket = unserialize(base64_decode($_COOKIE['basket']));
        $count = count($basket) - 1;
    }
}
function add2Basket($id, $q){
    global $basket;
    $basket[$id] = $q;
    saveBasket();
}
function myBasket(){ 
    global $link, $basket;
    $goods = array_keys($basket);
    array_shift($goods);
    $ids = implode (",",$goods);
    $sql = "SELECT id, title, author,pubyear, price FROM catalog WHERE id IN ($ids))";
    if(!$result = mysqli_query($link, $sql))
        return false;
    $item = result2Array($result);
    mysqli_free_result($result);
    return $items;
}
function result2Array($data){
    global $basket;
    $arr = array();
    while($row = mysqli_fetch_assoc($data)){
        $row['quantity'] = $basket[$row['id']];
        $arr[] = $row;
    }
    return $arr;
}
function addItemToCatalog($title, $author, $pubyear, $price){
    global $link;
    $sql = "INSERT INTO catalog(title, author, pubyear, price) VALUES(?, ?, ?, ?)";
    if(!$stmt = mysqli_prepare($link, $sql))
        return false;
    mysqli_stmt_bind_param($stmt, "ssii", $title, $author, $pubyear, $price);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
    return true;
}
function selectAllItem(){
    global $link;
    $sql = 'SELECT id, title, author, pubyear, price FROM catalog';
    if(!$result = mysqli_query($link, $sql))
        return false;
    $items = mysqli_fetch_all($result, MYSQLI_ASSOC);
    mysqli_free_result($result);
    return $items;
}
Содержимое db.inc.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
header("Content-Type: text/html; charset=utf-8");
define('DB_HOST', 'localhost');
define('DB_LOGIN', 'root');
define('DB_PASSWORD', 'pass');
define('DB_NAME', 'eshop');
define('ORDER_LOG', 'orders.log');
// Корзина покупателя 
$basket = array(); 
// Количество товаров в корзине покупателя
$count=0;
$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME) or die (mysqli_connect_error());
$link->set_charset("utf8");
basketInit();
На видеоуроках у автора все прекрасно отображается, а у меня выдает ошибку!
Уже три дня не могу победить эту проблему, застрял
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2015, 10:52
Ответы с готовыми решениями:

В массив приходит bool(false) и далее из за этого в foreach инвалидный аргумент
Всем доброго времени суток! Я нуб в ПХП, только начинаю учиться. По видеоурокам делаю интернет...

Изменить значение bool a = true в bool a = false
// Логическое выражения - варианты #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; ...

Запрос возврощяет bool(false)
У меня есть столбец с такими данными: &lt;1&gt;bar bar foo&lt;/1&gt; запрос на phpmyadmin: select...

Bool false/true и условие
bool changed; if(ui-&gt;check_budget-&gt;isChecked()) { if (changed==false) ...

7
18 / 18 / 12
Регистрация: 10.03.2015
Сообщений: 77
10.04.2015, 11:23 2
PHP
1
2
3
$item = result2Array($result);
    mysqli_free_result($result);
    return $items
item и items - разные переменные
1
5 / 2 / 0
Регистрация: 12.07.2014
Сообщений: 183
10.04.2015, 14:49  [ТС] 3
kitlum,
Спасибо! Ошибку исправил, но все равно всплывает:
Произошла ошибка при выводе товаров
Добавлено через 54 секунды
может это все заархивировать и выложить тут? имеет смысл?
0
Заблокирован
10.04.2015, 15:00 4
Цитата Сообщение от sasha300 Посмотреть сообщение
может это все заархивировать и выложить тут? имеет смысл?
Да можно выложить и надеяться что кто то будет копать твой код.
А можно найти проблему самостоятельно. Для этого надо проверить код по цепочке начав с крайнего элемента.
Для начала распечатай $goods и посмотри что внутри:
PHP/HTML
1
2
3
4
5
6
<body>
    <h1>Ваша корзина</h1>
<?php 
$goods = myBasket();
print_r($goods);
if(!is_array($goods)){
если там пусто надо поэтапно смотреть что в переменных из функции myBasket():
1
5 / 2 / 0
Регистрация: 12.07.2014
Сообщений: 183
10.04.2015, 15:13  [ТС] 5
Trukl,
Кажись нашел, но лучше спрошу: если при var_dump($basket);
получаю:
HTML5
1
array(6) { [10]=> NULL [2]=> NULL [9]=> NULL [13]=> NULL [1]=> NULL [11]=> NULL }
Этого же не может быть?
p.s.: просто одна функция вложена в другую:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function myBasket(){ 
    global $link, $basket;
    $goods = array_keys($basket);
    array_shift($goods);
    $ids = implode (",",$goods);
    $sql = "SELECT id, title, author,pubyear, price FROM catalog WHERE id IN ($ids))";
    if(!$result = mysqli_query($link, $sql))
        return false;
    $items = result2Array($result);
    mysqli_free_result($result);
    return $items;
}
function result2Array($data){
    global $basket;
    $arr = array();
    while($row = mysqli_fetch_assoc($data)){
        $row['quantity'] = $basket[$row['id']];
        $arr[] = $row;
    }
    return $arr;
}
Массив $arr показал NULL, т.е. туда ничего не пришло, проверил глобальную переменную $basket и такое выдало. Тут копать?
0
Заблокирован
10.04.2015, 15:36 6
Лучший ответ Сообщение было отмечено sasha300 как решение

Решение

Смотря какой баскет
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function myBasket(){ 
    global $link, $basket;
    $goods = array_keys($basket);//если этот то тут нужны только ключи
    array_shift($goods);
    $ids = implode (",",$goods);
    $sql = "SELECT id, title, author,pubyear, price FROM catalog WHERE id IN ($ids)";//тоесть тут будет SELECT id, title, author,pubyear, price FROM catalog WHERE id IN (10,2,9,13,1,11)
// кстати тут у тебя лишняя скобка
    if(!$result = mysqli_query($link, $sql))
        return false;
    $items = result2Array($result);
    mysqli_free_result($result);
    return $items;
}
function result2Array($data){
    global $basket;
    $arr = array();
    while($row = mysqli_fetch_assoc($data)){
        $row['quantity'] = $basket[$row['id']];// вот тут не очень ясно но скорее всего тоже только ключи
        $arr[] = $row;
    }
    return $arr;
}
1
5 / 2 / 0
Регистрация: 12.07.2014
Сообщений: 183
10.04.2015, 15:50  [ТС] 7
Trukl,
Ура!! Заработало!!
Это из-за скобки дополнительной я 3 дня профукал, ищя ошибку
0
2 / 2 / 0
Регистрация: 23.03.2014
Сообщений: 118
21.02.2022, 19:15 8
Всем привет! Вопрос по этому коду - Почему находясь в Каталоге и нажимая "В корзину", в корзину летит только 1 шт каждого "Товара"? Т.е. если в Каталоге 5 шт товара, то в Корзину попадёт максимум только 5шт (по 1 шт каждого товара); один товар я не могу добавить 2 или 3 шт?
0
21.02.2022, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2022, 19:15
Помогаю со студенческими работами здесь

Если bool name=false, то !name это true?
Добрый день! Привожу код, взятый из книги. Непонятны следующие строки bool found_one = false;...

Обьясните что это значит bool f=false;
#include &lt;iostream&gt; using namespace std; struct Aeroflot { char punkt_naznachenia; ...

Перестала грузиться страница по CURL - bool(false)
Всем привет. Долгое время без проблем работала вот такая функция public function requesting(){ ...

Массив: Почему при сравнении двух одинаковых объектов я получаю false?
var a = ; var b = ; console.log(a); // console.log(b); // console.log(typeof a); //object...

Проверить есть ли в Dictionary<string, bool> значение false
Есть словарь Dictionary&lt;string, bool&gt; dс = new Dictionary&lt;string, bool&gt;(); Я добавляю что-то...

После функции unserialize переменная становится bool(false)
$arr = array('name' =&gt; 'Павел', 'surname' =&gt; 'Викторович'); $arr = serialize($arr); //переводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru