Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何';拆分';在表单的文本字段中输入单词,并根据数据库查询每个单词_Php_Mysql_Html_Sql_Forms - Fatal编程技术网

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字符

在index.php中,我有一个表单,在表单中有一个文本字段:

<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个单独的宠物类型中的每一个,而不是将其作为一个长字符串作为宠物类型?