2012-06-05 77 views
0

即時運行這個PHP腳本,並沒有得到我想要的結果。此刻它給我這個輸出在html表格中顯示php搜索結果

潛水坦克

邁克

0.00 450.00 5.00

2012-06-04十八時50分22秒

潛水坦克

liam

80.00 350.00 2.50

2012-06-04 19時00分09秒

顯示3個結果

水肺罐

約什

410.00 0.00 5.00

2012-06-04 19時00分09秒

其相當多,我想,除了顯示3個結果應該在年底,而不是最後一個條目之前顯示的線什麼。我需要做什麼來修復我的腳本?

<?php 
    $host = "localhost"; 
    $user = "root"; 
    $pass = null; 

    // ======================================== 
    $dbhost = @mysql_connect($host, $user, $pass) or die("Unable to connect to server"); 

    @mysql_select_db("divebay") or die("Unable to select database"); 

    $var = "scuba"; 
    $query = trim($var); 

    if(!isset($query)){ 
     echo "Your search was invalid"; 
     exit; 
    } //line 18 

    $sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'"; 

    $result = mysql_query($sql); 
    $numrows = mysql_num_rows($result); 
    mysql_close($dbhost); 

    if($numrows == 0){ 
     echo "Sorry, your search did not return any results"; 
    } 

    $i = 0; 

    while($i < $numrows){ 
     $row = mysql_fetch_array($result); 

     $ID = $row['ID']; 
     $name = $row['name']; 
     $owner = $row['owner']; 
     $holder = $row['holder']; 
     $start = $row['sprice']; 
     $current = $row['cprice']; 
     $instant = $row['iprice']; 
     $inc = $row['incprice']; 
     $image = $row['img']; 
     $time = $row['stime']; 
     $length = $row['duration']; 

     echo " 
      <?xml version = '1.0' encoding = 'utf-8'?> 
      <!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> 
       <title>searchdbresults</title> 
      </head> 

      <body> 
       <table style='width = 800px;'> 
        <tr style ='height = 200px;'> 
         <td style ='width = 200px;'></td> 

         <td style ='width = 300px;'> 
          <div style ='180px'> $name </div> 
          <div> $owner </div> 
         </td> 

         <td style='width =200px'> 
          <div style='height = 100px'> $current </div> 
          <div style='height = 50px'> $instant </div> 
          <div> $inc </div> 
         </td> 

         <td> $time </td> 
        </tr> 
     "; 

     $i++; 
    } 

    echo " 
       <tr> Displaying $numrows results</tr> 
      </table> 
     </body> 
     </html> 
    "; 
?> 
+0

當你使用內聯css樣式,你必須使用雙引號!

HamZa

+1

顯而易見的是,他正在使用=而不是:在style屬性中。 – Panagiotis

+1

@LiamWarnes認真,我覺得你應該去遵循一些教程讓HTML/CSS/PHP的基礎知識,代碼包含幾個(基本與大)錯誤...... – HamZa

回答

1

我無法評論,但在您的代碼中有幾個問題。

1日樣式必須雙引號

<div style="width:100%;"> 

例如。

第二:必須有這條線TR內TD:顯示numRows行$結果

和最後一個我看到的是:你有這樣的:

<?xml version = '1.0' encoding = 'utf-8'?> 
<!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> 
<title>searchdbresults</title> 
</head> 
<body> 

while循環裏面,所以它在你的頁面中有好幾次,而且它不可能是

你也可以在while循環中打開表格,但不能關閉。所以它打開了幾次,但只打開一次。

編輯:您還需要添加保護到SQL查詢

+0

歡呼芽,幫一幫 – Bundy

0

我認爲你會好得多,如果你分開你的PHP和HTML到單獨的文件。你似乎失去了對你的開放「關閉」的軌道。如果你想要你的頁面底部的

<tr> Displaying $numrows results</tr> 

,然後把它從表格中取出。

0

我建議簡化您的表一點點,也許走的是「$顯示結果numRows行」出表的全部。

該行'<tr>顯示$ numrows結果</tr >'是無效的HTML。 <TR>意味着「定義一個新錶行」,但它需要在它裏面一個<TD>包的內容。由於表格的大多數行都包含多個TD元素,而該行只包含一條信息,所以您需要將該表格單元格告知span multiple columns

調試這類事情的一個好方法是將生成的HTML提供給http://validator.w3.org/,或者用示例數據替換$變量並將模板代碼提供給驗證器。起初這通常有點令人沮喪(因爲它會迫使你準確地使用你想要使用的HTML版本等),但它是追蹤問題的好方法。如果你給下面的HTML代碼段到W3驗證,它會給你一些有用的反饋:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head><title>A</title></head> 
<body> 

<table><tr><td>aaa</td><td>bbb</td></tr> 
<tr><td>cccc</td><td>dddd</td></tr> 
<tr>Test</tr> 
</table> 
</body> 
</html> 

驗證器告訴你:7號線,5列:字符數據在這裏不允許使用

<tr>Test</tr> 

換句話說,TR元素不應該直接包含文本。

它還說:7號線,13列:這還沒有結束

<tr>Test</tr> 

「最有可能的,你嵌套的標籤,並在錯誤的順序關閉他們爲「TR」結束標記......另一個可能是你使用這需要一個子元素,你沒有包括。因此,父元素是「未完成」,一個要素不完整的。例如,在HTML中<頭>元素必須包含一個<標題>子元素,列表需要適當的列表項(<ul>和<ol>需要<li> ...)等等。「

一旦你的靜態HTML尋找和驗證,你想要的方式,你可以再加入PHP循環回,但這個時候,你可以在腳本輸出與你的工作HTML例子。

1

您的腳本正在生成「雜亂」的HTML。從我看到你這樣生成的HTML頁面將(在當前的例子)3所DOCTYPE定義,3 head的還有3個table標籤和唯一一個收盤/table。 ,你也不必echo每一個HTML實體,你可以使用純HTML的PHP​​文件 嘗試類似的東西:

<?xml version = '1.0' encoding = 'utf-8'?> 
<!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> 
<title>searchdbresults</title> 
</head> 
<body> 
<?php 

$host = "localhost"; 
$user = "root"; 
$pass = null; 

// ======================================== 
$dbhost = @mysql_connect($host, $user, $pass) or die("Unable to connect to server"); 

@mysql_select_db("divebay") or die("Unable to select database"); 

$var = "scuba"; 
$query = trim($var); 

if(!isset($query)){ 
    echo "Your search was invalid"; 
    exit; 
} //line 18 

$sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'"; 

$result = mysql_query($sql); 
$numrows = mysql_num_rows($result); 
mysql_close($dbhost); 

if($numrows == 0){ 
    echo "Sorry, your search did not return any results"; 
} 
else{ 
?> 
<table style='width = 800px;'> 
<?php 
    $i = 0; 

    while($i < $numrows){ 
    $row = mysql_fetch_array($result); 

    $ID = $row['ID']; 
    $name = $row['name']; 
    $owner = $row['owner']; 
    $holder = $row['holder']; 
    $start = $row['sprice']; 
    $current = $row['cprice']; 
    $instant = $row['iprice']; 
    $inc = $row['incprice']; 
    $image = $row['img']; 
    $time = $row['stime']; 
    $length = $row['duration']; 
?> 
<tr style ="height: 200px;"> 
<td style ="width: 200px;"></td> 
<td style ="width: 300px;"> 
    <div style ="width: 180px"><?php echo $name; ?></div> 
    <div><?php echo $owner; ?></div> 
</td> 
<td style="width: 200px;"> 
    <div style="height: 100px;"><?php echo $current; ?></div> 
    <div style="height: 50px;"><?php echo $instant; ?></div> 
    <div><?php echo $inc; ?></div> 
</td> 
<td><?php echo $time; ?></td> 
</tr> 
<?php 
     i++; 
    } //end of while 
} //end of else 
?> 
<tr> 
    <td colspan="4">Displaying <?php echo $numrows; ?> results</td> 
</tr> 
</table> 
</html> 

而且還要考慮防止SQL注入太:http://bobby-tables.com/