我在php和phonegap工作。我正在使用url向php页面发送标题,歌曲类别。现在我想根据标题和类别选择歌曲,如果它们都在网址中提供。如果url仅提供标题,则必须仅根据标题进行搜索。如果url仅提供类别,则搜索必须仅作为类别的基础。
**this is code which i am trying**
$titletosearch = $_GET["title"];
$categorytosearch = $_GET["category"];
$artisttosearch = $_GET["artist"];
if($titletosearch !=" " && $titletosearch!=" ")
$rs = mysql_query("SELECT title,price,date,category FROM music where title like '%$titletosearch%' or category like '%$categorytosearch%' ") or die ("invalid query");
elseif($titletosearch =="" && $titletosearch!=" ")
$rs = mysql_query("SELECT title,price,date,category FROM music where category like '%$categorytosearch%' ") or die ("invalid query");
elseif($titletosearch !=" " && $titletosearch=="")
$rs = mysql_query("SELECT title,price,date,category FROM music where title like '%$titletosearch%' ") or die ("invalid query");
我的代码出现问题是每当我只在url中提供标题或类别时,它会搜索这么多记录。如果我提供标题和类别,它意味着它正常工作。如果没有给出任何一个,那么我提供了很多结果记录。
请帮助我如何处理这些条件。 ?
提前谢谢。
答案 0 :(得分:5)
最近的英语。见empty()
if (empty($_GET['title'])) { echo "It's Empty!!!"; }
除此之外,您应该使用HTML5中的required=
属性强制执行表单(如果您使用的是HTML5)和/或使用JavaScript来确保表单有效。
答案 1 :(得分:1)
1)而不是简单地获取$ _GET [“key”]总是将它包装在trim()方法中以消除任何额外的字符。
2)默认情况下,如果你说任何输入是空的,那么'%%'搜索会贪婪地匹配任何内容。您可以根据可用的输入构建SQL语句并使用TOP功能;例如:SELECT TOP 100 title,price .. etc.等,这将始终限制从后端返回的记录。 TOP通常是数据库中提供的构造,因此只需查找SELECT语句文档就可以了。
3)如果你遵循2),最后只会有一个mysql_query语句
祝你好运答案 2 :(得分:0)
$w = array();
if (!empty($_GET["title"])) {
$w[] = "title LIKE '%".mysql_real_escape_string($_GET["title"])."%'";
}
if (!empty($_GET["category"])) {
$w[] = "category LIKE '%".mysql_real_escape_string($_GET["category"])."%'";
}
// and so on
$where = '';
if (count($w)) $where = "WHERE ".implode(' AND ',$w);
$sql = "SELECT title,price,date,category FROM music $where";
$res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
答案 3 :(得分:-2)