2013-11-10 3 views
1

У меня есть код PHP, который получает номер id, а затем проверяет, существует ли идентификатор в базе данных. Если идентификатор в базе данных она вторит Item Added, если не это отголоски That id is not validЕсли оператор возвращает else независимо

(ну по крайней мере, это то, что он должен делать!)

Прямо сейчас это вторит из Item Added независимо.

$action = $_GET['action']; 
$id  = $_GET['id']; 

if ($action == 'add') { 

    // Check if the id matches one in the database 
    $result = mysqli_query($con,"SELECT COUNT(*) FROM items WHERE id='$id'"); 

    if ($result = 0) { 

     echo 'That id is not valid!'; 
    } 
    else { 

     echo 'Item Added'; 
    } 
} 

Мой URL для ГЭТ действий выглядит следующим образом:

../shopping-functions.php?action=add&id=977 

ответ

2

Как указывали другие, вы используете оператор присваивания вместо сравнения в своем статусе if, т. Е. Используете = вместо ==. К сожалению, это не единственная ошибка.

mysqli_query возвращает ресурс MySQL, поэтому просто сравнение его с 0 будет недействительным, если только запрос не завершится неудачно. Вместо этого вам нужно посмотреть фактические данные результата из возвращаемого объекта ресурса. Простейшее решение будет:

if ($action == 'add') { 

    // Check if the id matches one in the database 
    $result = mysqli_query($con,"SELECT id FROM items WHERE id='$id'"); 
    if (mysql_num_rows($result) == 0) { 

     echo 'That id is not valid!'; 
    } 
    else { 

     echo 'Item Added'; 
    } 
} 

Так вместо того, чтобы выбрать количество записей с конкретным идентификатором, вы просто выбрать сам идентификатор, если он существует, а затем считать результаты, которые вы получите обратно.

О несвязанной ноте: ваш код также неприменим к MySQL-инъекциям, и вместо этого вы должны использовать подготовленные операторы.

+0

Спасибо! Примите, как только смогу. – user2948950

4

= присваиванию

== является сравнение.

Изменение:

if ($result = 0) { 

в

if ($result == 0) { 

Обновление:

Кроме того, необходимо получить количество строк из запроса правильно, как:

$result = mysqli_query($con,"SELECT * FROM items WHERE id='$id'"); 
$row_cnt = mysqli_num_rows($result); 
if ($row_cnt == 0) { 
+0

Почему downvote? – j08691

+0

И 0 приравнивается к 'false', поэтому почему выполняется инструкция' else'. – helion3

+0

Он все еще возвращает результат else, независимо от того, – user2948950

0
if ($result = 0) { 

     echo 'That id is not valid!'; 
    } 

является присвоение результата, вам нужно использовать if($result == 0)

1

Вы можете использовать это:

$action = $_GET['action']; 
$id = $_GET['id']; 
if($action == 'add') { 
// Check if the id matches one in the database 
$result = mysqli_query($con,"SELECT COUNT(*) FROM `items` WHERE `id`='$id'"); 
$row = $result->fetch_row(); 
if($row[0] == 0) { 
echo 'That id is not valid!'; 
} 
else { 
echo 'Item Added'; 
} 
} 

Вы проверяли его с тузд ресурсом до, который был неправильно. Кроме того, вы использовали оператор присваивания (=), а не оператор сравнения (==), как и каждый из них.

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