Я хочу обновить форму после публикации ее обратно с помощью php или ajax - PullRequest
0 голосов
/ 01 июля 2010

Мой проект - меню бистро, использующее 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');

Ответы [ 2 ]

0 голосов
/ 01 июля 2010

Возможно, я просто упускаю истинную проблему, но если все, что вам нужно, это попросить страницу дождаться результата, а затем обновить, я думаю, вы могли бы просто добавить обновление после получения вашего запроса обратно.Поскольку PHP, в отличие от Javascript, является синхронным, выполнение будет приостановлено, пока база данных запрашивается.Поэтому просто добавьте:

header("Location: http://www.yoursite.com/addRemove.php");

В самом конце вашей функции "toggle ()":

function toggle($item){
if (getInStock($item)=="1"){
    turnOff($item);
}
else{
    turnOn($item);
}
}

Но это не очень удобно для пользователя (они нажимают на форму,и увидим обновление страницы дважды).Вместо этого, почему бы просто не иметь логику ОБНОВЛЕНИЯ в отдельном файле.Форма отправляется туда, файл запрашивает базу данных, и после завершения запроса перенаправляет на исходную страницу формы.Нет двойного обновления таким образом.

0 голосов
/ 01 июля 2010

ОК. Я нашел решение, но оно уродливо.Я добавил этот код:

<?php include ("data.php");
$keys = array_keys($_POST);
if(isset($keys[0])){
    toggle($name[$keys[0]]);
/* This refreshes the page after a 1/5 sec delay*/
    $urlRefresh = "addRemove.php";    
    header("Refresh: 0.2; URL=\"" . $urlRefresh . "\"");

}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...