2013-08-10 7 views
0

Прежде чем вы скажете, что ответ был до этого, я все испробовал буквально.Подсчет строк с условиями?

Я пытаюсь подсчитать количество строк в запросе mysqli с двумя предложениями WHERE.

if (isset($_POST['member_name']) and isset($_POST['memeber_password'])) { 
    $member_name_input = mysqli_real_escape_string($query, $_POST['member_name']); 
    $member_password_input = mysqli_real_escape_string($query, $_POST['member_password']); 

    $result = mysqli_query($query, "SELECT count(*) AS member_count FROM `members` WHERE `member_name` = '$member_name_input' AND `member_password` = '$member_password_input'") or die(mysqli_error($query)); 
    $counter = $row['member_count']; 

    if ($counter = 1) { 
     $result = mysqli_query($query, "SELECT * FROM `members` WHERE `member_name`='$member_name_input' AND `member_password`='$member_password_input'") or die(mysqli_error($query)); 
     $row = mysqli_fetch_array($result); 
     $member_suspended = $row['member_suspended']; 
     $member_validation = $row['member_validation']; 
    } 

    if ($member_suspended < time() and $member_validation = 2) { 
     $_SESSION['member_id'] = $row['member_id']; 
     echo $counter; 
    } elseif ($member_suspended >= time()) { 
     $suspension_date = date('d. m. y.', $member_suspended); 
     echo '<div class="left_container"><h3>You are suspended until '.$suspension_date.'.</h3></div>'; 
    } elseif ($member_validation = 1) { 
     echo '<div class="left_container"><h3>Your account has not been confirmed, yet.</h3></div>'; 
    } else { 
     echo '<div class="left_container"><h3>Login unsuccessful.</h3></div>'; 
    } 
} 

Моя проблема заключается в том, что при попытке входа в систему с неверным паролем и/или имя пользователя (комбинация не существует в таблице), $ счетчик еще один, и он отвечает требованиям, предъявляемым к первой, если заявление.

Я пробовал считать строки разными способами, ни одна из которых не работала.

Некоторые другие попытки были:

$counter = 0; 
while ($row = mysqli_fetch_array($result)) { 
++$counter; 
} 

и

$counter = mysqli_num_rows($result); 

Я просто пытаюсь придумать способ войти своим пользователям в успешно, и сообщения об ошибках, показать недопустимые попытки входа в систему.

Спасибо, что нашли время, чтобы прочитать это и попытаться помочь. :)

ответ

1
if ($counter = 1) { 

Это всегда = 1, полагаю, вы имеете в виду

if ($counter == 1) { 
+0

Большое вам спасибо, я не могу поверить, что совершил такую ​​глупую ошибку. Работает как шарм. :) – Tamaki

+0

это происходит :) - не забудьте отозвать вары при поиске и устранении неисправностей. $ counter повторил бы «1», и тогда вы можете сделать что-то вроде изменения запроса или другого var, и все равно будет 1, и вы знаете, что это не запрос. он не всегда показывает, но часто помогает – James

0

Вам нужно выбрать строку из результата, прежде чем вы можете установить счетчик.

Изменить

$result = mysqli_query($query, "SELECT count(*) AS member_count FROM `members` WHERE `member_name` = '$member_name_input' AND `member_password` = '$member_password_input'") or die(mysqli_error($query)); 
$counter = $row['member_count']; 

Для

$result = mysqli_query($query, "SELECT count(*) AS member_count FROM `members` WHERE `member_name` = '$member_name_input' AND `member_password` = '$member_password_input'") or die(mysqli_error($query)); 
$row = mysqli_fetch_assoc($result); 
$counter = $row['member_count']; 
0

Следующий запрос отлично работает для меня:

SELECT COUNT (*) AS MEMBER_COUNT FROM members WHERE member_name = '$ member_name_input' И member_password = «$ member_password_input '

resturns 0, если соответствующая запись не найдена else, возвращается количество совпадающих записей.

Смежные вопросы