2016-11-26 2 views
0

以下のコードは正常にデータベースを更新します。ただし、投稿が完了した後、ページのデータは古いです。つまり、SELECTクエリによって駆動されても$reader_busy[0]は更新されません。POST後もPHPの古いデータが表示される

ユーザー画面で$reader_busy[0]を正しく更新するには、更新が必要です。これは、ポストの後にページがリロードされ、次に更新されることを意味します。

ページを2回読み込まなくても、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

サイドノート:準備されたステートメントを適切に使用していません。 [例](https://developer.wordpress.org/reference/classes/wpdb/prepare/#description)に従い、プレースホルダを使用します。 – Mikey

+0

これで、Selectの後に$ read_keyを設定しました。また、Mikeyは正しいです、準備されたSQL文を使用してください。 – Kainax

答えて

0

ちょうどあなたが物事を行う方法の順序を反転させます。代わりに検索し、更新する前に更新してください。

<?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

SELECT操作の前にifステートメントを移動しましたが、同じ動作が発生しています。 –

+0

それは意味をなさない。更新してもよろしいですか?更新後に '$ result'の値を出力します - それが与える値を見てください。 – Mikey

+0

更新プログラムが正常に動作すると確信しています。 –

0

は不可能になります。ページを更新する代わりに、必要なページデータだけをリフレッシュすることによって、ajaxリクエストを作成してページを更新することができます(必要があります)。

EDIT:

あなたはANCHORのページに投稿しようとしている、そしてそこに本質的にブラウザがそれを更新せずにページ上の情報を見つけるためにしようとします、ので。ブラウザは投稿する情報を送信しますので、バックグラウンドで更新されますが、ページは更新されません。

投稿を作成してフィールドに返すか、#hashtagを付けずに別のphpファイルに投稿する必要があります。

PS - あなたはあなたのために動作しませんでしたすべての答えをダウングレードされます場合は、より多くの回答を得ることはありません:)

+0

なぜそれが不可能であるかについてもっと詳しく説明できますか? –

+0

私は多くの説明を追加しました – Kainax

+0

私はanyonesの答えをdownvoteしませんでした。 –

関連する問題