我将在前言中说我已经坚持了几天,我显然很新,并且知道我错过了一些简单的事情。我尝试了很多方法。安全性还不是问题,我只是想在自己的服务器上学习。
即使我知道价值不存在,我也总能得到“找到的东西”。我正在尝试在输入字段中输入一个短语,按提交并查看该值是否已存在于表
中抱歉这个愚蠢的问题。
<?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" />
答案 0 :(得分: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)
你做错了
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';
}
答案 2 :(得分:-1)
你可以试试这个:
$looksql = "SELECT * FROM `crm3`.`keywords` WHERE `KW0` LIKE '%".$_POST['lookup']."%' ORDER BY `ID` ASC ";
在%
like