web-dev-qa-db-fra.com

Insérer une requête insère 2 entrées, devrait en insérer 1

J'ai écrit un petit billet de vues plugin, bien au moins en a commencé un.

Mes tables sont configurées, mais lorsqu'elles sont mises à jour, le code ajoute 2 entrées à ma table lorsqu'un message est chargé et que les vues sont suivies. Je ne sais littéralement pas pourquoi cela se produit. Il semble que le deuxième identifiant de publication entré dans la table de base de données soit celui qui suit directement celui qui est chargé. Exemple: si la publication en cours a id = 121, le code ajoute les publications 121 et 124.

Voici mon code d'insertion:

if( is_single() && !is_page() ):
    // add a new data row into the views DB table with the post ID         
    $wpdb->query("INSERT INTO {$ppbv} (post_id, post_type) VALUES ('{$post->ID}','{$post->post_type}');"); 

    $data = $wpdb->get_row("SELECT * FROM {$ppbv_total} WHERE post_id='{$post->ID}'", ARRAY_A); // get the data row that has the matching post ID       

    if(!is_null($data)): // if we have a matching data row  
        $new_views = $data['views'] + 1; // increase the views by 1
        // update the data row with the new views
        $wpdb->query("UPDATE {$ppbv_total} SET views='{$new_views}' WHERE post_id='{$post->ID}';");           
    else: // if we don't have a matching data row (nobody's viewed the post yet)
        // add a new data row into the DB with the post ID and 1 view  
        $wpdb->query("INSERT INTO {$ppbv_total} (post_id, post_type, views) VALUES ('{$post->ID}','{$post->post_type}','1');"); 
    endif;
endif;

Si quelqu'un pouvait nous éclairer à ce sujet, je l'apprécierais grandement!

4
dkmojo

Cela ressemble au navigateur de pré-extraction, voir WordPress Core Tickets # 12603 , # 14382 , et # 20192 .

En gros, parfois, certains navigateurs voient ce que le prochain post est et décident de continuer et de le charger pendant que vous lisez celui-ci. Ainsi, lorsque vous passez au prochain message, il se charge immédiatement, au lieu d’attendre. L'inconvénient, comme vous l'avez constaté dans ce cas, est que cela a parfois des effets inattendus si l'utilisateur ne voit pas l'autre message.

1
J.D.
$location = $_SERVER[‘DOCUMENT_ROOT’];

include ( $location . '/wp-config.php' );
include ( $location . '/wp-load.php' );

global $wpdb;
$contactus_table = $wpdb->prefix."user";
if( isset( $_POST['submit'] ) ) {   
    $name=$_POST['name'];
    $email=$_POST['email'];
    $phone=$_POST['phone'];
    $message=$_POST['message'];

    $sql = "INSERT INTO $contactus_table        
        (`name`,`email`,`phone`,`message`)VALUES        
        ('$name','$email','$phone','$message')";

    if( $wpdb->query( $sql ) ) {
        echo "data is inserted";
    }
}
0
ANKUSH POFALE