2010-07-01 70 views
0

我的项目是一个小酒馆菜单,使用PHP和MySQL。它打印出一个漂亮的菜单项目表,只要它们有货。我想使用php或ajax发布回自己的表单来刷新表格

我做了addRemove.php来添加和删除菜单项。它为每个项目创建一个按钮,打开或关闭。 “开”的项目有货并显示在菜单上。当用户点击一个按钮时,它会将按钮的名称发回到表单,然后“切换”功能对该项目执行UPDATE。如果该按钮处于打开状态,则会将其切换为关闭状态。如果它关闭,它会打开。

例如:我在菜单上有3个项目,意大利面,披萨和芝士汉堡。我用完了意大利面,所以我去addRemove.php。

面条,披萨,和乳酪负载为按钮 披萨:[ON] 意粉:[ON] 乳酪:[ON]

我点击面条按钮,并且数据库正确地更新为: 披萨:[ON] 意粉:[OFF] 乳酪:[ON]

但形式示出: 披萨:[ON] 意粉:[ON] 乳酪:[ON]

然后我点击汉堡按钮,并在数据库再次正确更新: 比萨:[ON] 意粉:[关闭] 汉堡:[关闭]

和表格现在显示 比萨:[ON] 意大利面:[OFF] 芝士汉堡:[ON]

表格显示的是实际数据的一步。我认为问题在于,在执行'切换'UPDATE查询之前,表单被重新加载。

我不知道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'); 

回答

0

好的我想出了一个解决方案,但它的一种丑陋。 我添加以下代码:

<?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 . "\""); 

} 
?> 
0

我可能只是缺少真正的问题,但如果你需要的是有页面等待结果,然后刷新,我想你可以简单地在添加刷新接收您的查询。由于PHP与Javascript不同步,因此在查询数据库时执行会暂停。因此,只需添加:

在你的最后“切换()”函数:

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

但是,这是不是很方便(他们单击窗体上,并看到页面刷新两次)。相反,为什么不把UPDATE逻辑放在单独的文件中。表单在那里提交,文件查询数据库,查询完成后,重定向到原始表单页面。没有双刷新的方式。