Php 如何';拆分';在表单的文本字段中输入单词,并根据数据库查询每个单词
在index.php中,我有一个表单,在表单中有一个文本字段:Php 如何';拆分';在表单的文本字段中输入单词,并根据数据库查询每个单词,php,mysql,html,sql,forms,Php,Mysql,Html,Sql,Forms,在index.php中,我有一个表单,在表单中有一个文本字段: <form name="UserSearch" action="petSearch.php" method="GET"> <input type="text" name="petWish" value="" /> </form> 用户在文本框中输入他们想要的宠物(用逗号分隔),例如狗、猫、鱼、蛇 在petSearch.php中,我使用以下函数创建可在SQL语句中使用的合法SQL字符
<form name="UserSearch" action="petSearch.php" method="GET">
<input type="text" name="petWish" value="" />
</form>
用户在文本框中输入他们想要的宠物(用逗号分隔),例如狗、猫、鱼、蛇
在petSearch.php中,我使用以下函数创建可在SQL语句中使用的合法SQL字符串:
<?php
$userPetWish = mysqli_real_escape_string($link, $_GET["petWish"]);
?>
然后我创建SQL语句并查询MySQL数据库:
<?php
$query="SELECT petType, name, age FROM pets WHERE petType LIKE '%".$userPetWish."%'";
$result = mysqli_query($link, $query);
if($result)
{
while($row = mysqli_fetch_array($result))
{
echo "From the pets you entered we have" . $row[petType] . "," . $row[name] . "," . $row[age];
}
}
else
{
echo "Sorry we do not have any of your chosen pets in store";
}
?>
您可以使用
explode( ',', $userPetWish )
把单词分开
还有一个我会用到的注释
echo 'From the pets you entered we have' . $row['petType'] . ',' . $row['name'] .
',' . $row['age'];
而不是在$行中没有引号
另外,如果您使用的是LIKE,则最好是删除斜杠删除斜杠($userPetWish),否则您将在查询中获得斜杠并可能破坏它(可能是错误的,正如我所经历的)您可以使用
explode( ',', $userPetWish )
把单词分开
还有一个我会用到的注释
echo 'From the pets you entered we have' . $row['petType'] . ',' . $row['name'] .
',' . $row['age'];
而不是在$行中没有引号
另外,如果你使用了LIKE,那么你最好去掉斜杠strip\u slashes($userPetWish),否则你将在查询中得到斜杠并可能破坏它(可能是错误的,正如我所经历的)1。您可以尝试对查询使用匹配。
$petArray = explode(',', $userPetWish);
$query = "SELECT petType, name, age FROM pets MATCH (petType) AGAINST ('".implode("','", $petArray)."')";
$result = mysqli_query(....
结果查询应如下所示:
SELECT petType, name, age FROM pets MATCH (petType) AGAINST ('cat', 'dog', 'fish')
请注意,要使其起作用,您应该在petType列上创建全文索引。()
2。实现这一点的另一种方法是使用您熟悉的类似搜索
$petArray = explode(',', $userPetWish);
$query = "SELECT petType, name, age FROM pets WHERE ";
$queryTemp = "";
foreach ($petArray as $pet) {
if($queryTemp!=''){
$queryTemp += ' OR ';
}
$queryTemp += " petType LIKE '%".$pet."%' ";
}
$query += $queryTemp;
$result = mysqli_query(....
1。您可以尝试对查询使用匹配。
$petArray = explode(',', $userPetWish);
$query = "SELECT petType, name, age FROM pets MATCH (petType) AGAINST ('".implode("','", $petArray)."')";
$result = mysqli_query(....
结果查询应如下所示:
SELECT petType, name, age FROM pets MATCH (petType) AGAINST ('cat', 'dog', 'fish')
请注意,要使其起作用,您应该在petType列上创建全文索引。()
2。实现这一点的另一种方法是使用您熟悉的类似搜索
$petArray = explode(',', $userPetWish);
$query = "SELECT petType, name, age FROM pets WHERE ";
$queryTemp = "";
foreach ($petArray as $pet) {
if($queryTemp!=''){
$queryTemp += ' OR ';
}
$queryTemp += " petType LIKE '%".$pet."%' ";
}
$query += $queryTemp;
$result = mysqli_query(....
谢谢ashley,我检查了explode函数,它看起来很有希望。还有,你为什么不在echo语句中使用“xxxx”呢?你说的“去掉斜杠”是什么意思?最好使用单引号,因为你编写的代码越多,你就越意识到这是多么容易。您不必对某些内容执行恼人的反斜杠,对于剥离斜杠,只需使用$userPetWish=strip\u斜杠($userPetWish);在你离开后,谢谢。在我尝试之前,如果用户输入50只宠物的列表,我是否只需要在使用like函数查询数据库时使用相同的一个变量$userPetWish
,或者我是否需要创建一个for循环,并在拆分/分解后为每个宠物创建一个新变量?因为当我做…像“%”“%$userPetWish.”“%”这样的宠物类型时,
它怎么知道搜索50种宠物类型中的每一种,而不是将其作为一个长字符串作为宠物类型呢?谢谢ashley,我检查了explode函数,它看起来很有希望。还有,为什么不使用“xxxx”在echo语句中?你说的“去掉斜杠”是什么意思?使用单引号是更好的做法,因为你编写的代码越多,你就越意识到这是多么容易。您不必对某些内容执行恼人的反斜杠,对于剥离斜杠,只需使用$userPetWish=strip\u斜杠($userPetWish);在你离开后,谢谢。在我尝试之前,如果用户输入50只宠物的列表,我是否只需要在使用like函数查询数据库时使用相同的一个变量$userPetWish
,或者我是否需要创建一个for循环,并在拆分/分解后为每个宠物创建一个新变量?因为当我做…像“%”“%$userPetWish.”“%”这样的宠物类型时;
它怎么知道要搜索50个单独的宠物类型中的每一个,而不是将其作为一个长字符串作为宠物类型?