【问题标题】:How to search by tagnames with a comma between every search term with php如何使用 php 在每个搜索词之间用逗号搜索标记名
【发布时间】:2017-09-19 17:11:50
【问题描述】:

我想在每个搜索词之间用逗号搜索标签。如果表格行中存在一个或多个术语,则会发布结果。但是我不能在每个术语之间用逗号处理它。是否有捷径可寻?请仅在您对我的问题有一些建议时回复。

//HTML
<form method="POST" action="actionpage.php">
<input type="text" name="searchterm" value="**To be submitted with a comma between every tag  name**" />
<input type="submit" value="Submit">
</form>


//PHP
$tagname = [];
$tagname[] = $_POST['searchterm'].",";
$tagname[] = $_POST['searchterm'].",";
$tagname[] = $_POST['searchterm'].",";


// MySQL
query = "SELECT * FROM list where tags = $tagname";


// Database table list
id----------tagname
1           tag1,
1           tag2,
1           tag5,
2           tag2,
2           tag3,
3           tag1,
4           tag4,
4           tag1, etc...

【问题讨论】:

  • 有点不清楚。数据库中的一行可以有多个标记名吗?如果是,它们是否用逗号分隔?如果只有一个,标记名末尾是否还有逗号?
  • 据我所知,您没有任何名为searchterm1searchterm2 等的表单元素,而只有一个名为searchterm 的字段?为什么数据库中的标签后面有逗号?您数据库中的id 是什么?
  • 我现在做了一些改变。我希望我更接近我想问的问题。
  • 不是。 cmets中仍有一些悬而未决的问题。顺便说一句,代码是您的实际代码还是只是为了我们的利益的伪代码?
  • @Magnus,这只是一个伪解释我想要实现的目标。我想从提交的标记名中获取结果。

标签: php search input tags


【解决方案1】:

我希望您正在寻找的是 php 'explode' 和 'implode'。

// 从 searchterm 中获取标签数组 $tagname = explode(',', $_POST['searchterm']);

我没有测试以下内容,但它会让您了解需要做什么。如果没有提供标签,查询将失败。

$query = "SELECT * FROM list where tags in ('" . implode('\',\'', $tagname) . "')";

【讨论】:

  • 这正是我想要的。我希望它有效。谢谢!
  • 我只想指出,这段代码对SQL Injections 是开放的,应该真正使用Prepared Statements。特别是因为用户输入根本没有转义! 从不相信任何形式的用户输入。
猜你喜欢
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多