我正在为大学项目制作购物车,并跟随导师示例代码,但调整它以适合我自己的设计。
我的网站产品名称如
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>£'.($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>£'.$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);
}
&GT;
答案 0 :(得分:0)
PHP的is_string功能正是您所需要的。如果您的产品名称都不包含数字,您也可以只执行!is_numeric
。
答案 1 :(得分: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,因为它更加通用和安全(如果使用得当)。