Мой проект - меню бистро, использующее PHP и MySQL.Он распечатывает симпатичную таблицу пунктов меню, пока они есть в наличии.
Я сделал addRemove.php, чтобы добавлять и удалять элементы из меню.Он создает кнопку для каждого элемента, вкл или выкл.Товары, которые включены, есть в наличии и отображаются в меню.Когда пользователь нажимает кнопку, он публикует имя кнопки обратно в форму, а затем функция «переключение» выполняет ОБНОВЛЕНИЕ для этого элемента.Если кнопка включена, она выключается.Если он выключен, он включается.
Пример: у меня есть 3 пункта в меню: спагетти, пицца и чизбургер.У меня заканчиваются спагетти, поэтому я захожу в addRemove.php.
Загрузка спагетти, пиццы и чизбургера в виде кнопок Пицца: [ВКЛ] Спагетти: [ВКЛ] Чизбургер: [ВКЛ]
Я нажимаю кнопку спагетти, и база данных корректно обновляется на: Пицца: [ВКЛ] Спагетти: [ВЫКЛ] Чизбургер: [ВКЛ]
, но в форме отображается: Пицца: [ВКЛ] Спагетти: [ВКЛ] Чизбургер: [ON]
, затем я нажимаю кнопку «Чизбургер», и база данных снова корректно обновляется: Пицца: [ON] Спагетти: [OFF] Чизбургер: [OFF]
и форма сейчаспоказывает Пицца: [ВКЛ] Спагетти: [ВЫКЛ] Чизбургер: [ВКЛ]
Показанная форма находится на один шаг позади фактических данных.Я думаю, проблема в том, что форма публикуется и перезагружается до выполнения запроса UPDATE 'toggle'.
Я не знаю AJAX, есть ли простой способ принудительного обновления после ОБНОВЛЕНИЯ?
здесь addRemove.php:
<?php include ("data2.php");
$keys = array_keys($_POST);
if(isset($keys[0])){
toggle($name[$keys[0]]);
}
?>
<form action="addRemove2.php" method="post">
<?php
global $name;
$c = count($name);
//$c = 2;
for($i=0;$i<$c;$i++){
$item = $name[$i];
if($inStock[$i]==1){
$onOff = "ON";$color = "blue";
}
else{
$onOff = "OFF";$color = "red";
}
echo "<label>$item</label>";
echo "<input type='submit' name='$i' value='$onOff' style='color:$color'>";
echo "<br />";
}
?>
</form>
<?php
function turnOn($item){
$dbc = mysqli_connect('localhost','root','','bigItaly')
or die('Error connecting to MySQL Server.');
$queryString = "UPDATE items SET inStock='1' WHERE name='$item'";
mysqli_query($dbc, $queryString);
mysqli_close($dbc);
}
function turnOff($item){
$dbc = mysqli_connect('localhost','root','','bigItaly')
or die('Error connecting to MySQL Server.');
$queryString = "UPDATE items SET inStock='1' WHERE name='$item'";
mysqli_query($dbc, $queryString);
mysqli_close($dbc);}
function getInStock($item){
global $name, $inStock;
$key = array_search($item, $name);
return $inStock[$key];
}
function toggle($item){
if (getInStock($item)=="1"){
turnOff($item);
}
else{
turnOn($item);
}
}
?>
</html>
здесьсхема базы данных.
INSERT INTO `items` (`id`, `name`, `unitPrice`, `inStock`, `category`) VALUES
(1, 'Fettucine Alfredo', 2, 1, 'Pastas'),
(2, 'Hawaiian', 3, 1, 'Pizzas'),
(3, 'Spaghetti', 3, 1, 'Pastas'),
(4, 'Supreme', 5, 1, 'Pizzas'),
(5, 'Deluxe Lasagna', 2, 1, 'Pastas'),
(6, 'Barbecue Chicken', 6, 1, 'Pizzas'),
(7, 'Guacomole Bacon', 3, 1, 'Burgers'),
(8, 'Swiss Mushroom', 2, 1, 'Burgers'),
(9, 'Breakfast Burger', 2, 1, 'Burgers');