2011-03-25 200 views
0

我想向我的網站添加搜索功能。現在它非常簡單,搜索只是使用select從MySQL中獲取結果。問題是,當我在本地主機上測試它時,搜索功能非常好,但當我將它放到服務器上時,搜索功能根本無法工作。當它被使用時,它只是選擇整個數據庫。我相信問題是變量沒有傳遞到搜索結果頁面,但我不知道。搜索功能適用於本地主機,但不適用於服務器

下面是搜索框的代碼。這是所謂的「header.php中」引用的文件:

<html> 
<head> 

<body> 
<div class="title"><img style="width:100%;" src="title.gif" /></div> 
<div class="search">Search: 
<form style="display:inline" name="search" action="search.php" method="get"><?php echo"   <input type='text' name='query' />";?> 
<a href="javascript: searchSubmit()"><img src="seo.png" alt="Search" title="Search" /> </a></form></div> 
<ul class="menu"> 
<li><a href="index.php#home">home</a></li> 
<li><a href="submit.php?title=&desc=">post an idea</a></li> 
<li><a href="#about">about us</a></li> 
<li><a href="#contact">contact us</a></li> 
<li><a href="login.php">log in</a></li> 
</ul> 

</body> 
</html> 

,這裏是從的search.php代碼:

<?php 
$search=$_GET['query']; 
$search=mysql_real_escape_string($search); 
?> 
<html> 
<head> 
<?php 
echo "<title>Search: $search</title>"; 
?> 
<link rel="stylesheet" type="text/css" href="mainstyle.css" /> 
<script type="text/javascript" src="validate.js"></script> 
</head> 
<body> 
<div class="title"><img style="width:100%;" src="title.gif" /></div> 
<div class="search">Search: 
<form style="display:inline" name="search" action="search.php" method="get"><?php echo" <input type='text' name='query' value='$search'/>";?> 
<a href="javascript: searchSubmit()"><img src="seo.png" alt="Search" title="Search" /></a></form></div> 
<ul class="menu"> 
<li><a href="index.php#home">home</a></li> 
<li><a href="submit.php?title=&desc=">post an idea</a></li> 
<li><a href="#about">about us</a></li> 
<li><a href="#contact">contact us</a></li> 
<li><a href="login.php">log in</a></li> 
</ul> 
<?php 

mysql_connect("localhost","root","root") or die(mysql_error()); 
mysql_select_db("date_ideas") or die(mysql_error()); 

$result=mysql_query("SELECT * FROM ideas WHERE title LIKE '%".$search."%' ORDER BY post_date DESC"); 
echo "SELECT * FROM ideas WHERE title LIKE '%".$search."%' ORDER BY post_date DESC"; 

echo "<span id='none'>"; 
while($row = mysql_fetch_array($result)) 
{ 
$id=$row['id']; 
echo "<h2 class='center'><a href='ideaview.php?id=$id' title='View ".$row['title']."  Description'>" . $row['title'] . "</a><br/>"; 
echo "<span class='date'>"; 
$date=$row['post_date']; 
$time=time(); 

if (($time-$date)<120) 
{ 
echo "Posted 1 minute ago"; 
} 

else if (($time-$date)>120&&($time-$date)<3600) 
{ 
$minutes=($time-$date)/60; 
echo ("Posted " . round($minutes) . " minutes ago"); 
} 
else if (($time-$date)>3600&&($time-$date)<7200) 
{ 
echo "Posted 1 hour ago"; 
} 
else if (($time-$date)<86400&&($time-$date)>7200) 
{ 
$hours=($time-$date)/3600; 
echo ("Posted " . round($hours) . " hours ago"); 
} 
else if (($time-$date)<172800&&($time-$date)>86400) 
{ 
echo "Posted 1 day ago"; 
} 
else 
{ 
echo ("Posted on " . date("m-d-y",$date)); 
} 
echo "</span></h2>"; 
} 
echo "</span>"; 
?> 

<script type="text/javascript"> 
document.getElementById("none"); 
if (none.innerHTML == "") 
{ 
none.innerHTML="<p class='center'>There are no ideas matching your search</p>"; 
} 
</script> 
</body> 
</html> 

最後,下面是用於提交表單的JavaScript代碼:正如我所說的,當我在我的電腦上使用它在本地主機上時,它完美地工作,只返回標題匹配搜索的行。但是,當我將它放在服務器上時,它將返回表中的所有行。

+0

請提供完整的和格式化的代碼 – strauberry 2011-03-25 16:20:04

+0

您不給'searchSubmit()'的正文,這是很重要的。 – Jon 2011-03-25 16:23:24

+0

好的,對不起,我是新手,我認爲較少的代碼會更容易閱讀。我會發布完整的代碼。 – FrizbeeFanatic14 2011-03-25 16:28:47

回答

0

我看不到中給出的任何代碼,將導致此。我認爲你的分析是正確的;我想像$_GET['query']由於某種原因是空的。

通過對此進行明確檢查,可以使代碼更健壯一些:您希望這是一個錯誤情況,而不是「返回所有」情況。但除了確認你的理論之外,這不會徹底解決問題。

我唯一能想到的就是確保$_GET存在於您的服務器上;在PHP 4.1.0中是introduced,現在已經很久以前了。儘管如此,遠程服務器上的PHP很可能是古老的。

祝你好運!


更新

您使用mysql_real_escape_string,這requires a connection,你在建立連接之前。如果沒有,則嘗試使用在本地機器上運行的默認參數,但不會在您的[假定更安全]生產服務器上運行。

這導致轉義失敗,並且FALSE被寫入$query

只需使用mysql_escape_string這不需要連接。

+0

這不可能是問題,因爲我在另一個頁面上使用$ _GET並且工作正常。 – FrizbeeFanatic14 2011-03-25 16:39:14

+0

此外,我確實在頁面中添加了一個錯誤檢查,問題是這個變量是空的。 $ _GET不起作用。 – FrizbeeFanatic14 2011-03-25 16:49:44

+0

@Frizbee:看我的更新。 – 2011-03-25 22:23:14

1

嘗試印出查詢,看它是否正確注入$搜索值(如果搜索不爲空)

echo "SELECT * FROM ideas WHERE title LIKE '%".$search."%' ORDER BY post_date DESC"; 
+0

在localhost:「SELECT * FROM想法WHERE標題LIKE」%蘋果%'ORDER BY post_date DESC。'在服務器上:'SELECT * FROM ideas WHERE標題LIKE'%%'ORDER BY post_date DESC。'由於某些原因,它沒有正確傳遞變量。 – FrizbeeFanatic14 2011-03-25 16:27:03

+0

嘗試的print_r($ _ GET)看到所傳輸的數據 – strauberry 2011-03-25 16:42:07

+0

有趣的 - 它仍然會返回數組([查詢] =>想法)就像我的本地主機。爲什麼不把它傳遞給我想要使用的變量? – FrizbeeFanatic14 2011-03-25 16:55:51

相關問題