2015-05-25 22 views
6

Mam następujący kod PHP, który jest przeznaczony do systemu głosowania aplikacji. Jest to aplikacja Q &, a użytkownik może głosować na pytania i odpowiedzi, które są publikowane.Jak sprawdzić, czy wynik zapytania SQL jest pusty przed wykonaniem innych zapytań w PHP

W moim kodzie php, najpierw sprawdzam, czy użytkownik głosował na konkretne pytanie. To będzie istniało w tabeli QVOTES, z adresem e-mail i identyfikatorem pytania, na które głosowano.

Podczas przeprowadzania tego sprawdzenia nie jestem pewien, jak sprawdzić, czy wynik $ jest zbiorem pustym, aby przesłać głos użytkownika, jeśli jeszcze nie głosował na pytanie.

Jak to działa? Cała pomoc jest bardzo doceniana.

<?php 

$con=mysqli_connect("127.2.1.1","S837","887","D887"); 
if (mysqli_connect_errno($con)) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$qid = $_POST['qid']; 
$email = $_POST['email']; 
$result = mysqli_query($con, "SELECT * FROM QVOTES WHERE QID = $qid AND EMAIL = '$email'"); 
if (!mysqli_num_rows($result)){ 
    if ($result = mysqli_query($con, "INSERT INTO QVOTES (QID, EMAIL) VALUES  ($qid, '$email')")) { 
      mysqli_query($con, "Update QUESTIONS SET VOTES = VOTES +1 WHERE  QID = $qid"); 
      echo "Update successful"; 
     } else{ 
      echo "Update unsuccessful"; 
     } 
      } else{ 
     echo "null";   
    } 
    mysqli_close($con); 
+0

Myślę, że twój stan jest zły. powiedziałeś, że jeśli użytkownik nie głosuje na pytanie, to wstaw tylko rekord. ale przez twój stan wydaje się po prostu odwrotnie? Czyż nie? –

+0

Również, w jaki sposób sprawdzasz, czy użytkownik zagłosował na pytanie, czy nie? ponieważ nigdzie w obrazie nie widzę identyfikatora użytkownika. dzięki –

+0

@antantkumarsingh identyfikator użytkownika to w rzeczywistości adres e-mail użytkownika. –

Odpowiedz

1

W rzeczywistości robisz to w niewłaściwy sposób. Spróbuj zrobić tak: -

<?php 

$con=mysqli_connect("127.2.1.1","S837","887","D887"); 
if (mysqli_connect_errno($con)) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$qid = $_POST['qid']; 
$email = $_POST['email']; 
$result = mysqli_query($con, "SELECT * FROM QVOTES WHERE QID = $qid AND EMAIL = $email") or die(mysqli_error($con)); // no need of extra quote 
if ($result->num_rows == 0){ // means no vote-up done till now 
    $result = mysqli_query($con, "INSERT INTO QVOTES (QID, EMAIL) VALUES ($qid, $email)")or die(mysqli_error($con)); // insert 
    if($result){ 
     echo "Vote Added successfully."; 
    } else{ 
     echo "Error occur while adding vote.Please try again."; 
    } 
} else{ 
    $result = mysqli_query($con, "Update QUESTIONS SET VOTES = VOTES +1 WHERE QID = $qid AND EMAIL = $email")or die(mysqli_error($con)); // upddate 
     if($result){ 
     echo "Vote updated successfully."; 
    } else{ 
     echo "Error occur while updating vote.Please try again."; 
    } 
} 
    mysqli_close($con); 

Uwaga: - zmienić wiadomość dla lepszego zrozumienia. Możesz zmienić według swojego życzenia. dzięki.

1

Jak sprawdzić, czy $ wynik jest zbiorem pustym?

Od docs:

Zwraca FALSE w przypadku porażki. Dla pomyślnych zapytań SELECT, SHOW, DESCRIBE lub EXPLAIN mysqli_query() zwróci obiekt mysqli_result. Dla innych udanych zapytań mysqli_query() zwróci TRUE (Ref)

Zastosowanie $result->num_rows jeśli $result nie jest FALSE;