【问题标题】:PHP Simple Search ResultPHP 简单搜索结果
【发布时间】:2014-08-19 05:40:59
【问题描述】:

我是 php 新手,在尝试从 access 数据库中获取结果后,我在获取要返回的搜索结果时遇到问题。任何人都可以发现以下代码的任何明显问题吗?我希望它搜索书籍数据库(表中有作者和标题)并返回作者/书名。任何帮助深表感谢!谢谢!

        <body>
<div id="wrapper">
<div id="content">
<h1>Search for a book</h1>
 <p>You  may search by author or title</p> 
        <form  method="post" action="assignment3.php"  > 
          <input  type="text" name="search"> 
          <input  type="submit" name="submit" value="Search"> 
        </form> 
        <br />

<?php 
        if(isset($_POST['submit'])){
        echo "<h2>Search Results</h2>";
        $author=filter_input (INPUT_POST, 'author');
        $title=filter_input (INPUT_POST, 'title');
        $conn = new COM("ADODB.Connection") or die ("Cannot start ADO");
        $connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data        Source="assignment3.mdb"; //connect to database  

        $conn->open($connString);

        $search_data("SELECT author, title FROM AuthorTitle WHERE author LIKE '%".$_POST['search']."%') OR title LIKE '%".$POST['search']."%'");

        if(($search_data)!=0){
        $rs=$searchquery;
        }

        ?>
<?php if(($searchquery)!=0) {
        do { 
        echo "<p>'.$author.' ',' '.$title.'</p>";

        } while ($rs=($searchquery));
}
        else {
                echo "No results.";
        }
}//end if

?>

</div> <!--end content-->
</div> <!--end wrapper-->

</body>
</html>

【问题讨论】:

  • $search_data("SELECT author, title FROM AuthorTitle WHERE author LIKE '%".$_POST['search']."%') OR title LIKE '%".$POST['search']."%'"); 你到底想在这里做什么?这对我来说似乎完全错误。而这里$connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="assignment3.mdb"; //connect to database 也是错误的,因为您忘记正确分隔字符串。如果你检查这里的语法高亮,你会发现问题。
  • 谢谢 - 终于让它工作了!
  • 请选择一个答案以关闭此主题

标签: php ms-access search


【解决方案1】:

第一件事是您没有正确括住括号。尝试改变

 $search_data("SELECT author, title FROM AuthorTitle WHERE author LIKE '%".$_POST['search']."%') OR title LIKE '%".$POST['search']."%'");

这个到

$search_data("SELECT author, title FROM AuthorTitle WHERE author LIKE '%".$_POST['search']."%' OR title LIKE '%".$POST['search']."%'");

另一件事是您没有正确使用引号。改变

 $connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data        Source="assignment3.mdb";

这个到

 $connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data        Source='assignment3.mdb'";

希望对你有帮助

【讨论】:

  • 不客气,但请选择正确的答案
【解决方案2】:

伙计们 - 这是我用来让它工作的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Book Search</title>

<link href="assignment2.css" rel="stylesheet" type="text/css" />

</head>

<body>
<div id="wrapper">
<div id="content">
<h1>Search for a book</h1>
 <p>You  may search by author or title</p> 
        <form  method="post" action=""  > 
          <input  type="text" name="search"> 
          <input  type="submit" name="submit" value="Search"> 
        </form> 
        <br />

<?php 


$conn = new COM("ADODB.Connection") or die("Cannot start ADO");

$connString= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\assignment3.mdb";

//creates the connection object and define the connection string



$conn->Open($connString);
$searchquery = filter_input(INPUT_POST, 'search');
$selectCommand="SELECT * FROM AuthorTitle WHERE  title LIKE '%$searchquery%' OR author LIKE '%$searchquery%'";

if(isset($_POST['search'])){
$rs = $conn->Execute($selectCommand);

//opens a recordset from the connection object


if (!$rs->EOF){

$selectCommand=$rs->Fields("ProductID");
$author=$rs->Fields("author");
$title=$rs->Fields("title");

echo "<h1>Search Result for '<b>$searchquery</b>':</h1>
<p><b>$title</b>, $author is available for checkout.</p><br />";

}

else

print "No results found.<br /><br />";



$rs->Close;
}
?>



</div> <!--end content-->
</div> <!--end wrapper-->

</body>
</html>

【讨论】: