PHP不会在页面刷新之前检索新数据

时间:2014-08-10 11:45:21

标签: php html mysql arrays

发生的事情是我认为我的代码首先选择数据(基本上是旧数据)然后更新它,但我想要的是它更新然后选择数据(新数据)。我怎么能这样做?

我将发布出错的地方,如果您需要完整的代码,请询问:

        $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之外,一切都在正确的地方工作。

1 个答案:

答案 0 :(得分:2)

在评论中讨论后,我确定您在修改数据库的post表单提交后尝试呈现页面。完全可以重新读取新的数据库状态并在后期操作中呈现它,但这是不可取的,因为浏览器无法刷新页面而不询问您是否希望再次运行该操作。这不会带来良好的用户体验,特别是与使用后退/前进按钮有关。

此行为的原因是后期操作通常会修改数据库。它们用于例如信用卡购买或简档修改中,其中预期服务器状态的某些变化。因此,优良作法是在写入操作之后执行到服务器的新往返,以将页面方法从post更改为get

我链接到的header()电话会执行此操作,并且也会解决您的渲染问题。