function saveOrder($datetime){
global $link, $basket;
$goods = myBasket();
$stmt = mysqli_stmt_init($link);
$sql='INSERT INTO orders (title,author,pubyear,price,quantity,orderid,datetime)
/*ЭТО ПРОВЕРИТЬ*/
VALUES (?, ?, ?, ?, ?, ?, ?)';
if(!mysqli_stmt_prepare($stmt, $sql))
return false;
foreach($goods as $item){
mysqli_stmt_bind_param($stmt, "ssiiisi", $item['title'], $item['author'], $item['pubyear'], $item['price'], $item['quantity'], $item['orderid'], $datetime);
mysqli_stmt_execute($stmt);
}
mysqli_stmt_close($stmt);
removeBasket();
return true;
}
function myBasket(){
global $link, $basket;
$goods = array_keys($basket);
array_shift($goods);
if(!$goods)
return false;
$ids = implode(",", $goods);
$sql = "SELECT id, author, title, 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;
}
$name= clearStr($_POST["name"]);
$email= clearStr($_POST["email"]);
$phone= clearStr($_POST["phone"]);
$address= clearStr($_POST["address"]);
$oid = $basket["orderid"];
$dt = time();
$order = "$name|$email|$phone|$address|$oid|$dt\n";
file_put_contents("admin/".ORDERS_LOG, $order, FILE_APPEND);
saveOrder($dt);
<form class="" action="saveorder.php" method="post">
<label for="">Заказчик</label>
<input type="text" name="name" id="name" value=""><br /><br />
<label for="">Email заказчика: </label>
<input type="text" name="email" id="email" value=""><br /><br />
<label for="">Телефон для связи: </label>
<input type="text" name="phone" id="phone" value=""><br /><br />
<label for="">Адрес доставки: </label>
<input type="text" name="address" id="address" value=""><br /><br />
<input type="submit" name="" value="Заказать">
</form>
[1] => Array
(
[name] => petr
[email] => petra@mail.ru
[phone] => 12345
[address] => gorod
[orderid] => 5e7307f462384
[date] => 1584597690
[goods] => Array
(
)
)
function result2Array($data){
global $basket;
$arr = [];
while($row = mysqli_fetch_assoc($data)){
$row['quantity'] = $basket[$row['id']];
$arr[] = $row;
}
return $arr;
}
$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>
<?
$sum += $item['price'] * $item['quantity'];
}
require "config.inc.php";
function clearStr($data){
global $link;
$data = trim(strip_tags($data));
return mysqli_real_escape_string($link, $data);
}
require "inc/lib.inc.php";
require "inc/config.inc.php";
$name= clearStr($_POST["name"]);
$email= clearStr($_POST["email"]);
$phone= clearStr($_POST["phone"]);
$address= clearStr($_POST["address"]);
$oid = $basket["orderid"];
$dt = time();
$order = "$name|$email|$phone|$address|$oid|$dt\n";
file_put_contents("admin/".ORDERS_LOG, $order, FILE_APPEND);
saveOrder($dt);
<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>
<?
$sum += $item['price'] * $item['quantity'];
}
?>
</table>
<p>Всего товаров в корзине на сумму: <?=$sum?> руб.</p>
<div align="center">
<input type="button" value="Оформить заказ" onClick="location.href='orderform.php'"/>
</div>
</body>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Оформление заказа</title>
</head>
<body>
<h1>Оформление заказа</h1>
<form class="" action="saveorder.php" method="post">
<label for="">Заказчик</label>
<input type="text" name="name" id="name" value=""><br /><br />
<label for="">Email заказчика: </label>
<input type="text" name="email" id="email" value=""><br /><br />
<label for="">Телефон для связи: </label>
<input type="text" name="phone" id="phone" value=""><br /><br />
<label for="">Адрес доставки: </label>
<input type="text" name="address" id="address" value=""><br /><br />
<input type="submit" name="" value="Заказать">
</form>
</body>
</html>
require "inc/lib.inc.php";
require "inc/config.inc.php";
$name= clearStr($_POST["name"]);
$email= clearStr($_POST["email"]);
$phone= clearStr($_POST["phone"]);
$address= clearStr($_POST["address"]);
$oid = $basket["orderid"];
$dt = time();
$order = "$name|$email|$phone|$address|$oid|$dt\n";
file_put_contents("admin/".ORDERS_LOG, $order, FILE_APPEND);
saveOrder($dt);
function saveOrder($datetime){
global $link, $basket;
$goods = myBasket();
$stmt = mysqli_stmt_init($link);
$sql='INSERT INTO `orders` (`title`,`author`,`pubyear`,`price`,`quantity`,`orderid`,`datetime`)
/*ЭТО ПРОВЕРИТЬ*/
VALUES (?, ?, ?, ?, ?, ?, ?)';
if(!mysqli_stmt_prepare($stmt, $sql))
return false;
foreach($goods as $item){
mysqli_stmt_bind_param($stmt, "ssiiisi", $item['title'], $item['author'], $item['pubyear'], $item['price'], $item['quantity'], $item['orderid'], $datetime);
mysqli_stmt_execute($stmt);
}
mysqli_stmt_close($stmt);
removeBasket();
return true;
}
require "inc/lib.inc.php";
require "inc/config.inc.php";
var_dump($_POST);
var_dump($basket);
$name= clearStr($_POST["name"]);
$email= clearStr($_POST["email"]);
$phone= clearStr($_POST["phone"]);
$address= clearStr($_POST["address"]);
$oid = $basket["orderid"];
$dt = time();
$order = "$name|$email|$phone|$address|$oid|$dt\n";
var_dump($order);
file_put_contents("admin/".ORDERS_LOG, $order, FILE_APPEND);
saveOrder($dt);
function saveOrder($datetime){
global $link, $basket;
var_dump($basket);
$goods = myBasket();
var_dump($goods);
$stmt = mysqli_stmt_init($link);
$sql='INSERT INTO `orders` (`title`,`author`,`pubyear`,`price`,`quantity`,`orderid`,`datetime`)
/*ЭТО ПРОВЕРИТЬ*/
VALUES (?, ?, ?, ?, ?, ?, ?)';
if(!mysqli_stmt_prepare($stmt, $sql))
return false;
foreach($goods as $item){
mysqli_stmt_bind_param($stmt, "ssiiisi", $item['title'], $item['author'], $item['pubyear'], $item['price'], $item['quantity'], $item['orderid'], $datetime);
mysqli_stmt_execute($stmt);
}
mysqli_stmt_close($stmt);
removeBasket();
return true;
}
обычно после вардампа exit делаютэто хороший способ для движков, использующих рендер шаблонов через ob_ функции, в данном лапшекоде абсолютно не нужно.
массив со всеми данными передается в функцию, а вот вконце функции уже NULL даетТак, вангую что еррор репортинг у вас нормально не выставлен... И что выдает var_dump($goods);???
function saveOrder($datetime){
global $link, $basket;
var_dump($basket);
$goods = myBasket();
var_dump($goods); exit(); // здесь что выдает???
....
require "inc/lib.inc.php";
require "inc/config.inc.php";
$name= clearStr($_POST["name"]);
$email= clearStr($_POST["email"]);
$phone= clearStr($_POST["phone"]);
$address= clearStr($_POST["address"]);
$oid = $basket["orderid"];
$dt = time();
$order = "$name|$email|$phone|$address|$oid|$dt\n";
file_put_contents("admin/".ORDERS_LOG, $order, FILE_APPEND);
saveOrder($dt);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Оформление заказа</title>
</head>
<body>
<h1>Оформление заказа</h1>
<form class="" action="saveorder.php" method="post">
<label for="">Заказчик</label>
<input type="text" name="name" id="name" value=""><br /><br />
<label for="">Email заказчика: </label>
<input type="text" name="email" id="email" value=""><br /><br />
<label for="">Телефон для связи: </label>
<input type="text" name="phone" id="phone" value=""><br /><br />
<label for="">Адрес доставки: </label>
<input type="text" name="address" id="address" value=""><br /><br />
<input type="submit" name="" value="Заказать">
</form>
</body>
</html>
foreach($goods as $item){
mysqli_stmt_bind_param($stmt, "ssiiisi", $item['title'], $item['author'], $item['pubyear'], $item['price'], $item['quantity'], $item['id'], $datetime);
mysqli_stmt_execute($stmt);
}
function getOrders(){
global $link;
if(!is_file(ORDERS_LOG))
return false;
/* получаем в виде массива персональные данные пользователя из файла*/
$orders = file(ORDERS_LOG);
/*массив который будет возвращен функцией*/
$allorders = [];
foreach ($orders as $order){
list($name, $email, $phone, $address, $orderid, $date) = explode("|", $order);
/*Промежуточный массив для хранения информации о конкретном заказе */
$orderinfo = [];
/*сохранение информации о конкретном пользователе*/
$orderinfo["name"] = $name;
$orderinfo["email"] = $email;
$orderinfo["phone"] = $phone;
$orderinfo["address"] = $address;
$orderinfo["orderid"] = $orderid;
$orderinfo["date"] = $date;
/*SQL-запрос на выборку из таблицы orders всех товаров для конкретного покупателя*/
$sql = "SELECT title, author, pubyear, price, quantity FROM orders WHERE orderid = '$orderid' AND datetime = $date";
/*Получение результата выборки*/
if(!$result = mysqli_query($link, $sql))
return false;
$items = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
/*Сохранение результата в промежуточном массиве*/
$orderinfo["goods"] = $items;
/*добавление промежуточного массива в возвращаемый массив*/
$allorders[]=$orderinfo;
}
return $allorders;
}
Field 'id' doesn't have a default valueговорит о том что все поля есть, но на id самой таблицы не добавлен атрибут автоинкремент. Зайдите в свойства этого поля и добавьте, все должно заработать. Вообще код - жесть адская конечно.
переписала, теперь массив выглядит вообще вот таквсе должно работать, ну если автоинкремент добавить. Ну и если что - снова вар дамп и смотреть какая ошибка. Естественно что могут быть другие ошибки, так как там у вас много непонятных запутанных моментов...
object(mysqli_stmt)#1 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(7) ["field_count"]=> int(0) ["errno"]=> int(1364) ["error"]=> string(39) "Field 'id' doesn't have a default value" ["error_list"]=> array(1) { [0]=> array(3) { ["errno"]=> int(1364) ["sqlstate"]=> string(5) "HY000" ["error"]=> string(39) "Field 'id' doesn't have a default value" } } ["sqlstate"]=> string(5) "HY000" ["id"]=> int(1) }
function getOrders(){
global $link;
if(!is_file(ORDERS_LOG))
return false;
/* получаем в виде массива персональные данные пользователя из файла*/
$orders = file(ORDERS_LOG);
/*массив который будет возвращен функцией*/
$allorders = [];
foreach ($orders as $order){
list($name, $email, $phone, $address, $orderid, $date) = explode("|", $order);
/*Промежуточный массив для хранения информации о конкретном заказе */
$orderinfo = [];
/*сохранение информации о конкретном пользователе*/
$orderinfo["name"] = $name;
$orderinfo["email"] = $email;
$orderinfo["phone"] = $phone;
$orderinfo["address"] = $address;
$orderinfo["orderid"] = $orderid;
$orderinfo["date"] = $date;
/*SQL-запрос на выборку из таблицы orders всех товаров для конкретного покупателя*/
$sql = "SELECT title, author, pubyear, price, quantity FROM orders WHERE orderid = '$orderid' AND datetime = $date";
if(!$result = mysqli_query($link, $sql))
return false;
$items = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
/*Сохранение результата в промежуточном массиве*/
$orderinfo["goods"] = $items;
/*добавление промежуточного массива в возвращаемый массив*/
$allorders[]=$orderinfo;
}
return $allorders;
}
/*SQL-запрос на выборку из таблицы orders всех товаров для конкретного покупателя*/
$sql = "SELECT title, author, pubyear, price, quantity FROM orders WHERE orderid = '$orderid' AND datetime = $date";
var_dump($sql);//если ВСЕ переменные норм вставились,
//идем в phpmyadmin и оттуда выполняем полученный запрос, думаем, курим доки
if(!$result = mysqli_query($link, $sql))
return false;
$items = mysqli_fetch_all($result, MYSQLI_ASSOC);
var_dump($items); // выполнился запрос? вернул что-то?
// если не вернул - проверяйте запрос
mysqli_free_result($result);
/*Сохранение результата в промежуточном массиве*/
$orderinfo["goods"] = $items;
/*добавление промежуточного массива в возвращаемый массив*/
$allorders[]=$orderinfo;
}
return $allorders;
}
просто после вардампа убрала вардамп и вуаля
это же не автоваз чтобы просто стукнуть по нему и он заработал,что происходит(Ну, подозреваю что заработал какой-то редирект, если мне не изменяет склероз, где то выше по треду упоминался варнинг о отосланных заголовках и невозможности редиректа. Это немного другая тема, но в целом дальше все то же самое - проверки переменных, и вот это все... Если честно - мне немного грустно что вы не нашли нормальный курс с хорошей базой и быстрым переходом на объекты и mvc, этот код выглядит жалко и перенасыщен антипаттернами ( С таким подходом у вас сложится впечатление что все в программировании построено через Ж. Когда есть красивый и понятный код...