Приведенный ниже код работает, он правильно обновляет базу данных. Однако после завершения публикации данные на странице устарели, т. Е. $reader_busy[0] не обновляется, даже если он управляется запросом SELECT.

Чтобы заставить $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>
0
nu everest 26 Ноя 2016 в 21:56

2 ответа

Лучший ответ

Просто измените порядок действий. Вместо получения и последующего обновления обновите перед получением.

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

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

$reader_busy = $wpdb->get_col($wpdb->prepare($reader_busy_query));
?>
0
Mikey 26 Ноя 2016 в 19:42

Я вижу, чего вы пытаетесь достичь, а это кажется невозможным. Вместо обновления страницы вы можете (должны) сделать запрос ajax и обновить свою страницу, обновив только те данные страницы, которые вам нужны.

РЕДАКТИРОВАТЬ:

Потому что вы пытаетесь отправить сообщение на страницу с помощью ANCHOR, и браузеры по своей природе будут пытаться найти информацию на странице, не обновляя ее. Браузер по-прежнему отправляет информацию для публикации, поэтому он обновляется в фоновом режиме, но не обновляет страницу.

Вы должны отправить сообщение через запрос ajax и вернуть данные в поле или опубликовать его в другом файле php (без #hashtag).

PS - Вы не получите больше респондентов, если будете понижать рейтинг всех ответов, которые вам не подошли :)

0
Kainax 26 Ноя 2016 в 19:59