如何防止PHP在isset(POST[';submit';])之后动态更新项目列表


How can I keep PHP from updating dynamically a list of items after isset(POST['submit'])?

我正在做一个"我必须发货的物品列表",每个物品都有一个按钮"标记为发货"。

我的问题是,当我按"标记为已发货"时,一个项目消失了,但它不是我点击的那个。我必须刷新页面才能看到合乎逻辑的结果。我想阻止PHP更新这个列表,因为我想用jQuery处理这个问题。此外,我想知道如何在不刷新页面的情况下更新$numItemHave2Ship(还是使用jQuery更好?)。

我该怎么做?非常感谢。

以下是我的代码的工作方式:

首先,我用MYSQL获得所有项目:

$query=mysql_query("SELECT * FROM items WHERE seller='$username' AND shipped!='1'");
$numItemHave2Ship=mysql_num_rows($query);
echo "You have to ship ".$numItemHave2Ship." items:<p>";

然后,对于我拥有的每一件物品:

<input type='hidden' name='item' value='".$row['item']."'>
<input type='submit' class='shipped_button' value='Mark as shipped'>

很明显,这个按钮触发了mysql查询:

$query=mysql_query("UPDATE items SET shipped='1' WHERE item='$item' 
AND seller='$username'");

编辑:我还没有jQuery代码。我的全部代码都是用PHP和HTML编写的。

表单对项目的操作是同一页吗?如果是,则必须根据isset($_POST["item"])、是否在调用SELECT查询和显示项列表的代码之前有条件地调用SQL UPDATE。

如果你想使用jQuery在不重新加载页面的情况下更新项目列表以及numItems标签,你需要做这样的事情(未经测试,可能包含错误,但这是它的要点):

  1. 将UPDATE和SELECT查询以及显示(回显)所选项目的代码放在一个单独的php脚本中。这必须作为jQuery ajax()或.get()或.post().中的url调用

  2. 在jQuery中,在提交按钮上设置一个点击方法,类似于$('.shipped_button').click()

  3. 通过调用$(this).prventeDefault()来阻止单击按钮时的默认行为

  4. 使用提交按钮的name属性来存储$item值。(如果不需要在不使用jQuery的情况下优雅地降级页面,则可以去掉隐藏的输入)。然后,您可以将$item值获取为$(this).attr('name'),并将其作为数据传递给您的ajax脚本。

  5. 成功后,在回调函数中刷新项目列表的内部html,如下所示:$('#items').html(result)

  6. 递减numItems标签的值:var str_items=$('#numItems').html();var int_items=parseInt(str_items)-1$('#numItems').html(int_items);

EDIT:如果您不想使用.prventDefault(),只需将type='submit'更改为type='button'即可轻松阻止表单提交。

在回调中的某个位置,列表正在刷新。如果没有看到您的ajax调用,我们就无法对其进行故障排除。但是,无论是哪个调用正在构建该列表,都应该只调用一次,可能是在页面加载时。如果你能发布你的ajax函数,我们可以看看。

您可以让多个提交按钮做不同的事情。试试这个:

<button type='submit' class='shipped_button' name='item' value='".$row['item']."'>Mark as Shipped</button>

你可以在每一行上都有一个,当你点击它时,只有该行的项目才会被"标记为已发货"。