2010-07-01 75 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邏輯放在單獨的文件中。表單在那裏提交,文件查詢數據庫,查詢完成後,重定向到原始表單頁面。沒有雙刷新的方式。