2017-01-03 2 views
0

Я предисловие к этому, сказав, что я застрял на этом пару дней, я, очевидно, новичок и знаю, что мне не хватает чего-то простого. Я пробовал так много способов. Безопасность еще не проблема, и я просто пытаюсь учиться на своем собственном сервере.Проверьте, существует ли значение в базе данных?

Я всегда получаю «что-то найденное», даже когда знаю, что значение не существует. Я пытаюсь ввести фразу в поле ввода, нажмите «Отправить» и посмотрите, существует ли значение в таблице

Извините за немой вопрос.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
// error_reporting(0); 
// ini_set('display_errors', 0); 
// exit(); 
//echo '<pre>'; print_r($user_info); echo '</pre>'; 

if ((isset($_POST['lookup'])) && ($_REQUEST['lookup'] =='1')) { 
    echo 'you\'ve entered a keyword, lets see if it exsists!'; 
    $looksql = "SELECT * FROM `crm3`.`keywords` WHERE `KW0` LIKE '".$_POST['lookup']."' ORDER BY `ID` ASC "; 
    if ($result = mysqli_query($db, $looksql)) { 
     echo '<br>someting found'; 
    } else { echo '<br>nothing found'; } 
} else { 
    echo '<br>please enter a keyword to start the search'; 
} 
?> 

<br><br><br> 
<form method="POST" action="./?action=kwcheck"> 
    <input type="hidden" name="lookup" value="1" /> 
    keyword lookup: <input type="text" name="keyword" /><br> 
    <input type="submit" value="SEARCH" /> 

ответ

2

Вы сделали почти все правильно, кроме состояния. Ваше состояние всегда дает истинное значение . Оно должно быть:

// Query the MySQL server. 
$result = mysqli_query($db, $looksql); 
if (mysqli_num_rows($result)) { 
    // Rows are there. 
    echo '<br>someting found'; 
} else { 
    // No rows are there. 
    echo '<br>nothing found'; 
} 

Если вы хотите функционал, вы можете создать функцию, которая возвращает логическое значение: true, если найдены предметы, false, если нет.

function recordsCount($looksql) { 
    // Get the connection from global scope. 
    global $db; 
    // Query the MySQL server. 
    $result = mysqli_query($db, $looksql); 
    // Return if the count is greater than 0 or not. 
    return (mysqli_num_rows($result) > 0); 
} 

относится Безопасность: Использование параметризация запросов. Помещение $_POST (или любой пользовательский ввод $_GET, $_COOKIE и т. Д.) В запросе открывает вам SQL-инъекции. Также, если вы хотите, чтобы точное совпадение использовало =, а не LIKE. LIKE должен быть для частичного сопоставления и использования подстановочных знаков (%). Благодаря chris85.

+1

спасибо, теперь он работает! –

+0

Я все еще получал ошибку, потому что мой запрос был неправильным, это должно было быть: 'code' $ _POST ['keyword'] вместо $ _POST ['lookup']' code' Возможно, я могу сделать это за один шаг дальше и показать мне ID строки результата? –

+0

@DavidWatson Да, вы правы ... –

0

Вы сделали неправильно

if ($result = mysqli_query($db, $looksql)){// this is always true as query will be executed always  
    echo '<br>someting found';  
} 

выше код выполняется всегда, потому что это как если запрос выполняется, то таким образом эхо-сообщение и поэтому, если условие всегда верно попытка ниже код

$result = mysqli_query($db, $looksql);  
if (mysqli_num_rows($result)) { 
    echo '<br>someting found'; 
} 
+0

Как это отличается или лучше, чем мой ответ? Просто любопытно. –

+0

@PraveenKumar Я ничего не сказал, что ваш ответ неправильный или что-то еще – user1234

+0

Вы могли бы иметь хотя бы отформатированный или отступы код. –

-1

Вы можете попробовать это:

$looksql = "SELECT * FROM `crm3`.`keywords` WHERE `KW0` LIKE '%".$_POST['lookup']."%' ORDER BY `ID` ASC "; 

использование % после like

+1

Это не объясняет, почему OP получает результаты. Это может быть ответ, если ОП не получат результатов. – chris85

+0

Да! и спасибо, я пропустил $ result = mysqli_query ($ db, $ lookql) просто возвращает объект результата –

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