2013-07-26 126 views
0

我想做一个简单的PHP,SQL搜索引擎,将从我的数据库中选择“LIKE”关键字(查询)并显示它的所有内容。但它不会工作。它只显示文字“问题”(见第32行),经过几个小时的排除故障后,我仍然无法弄清楚。简单的PHP/SQL搜索引擎

<!doctype html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Search Engine Test</title> 
</head> 
<body> 
<script language="php"> 
// Create a database connection 
$connection = mysql_connect("*****","*****","*****"); 
if (!connection) { 
    die ("Please reload page. Database connection failed: " . mysql_error()); 
} 

// Select a databse to use 
$db_select = mysql_select_db("*****",$connection); 
if (!$db_select) { 
    die("Please reload page. Database selection failed: " . mysql_error()); 
} 

// Search Engine 
// Only execute when button is pressed 
if (isset($_POST['search'])) { 
// Filter 
//$keyword = trim ($keyword); 
echo $keyword; 
// Select statement 
$search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"); 
// Display 
$result = @mysql_query($search); 
if (!$result){ 
echo "problem"; 
exit(); 
} 


while($result = mysql_fetch_array($search)) 
{ 
echo $result['cause_name']; 
echo " "; 
echo "<br>"; 
echo "<br>"; 
} 
$anymatches=mysql_num_rows($search); 
if ($anymatches == 0) 
{ 
echo "Nothing was found that matched your query.<br><br>"; 
} 
} 
</script> 
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
<input type="text" name="keyword"> 
<input type="submit" name="search" value="Search"> 

</body> 
</html> 

回答

1

尝试改变:

if (isset($_POST['search'])) { //$_POST['search'] just tells that there are a submit-button when submitting (and the name of it) 
// Filter 
//$keyword = trim ($keyword); 
echo $keyword; //You're echoing out value of $keyword which hasn't been set/assigned 
// Select statement 

//You're always searching for the word keyword with leading and/or trailing characters 
//You're not searching for a dynamically assigned value which I think is what you want 
$search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"); 

//You're executing an already defined query (assigned in $search) 
$result = @mysql_query($search); //You're suppressing errors, it's bad practice. 
if (!$result){ 
echo "problem"; 
exit(); 
} 

到:

if (isset($_POST['keyword'])) { 
// Filter 
$keyword = trim ($_POST['keyword']); 

// Select statement 
$search = "SELECT * FROM tbl_name WHERE cause_name LIKE '%$keyword%'"; 
// Display 
$result = mysql_query($search) or die('query did not work'); 

重要! <script language="php">无效。你应该在php-code的开头输入<?php,然后输入?>来结束php代码。

UPDATE: 你也必须改变这种代码:

while($result = mysql_fetch_array($search)) 
    { 
    echo $result['cause_name']; 
    echo " "; 
    echo "<br>"; 
    echo "<br>"; 
} 
$anymatches=mysql_num_rows($search); 
if ($anymatches == 0) 
{ 
    echo "Nothing was found that matched your query.<br><br>"; 
} 
} 

TO:

while($result_arr = mysql_fetch_array($result)) 
{ 
echo $result_arr['cause_name']; 
echo " "; 
echo "<br>"; 
echo "<br>"; 
} 
$anymatches=mysql_num_rows($result); 
if ($anymatches == 0) 
{ 
    echo "Nothing was found that matched your query.<br><br>"; 
} 
} 

当制作新的代码,你真的不应该使用mysql_功能*,因为它们已被弃用。改为观察PDO或mysqli。

+0

当我改变你的建议时,它仍然不起作用,只是输出消息“找不到匹配的内容你的查询“:(同时,在第33行和第40行上都出现了PHP错误消息,说”提供的参数不是有效的MySQL结果资源“。这些行是你提出的改变后发生的事情。第33行是”while($结果= mysql_fetch_array($ search))“和40是”$ anymatches = mysql_num_rows($ search);“可能只是试图重写搜索代码 – Tim

+0

注意:当我登录phpMyAdmin并在我的数据库上运行SQL查询选择所有原因名称就像关键字(我只是输入关键字)的所有东西,所以我知道问题不在数据库不工作或我的表中的数据缺失 – Tim

+0

@ user2 6243491 - 这是因为$ search只是一个包含sql语句的字符串,并不是查询的实际结果。我已经更新了我的答案,所以你可以看到你需要做些什么来实现它。 – bestprogrammerintheworld

1

扩大你的代码中,我们可以看到:

$result = @mysql_query($search); 

变为:

$result = @mysql_query(mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'")); 

这并没有太大的意义。

更改第一行:

$search = "SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'" 

或者,而不是分配$search一个价值可言,只是跳到分配$result$search目前拥有的价值。

编辑:帮你解释:

更改此:

$search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"); 
// Display 
$result = @mysql_query($search); 
if (!$result){ 
    echo "problem"; 
    exit(); 
} 

这样:

$result = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"); 
// Display 
if (!$result){ 
    echo "problem"; 
    exit(); 
} 
+0

我不完全明白你在说什么(我对此很新),因为这仍然行不通。谢谢您的回答。 – Tim

+0

人们通常会创建SQL(这是'SELECT * FROM tbl_name WHERE cause_name LIKE'%keyword%'')并将其分配给像'$ search'这样的变量。然后,他们创建另一个变量,比如'$ result',给它赋值'mysql_query($ result)'。在你的情况下,你正在用一个'mysql_query()'函数和另一个'mysql_query()'函数,这是不正确的。 –

+0

检查我的编辑是否有其他解释。 –