发生的事情是我认为我的代码首先选择数据(基本上是旧数据)然后更新它,但我想要的是它更新然后选择数据(新数据)。我怎么能这样做?
我将发布出错的地方,如果您需要完整的代码,请询问:
$select_links = $db->query("SELECT pid, added_by,link_title,lid,link_order FROM " . TABLE_PREFIX . "homepage_links WHERE pid='$pid'
ORDER BY link_order DESC LIMIT $start,$show");
$check_link_count_rows = $db->num_rows($select_links);
echo "<b> You Current Have " . $check_link_count_rows . " Links On Your Page: </b><br>";
echo "<form action='' method='POST'>
";
while($select_links_array = $db->fetch_array($select_links)) {
$link_title_display = $select_links_array['link_title'];
$link_id_display = $select_links_array['lid'];
if(!$mybb->input["order_edit_$link_id_display"]) {
$link_order_display = $select_links_array['link_order'];
} else {
$link_order_display = $mybb->input["order_edit_$link_id_display"];
}
$order_edit_value1 = $mybb->input["order_edit_$link_id_display"];
$order_edit_value = $db->escape_string($order_edit_value1);
echo "<br>" . $link_title_display . " <a href='?operation=edit_links&link=$link_id_display'> (edit) </a>
<input type='number' name='order_edit_$link_id_display' value='$link_order_display' style='width:40px;'>
<input type='hidden' name='get_link_id_display_value_$link_id_display' value='$link_id_display'><br>
";
$get_link_id_display_value1 = $mybb->input["get_link_id_display_value_$link_id_display"];
$get_link_id_display_value = $db->escape_string($get_link_id_display_value1);
$update_quick_edit_query = $db->query("UPDATE spud_homepage_links SET link_order='$order_edit_value'
WHERE lid='$get_link_id_display_value'");
}
我无法找到解决方案,因为除了这个bug之外,一切都在正确的地方工作。
答案 0 :(得分:2)
在评论中讨论后,我确定您在修改数据库的post
表单提交后尝试呈现页面。完全可以重新读取新的数据库状态并在后期操作中呈现它,但这是不可取的,因为浏览器无法刷新页面而不询问您是否希望再次运行该操作。这不会带来良好的用户体验,特别是与使用后退/前进按钮有关。
此行为的原因是后期操作通常会修改数据库。它们用于例如信用卡购买或简档修改中,其中预期服务器状态的某些变化。因此,优良作法是在写入操作之后执行到服务器的新往返,以将页面方法从post
更改为get
。
我链接到的header()
电话会执行此操作,并且也会解决您的渲染问题。