web-dev-qa-db-fra.com

si déclaration sur la requête de base de données

Partie d'un script de vote sur lequel je travaille: Je vérifie un tableau personnalisé dans ma base de données WP pour voir si un utilisateur a déjà voté pour un message en vérifiant l'adresse IP et l'identifiant du message.

Si l'IP de l'utilisateur existe déjà pour le message sur lequel il a voté, je veux me faire écho "Déjà voté!" sinon, ajoutez l'adresse IP. C'est ce que je suis venu avec ..

global $wpdb;
$voter_ip = $_SERVER['REMOTE_ADDR']; 
$post_id = $_POST['post_id'];

if (!($wpdb->get_row("SELECT voter_ip FROM wp_voter_ips WHERE post_id = $post_id AND voter_ip = $voter_ip") ) ) { //if IP address for matching post id not found in wp_voter_ips table
$wpdb->insert( $wpdb->prefix . 'voter_ips', array( 'post_id' => $post_id, 'voter_ip' => $voter_ip ) ); //add IP and post_id
echo "voted!";
}
else //if IP already exists
{
echo "Already voted!";
}

J'ai vérifié trois fois pour m'assurer que les variables et les noms de colonne sont corrects. Indépendamment de la déclaration if, il insère l’adresse IP de l’électeur même quand elle existe déjà.

Sur votre if(), cela devrait être comme ceci:

if (!($wpdb->get_row("SELECT voter_ip FROM " . $wpdb->prefix . "voter_ips WHERE post_id = $post_id AND voter_ip = '$voter_ip'")

Notez le guillemet ajouté sur $voter_ip.

4
ariefbayu