2012-11-28 73 views
0

我正在爲大學項目製作購物車,並按照導師的示例代碼進行調整,以適應自己的設計。購物車PHP顯示錯誤

我的網站的產品命名,如

cutecupcak.es/product.php?id=vanilla_cupcakes 

而不是

cutecupcak.es/product.php?id=2 

的購物車頁面中您的購物車,以顯示產品的代碼是

if(is_numeric($id)) { 
    $cartresult = mysql_query($sql); 

但我的產品網址不是數字,因此購物車不顯示結果,如您在此處所看到的 - http://cutecupcak.es/shoppingcart.php - 如果你測試一下。

,如果你有products.php?id=2等雖然

,我需要從改變什麼,將工作 - is_numeric,使其與我的網址格式的工作?

全碼

<?php 

session_start(); // start new session or call exisiting session 
include('include/dbconnect.php'); // include the database connections 

function renderCartForm() 
    { 
    $cart = $_SESSION['cart']; 
    if ($cart) { 
     $items = explode(',',$cart); 
     $contents = array(); 
     foreach ($items as $item) { 
      $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; 
     } 
     $output[] = '<form action="shoppingcart.php?action=update" method="post" id="cart">'; 
     $output[] = '<div class="form">'; 
     $output[] = '<table border="2" class="formcontainer">'; 
     $output[] = '<tr class="formlabels">'; 
     $output[] = '<td width="400">Cake Name</td>'; 
     $output[] = '<td width="75">Price</td>'; 
     $output[] = '<td width="75">Quantity</td>'; 
     $output[] = '<td width="100">Total</td>'; 
     $output[] = '<td width="100">Remove?</td>'; 
     $output[] = '</tr>'; 
     foreach ($contents as $id=>$qty) { 
      $sql = 'SELECT * FROM `CAKE` WHERE `cake_url` = '.$id; 

      if(is_numeric($id)) { 
       $cartresult=mysql_query($sql); 

      while($cartrow = mysql_fetch_array($cartresult)) { 
       $output[] = '<tr>'; 
       $output[] = '<td>'.$cartrow['cake_name'].'</td>'; 
       $output[] = '<td>'.$cartrow['cake_price'].'</td>'; 
       $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="2" maxlength="2" /></td>'; 
       $output[] = '<td>&pound;'.($cartrow['cake_price'] * $qty).'</td>'; 
       $output[] = '<td><a href="shoppingcart.php?action=delete&id='.$id.'">Remove</a></td>'; 
       $total += $cartrow['cake_price'] * $qty; 
       $output[] = '</tr>'; 
      } 
      } 
     } 
     $output[] = '</table>'; 
     $output[] = '</div>'; 
     $output[] = '<p>Grand total: <strong>&pound;'.$total.'</strong></p>'; 
     $output[] = '<div class="\"formlabels\"><button type="submit">Update Cart</button></div>'; 
     $output[] = '</form>'; 
    } else { 
     $output[] = '<p>Your shopping cart is empty.</p>'; 
    } 
    echo join(' 
       ',$output); 
    } 

?>

+0

您的產品名稱可以使用什麼格式?在你的例子中你有字符和下劃線,但你可以有數字嗎? Apostophes?行情? – andrewsi

+0

所有的url都和vanilla_cupcakes一樣沒有數字,基本上一個單詞強調一個單詞 – FoamyMedia

+0

你可以編寫一個函數來檢查文本是否是那種格式。 – andrewsi

回答

0

PHP的is_string功能是你在找什麼。如果您的產品名稱都不包含數字,您也可以簡單地執行!is_numeric

+0

(1)即使字符串中有數字,'is_numeric('abc123def')將返回'false'; (2)理論上,除了測試'$ id'是否爲空之外,在他的情況下根本不需要測試。但是他的sql代碼很可能不得不改變。 –

+0

確實,我會改變測試來檢查id是否爲空。 –

+0

!is_numeric does not work throws up and error ..我已經上傳了整個代碼,如果可以從中得出結論呢?非常感謝 – FoamyMedia

0

如果你的$id是一個字符串而不是數字,那麼你不需要檢查它是否是數字。其實,你只需要檢查它是否是不是空的,如

if(strlen(trim($id)) { 
    $cartresult = mysql_query($sql); 

但是!您幾乎肯定需要修改您的$sql的構建方式。您沒有在代碼中顯示它,但它必須在mysql_query行之前的某個位置完成。你可能會喜歡的東西

$dbh = new PDO('mysql:host=hostname;port=portnum;dbname=databasename', 'username', 'password'); 

if(strlen(trim($id)) { 
    $sql = "SELECT * FROM product WHERE id=?"; 
    $sth = $dbh->prepare($sql); 
    $sth->bindParam(1, $id, PDO::PARAM_ISTR); 
    $sth->execute(); 

    while($row = $sth->fetch()) { 
     ... 
    } 
} 

注意,這個例子是使用PDO,而不是mysql_集的功能,這是無論如何棄用結束。你應該開始使用PDO,因爲它更加靈活和安全(如果使用得當的話)。