POST后仍然显示PHP旧数据

时间:2016-11-26 18:56:46

标签: php mysql wordpress post

下面的代码可以正常工作,因为它可以正确地更新数据库。但是,在帖子完成后,页面上的数据已经过时,即使它是由SELECT查询驱动的,$reader_busy[0]也不会更新。

要强制$reader_busy[0]在用户屏幕上正确更新,需要刷新。这意味着页面会在帖子后重新加载,然后刷新。

如何让页面显示mysql中的正确数据而无需加载页面两次?

我的PHP代码的简化版本:

<?php 
$reader_key = 'jm2';
$reader_busy_query = "SELECT `BusyWithClient` " .
                     "FROM {$wpdb->prefix}assistant " .
                     "WHERE `Key`='" . $reader_key . "'";

$reader_busy = $wpdb->get_col( $wpdb->prepare( $reader_busy_query ) );
$busy_with_client = $reader_busy[0];    

if(isset($_POST['toggle'])){
    $result = $wpdb->update(
        $wpdb->prefix . 'assistant',
        array('BusyWithClient' => $busy_with_client), 
        array('Key' => $reader_key)                
    );

    // I want to remove / replace this line, and still see updated data. 
    echo "<meta http-equiv='refresh' content='0; url=" . curPageURL() . "#instructions" . "'>";         
}
?>

<h1>
    <?php print_r('busy: ' . $reader_busy[0]); ?>
<h1>

<form  method="post" action="<?php echo curPageURL() . '#instructions'; ?>">
    <input type="submit" name="toggle" value="toggle" >
</form>

2 个答案:

答案 0 :(得分:0)

我看到你想要完成什么,而且看起来不可能。您可以(应该)通过仅刷新所需的页面数据来制作ajax请求并更新页面,而不是刷新页面。

编辑:

因为,您尝试使用ANCHOR发布到某个页面,而且那里的浏览器会尝试在不刷新页面的情况下查找页面上的信息。浏览器仍会将信息发送到帖子,因此它会在后台更新,但不会刷新页面。

您应该通过ajax请求发布帖子并将数据返回到字段,或将其发布到另一个php文件(不带#hashtag)。

PS - 如果你降级每个对你不起作用的答案,你就不会得到更多的回答:)

答案 1 :(得分:0)

按照你做事的顺序翻转。而是检索然后更新,在检索之前更新。

!function(root, name, make) {
  if (typeof module != 'undefined' && module.exports) module.exports = make()
  else root[name] = make()
}(this, 'res', function() {

  var one = {dpi: 96, dpcm: 96 / 2.54}

  function ie() {
    return Math.sqrt(screen.deviceXDPI * screen.deviceYDPI) / one.dpi
  }

  function dppx() {
    // devicePixelRatio: Webkit (Chrome/Android/Safari), Opera (Presto 2.8+), FF 18+
    return typeof window == 'undefined' ? 0 : +window.devicePixelRatio || ie() || 0
  }

  function dpcm() {
    return dppx() * one.dpcm
  }

  function dpi() {
    return dppx() * one.dpi
  }

  return {'dppx': dppx, 'dpi': dpi, 'dpcm': dpcm}
});