2010-05-19 67 views
0

本頁面使用$_GET抓住一個資產ID和查詢MySQL數據庫,並返回一些信息。爲什麼這個PHP腳本會干擾我的CSS佈局?

如果「身份證」不匹配任何東西,不顯示任何結果,但頁面看起來很好。如果'id'爲空,則會在$id = $_GET["id"] or die(mysql_error());發生錯誤。發生這種情況時,它們的頁面佈局顯示不正確。我該如何解決?

獎金的問題:我怎麼會得到「未找到匹配的結果」什麼時候id不匹配數據庫中的任何標識或爲空的消息。

謝謝。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<link rel="stylesheet" type="text/css" href="style.css" /> 
<title>IT Asset</title> 
</head> 

<body> 
    <div id="page"> 
       <div id="header"> 
        <img src="images/logo.png" /> 
       </div> 

       </div> 

       <div id="content"> 
        <div id="container"> 

         <div id="main"> 
         <div id="menu"> 
          <ul> 
           <table width="100%" border="0"> 
           <tr> 
           <td><li><a href="index.php">Search Assets</a></li></td> 
           <td><li><a href="browse.php">Browse Assets</a></li></td> 
           <td><li><a href="add_asset.php">Add Asset</a></li></td> 
           <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> 
           </tr> 
           </table> 
          </ul> 
         </div> 
         <div id="text"> 
         <ul> 
         <li> 
         <h1>View Asset</h1> 
         </li> 
         </ul> 
<table width="100%" border="0" cellpadding="2"> 
<?php 

//make database connect 
mysql_connect("localhost", "asset_db", "asset_db") or die(mysql_error()); 
mysql_select_db("asset_db") or die(mysql_error()); 

//get asset 
$id = $_GET["id"] or die(mysql_error()); 
//get type of asset 
$sql = "SELECT asset.type 
From asset 
WHERE asset.id = $id"; 
$result = mysql_query($sql) 
or die(mysql_error()); 
$row = mysql_fetch_assoc($result); 
$type = $row['type']; 

switch ($type){ 
case "Server": 
$sql = " 
SELECT asset.id 
,asset.company 
,asset.location 
,asset.purchase_date 
,asset.purchase_order 
,asset.value 
,asset.type 
,asset.notes 
,server.manufacturer 
,server.model 
,server.serial_number 
,server.esc 
,server.user 
,server.prev_user 
,server.warranty 
FROM asset 
LEFT JOIN server 
    ON server.id = asset.id 
WHERE asset.id = $id 
"; 
$result = mysql_query($sql); 
while($row = mysql_fetch_assoc($result)) 
{ 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Asset ID:</td><td>"; 
    $id = $row['id']; 
    setcookie('id', $id); 
    echo "$id</td></tr>"; 
    echo "<tr<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Company:</td><td>"; 
    $company = $row['company']; 
    setcookie('company', $company); 
    echo "$company</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Location:</td><td>"; 
    $location = $row['location']; 
    setcookie('location', $location); 
    echo "$location</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Purchase Date:</td><td>"; 
    $purchase_date = $row['purchase_date']; 
    setcookie('purchase_date', $purchase_date); 
    echo "$purchase_date</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Purchase Order:</td><td>"; 
    $purchase_order = $row['purchase_order']; 
    setcookie('purchase_order', $purchase_order); 
    echo "$purchase_order</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Value:</td><td>"; 
    $value = $row['value']; 
    setcookie('value', $value); 
    echo "$value</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Type:</td><td>"; 
    $type = $row['type']; 
    setcookie('type', $type); 
    echo "$type</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Notes:</td><td>"; 
    $notes = $row['notes']; 
    setcookie('notes', $notes); 
    echo "$notes</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Manufacturer:</td><td>"; 
    $manufacturer = $row['manufacturer']; 
    setcookie('manufacturer', $manufacturer); 
    echo "$manufacturer</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Model/Description:</td><td>"; 
    $model = $row['model']; 
    setcookie('model', $model); 
    echo "$model</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Serial Number/Service Tag:</td><td>"; 
    $serial_number = $row['serial_number']; 
    setcookie('serial_number', $serial_number); 
    echo "$serial_number</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Express Service Code:</td><td>"; 
    $esc = $row['esc']; 
    setcookie('esc', $esc); 
    echo "$esc</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>User:</td><td>"; 
    $user = $row['user']; 
    setcookie('user', $user); 
    echo "$user</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Previous User:</td><td>"; 
    $prev_user = $row['prev_user']; 
    setcookie('prev_user', $prev_user); 
    echo "$prev_user</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Warranty:</td><td>"; 
    $warranty = $row['warranty']; 
    setcookie('warranty', $warranty); 
    echo "$warranty</td></tr>"; 
} 

break; 


case "Laptop": 
$sql = " 
SELECT asset.id 
,asset.company 
,asset.location 
,asset.purchase_date 
,asset.purchase_order 
,asset.value 
,asset.type 
,asset.notes 
,laptop.manufacturer 
,laptop.model 
,laptop.serial_number 
,laptop.esc 
,laptop.user 
,laptop.prev_user 
,laptop.warranty 
FROM asset 
LEFT JOIN laptop 
    ON laptop.id = asset.id 
WHERE asset.id = $id 
"; 
$result = mysql_query($sql); 
while($row = mysql_fetch_assoc($result)) 
{ 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Asset ID:</td><td>"; 
    $id = $row['id']; 
    setcookie('id', $id); 
    echo "$id</td></tr>"; 
    echo "<tr<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Company:</td><td>"; 
    $company = $row['company']; 
    setcookie('company', $company); 
    echo "$company</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Location:</td><td>"; 
    $location = $row['location']; 
    setcookie('location', $location); 
    echo "$location</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Purchase Date:</td><td>"; 
    $purchase_date = $row['purchase_date']; 
    setcookie('purchase_date', $purchase_date); 
    echo "$purchase_date</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Purchase Order:</td><td>"; 
    $purchase_order = $row['purchase_order']; 
    setcookie('purchase_order', $purchase_order); 
    echo "$purchase_order</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Value:</td><td>"; 
    $value = $row['value']; 
    setcookie('value', $value); 
    echo "$value</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Type:</td><td>"; 
    $type = $row['type']; 
    setcookie('type', $type); 
    echo "$type</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Notes:</td><td>"; 
    $notes = $row['notes']; 
    setcookie('notes', $notes); 
    echo "$notes</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Manufacturer:</td><td>"; 
    $manufacturer = $row['manufacturer']; 
    setcookie('manufacturer', $manufacturer); 
    echo "$manufacturer</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Model/Description:</td><td>"; 
    $model = $row['model']; 
    setcookie('model', $model); 
    echo "$model</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Serial Number/Service Tag:</td><td>"; 
    $serial_number = $row['serial_number']; 
    setcookie('serial_number', $serial_number); 
    echo "$serial_number</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Express Service Code:</td><td>"; 
    $esc = $row['esc']; 
    setcookie('esc', $esc); 
    echo "$esc</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>User:</td><td>"; 
    $user = $row['user']; 
    setcookie('user', $user); 
    echo "$user</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Previous User:</td><td>"; 
    $prev_user = $row['prev_user']; 
    setcookie('prev_user', $prev_user); 
    echo "$prev_user</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Warranty:</td><td>"; 
    $warranty = $row['warranty']; 
    setcookie('warranty', $warranty); 
    echo "$warranty</td></tr>"; 
} 

     break; 
case "Desktop": 
$sql = " 
SELECT asset.id 
,asset.company 
,asset.location 
,asset.purchase_date 
,asset.purchase_order 
,asset.value 
,asset.type 
,asset.notes 
,desktop.manufacturer 
,desktop.model 
,desktop.serial_number 
,desktop.esc 
,desktop.user 
,desktop.prev_user 
,desktop.warranty 
FROM asset 
LEFT JOIN desktop 
    ON desktop.id = asset.id 
WHERE asset.id = $id 
"; 
$result = mysql_query($sql); 
while($row = mysql_fetch_assoc($result)) 
{ 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Asset ID:</td><td>"; 
    $id = $row['id']; 
    setcookie('id', $id); 
    echo "$id</td></tr>"; 
    echo "<tr<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Company:</td><td>"; 
    $company = $row['company']; 
    setcookie('company', $company); 
    echo "$company</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Location:</td><td>"; 
    $location = $row['location']; 
    setcookie('location', $location); 
    echo "$location</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Purchase Date:</td><td>"; 
    $purchase_date = $row['purchase_date']; 
    setcookie('purchase_date', $purchase_date); 
    echo "$purchase_date</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Purchase Order:</td><td>"; 
    $purchase_order = $row['purchase_order']; 
    setcookie('purchase_order', $purchase_order); 
    echo "$purchase_order</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Value:</td><td>"; 
    $value = $row['value']; 
    setcookie('value', $value); 
    echo "$value</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Type:</td><td>"; 
    $type = $row['type']; 
    setcookie('type', $type); 
    echo "$type</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Notes:</td><td>"; 
    $notes = $row['notes']; 
    setcookie('notes', $notes); 
    echo "$notes</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Manufacturer:</td><td>"; 
    $manufacturer = $row['manufacturer']; 
    setcookie('manufacturer', $manufacturer); 
    echo "$manufacturer</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Model/Description:</td><td>"; 
    $model = $row['model']; 
    setcookie('model', $model); 
    echo "$model</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Serial Number/Service Tag:</td><td>"; 
    $serial_number = $row['serial_number']; 
    setcookie('serial_number', $serial_number); 
    echo "$serial_number</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Express Service Code:</td><td>"; 
    $esc = $row['esc']; 
    setcookie('esc', $esc); 
    echo "$esc</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>User:</td><td>"; 
    $user = $row['user']; 
    setcookie('user', $user); 
    echo "$user</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Previous User:</td><td>"; 
    $prev_user = $row['prev_user']; 
    setcookie('prev_user', $prev_user); 
    echo "$prev_user</td></tr>"; 
    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Warranty:</td><td>"; 
    $warranty = $row['warranty']; 
    setcookie('warranty', $warranty); 
    echo "$warranty</td></tr>"; 
} 
     break; 
} 

?> 
</table> 
<br /> 
<br /> 
<table width="100%" border="0"> 
<tr> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
<td><a href="#">Add Software</a></td> 
<td><a href="#">Edit Asset</a></td> 
<td><a href="#">Delete Asset</a></td> 
</tr> 
</table> 
         </div> 

         </div> 
       </div> 
       <div class="clear"></div> 
       <div id="footer" align="center"> 
        <p>&nbsp;</p> 
       </div> 
       </div> 
       <div id="tagline"> 

       </div> 


</body> 
</html> 
+6

只是一些反饋:提供簡短的短片段會給你更多更好的答案。換句話說:TLDR :-) – soulmerge 2010-05-19 18:03:05

+4

你的腳本非常容易受到SQL注入攻擊,這意味着攻擊者幾乎可以對數據庫做任何他想做的事情。去谷歌上查詢。 – ryeguy 2010-05-19 18:06:16

+4

您正在將一個$ _GET變量放入一個沒有驗證的MySQL查詢中,這是一個巨大的安全漏洞:http://xkcd.com/327/您應該使用PDO提供的準備語句:http:// www .php.net/manual/en/pdo.prepare.php – 2010-05-19 18:07:31

回答

3

您的佈局休息,因爲你在輸出HTML中間的「死」的權利。您的頁面將在「查看資產」之後將內容輸出到表格中,然後如果腳本死亡,它將在此處停止,並且不會在下面輸出單個字符。你最終會輸出一個表格開始標籤,但不會關閉,也不會關閉任何div,body或html標籤。

您還會發現一旦開始輸出任何HTML,就不能使用setcookie函數。

我建議完全分離你的PHP邏輯和HTML輸出 - 最好分成單獨的文件,或者在下面的文件和HTML頂部的PHP代碼。先執行你的邏輯並將你的變量保存在PHP中,然後正常輸出所有的PHP,只要在必要時包括適當的變量。類似這樣的:

<?php 
// connect to the database and run your query here 
// save results into an array, something like this: 
$rows = array(); 
while($row = mysql_fetch_assoc($result)) 
{ 
    // processing with $row here if needed 
    $rows[] = $row; 
} 

//rest of PHP code 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<!-- rest of the opening HTML code here --> 

<table width="100%" border="0" cellpadding="2"> 
<?php foreach ($rows as $row) : ?> 
<tr> 
    <td>Addet ID:</td> 
    <td><?php echo $row['id'] ?></td> 
</tr> 
<tr> 
...etc 
</tr> 
<?php endforeach; ?> 
</table> 

<!-- rest of the closing HTML code here --> 
+0

謝謝 - 我喜歡這個。 – 2010-05-19 21:04:12

2

你不能死在頁面中間 - 你的頁面將是不完整和無效的。你需要做的是在打開表格之前檢查你的條件,在出錯的情況下輸出錯誤消息html,否則輸出包含內容的表格。自殺永遠不是解決方案。

+3

我不同意,自殺是最終的解決方案。 – 2010-05-19 18:07:50

+1

布倫特,不,你忘記了重生。 – 2010-05-19 19:38:45

+1

這就是爲什麼他的K​​/D比率如此糟糕。 – Dolph 2010-05-19 20:00:38

5

你是當你整合代碼和標記這種方式非常有限。您應該採取的方法是運行您的代碼,處理您的輸入並生成合適的輸出,然後將其傳遞給知道如何輸出此數據的模板。

然後,您可以爲您輸出任何東西之前檢查一個MySQL錯誤,設置一個變量,如果存在的話,輸出一個用戶友好的錯誤消息。如果沒有錯誤,則可以循環顯示數據以顯示結果。

如果你只想循環遍歷數據一次(首先通過數據集循環來構建數組,然後再次在模板循環中),你可以將mysql結果賦值給一個變量並以這種方式處理它(儘管直到完成後才能關閉分貝)。除非您試圖在企業應用程序中保存毫秒數據,或者擁有數十行1000行數據,否則它並沒有真正發揮多大作用。無論採用哪種方式,您都可以選擇這樣做,那麼只有這樣才能處理「先處理,然後處理」這種情況......這將爲您提供最大的靈活性,以便如何處理輸出。

+1

+1指出極端混亂。 :) – 2010-05-21 11:59:39

4

我在這裏會殘酷地誠實:你的代碼是一團糟;這就是爲什麼PHP得到一個非常糟糕的說唱。你真的應該考慮分離你的PHP和HTML。

主要的問題是這樣的:

$id = $_GET["id"] or die(mysql_error()); 

你甚至不嘗試處理沒有給出一個ID時的狀況;更不用說mysql_error()將是一個不恰當的調用函數。

相反,你應該用一個控制結構來處理這種情況時,未設置標識。

 

if(!isset($_GET['id'])) { 

    $result = mysql_query($sql); 

    print '<p>Your search returned '; 
    print mysql_num_rows($result); 
    print 'results. </p>'; 

} 

else { 

    print '<p>An id was not supplied.</p>'; 
} 
 
4

通過您的代碼只是略讀,你可能想解決這個破<tr>

echo "<tr<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>Company:</td><td>"; 
     ^
相關問題