Sams Teach Yourself PHP, Mysql and Apache
alls going ok, till chapter 22
a basic shopping cart 2 pages one is the main seestore.php
and the second is showitem.php
pages are below!
the first page works fine, shows the categories and items etc
then when I click onto show item the page (showitem.php) comes up
Unknown column 'item_id' in 'where clause'
(first page works fine)
seestore.php
Code: Select all
<?php
//connect to database
$mysqli = mysqli_connect("localhost", "root", "", "store");
$display_block = "<h1>My Categories</h1>
<p>Select a category to see its items.</p>";
//show categories first
$get_cats_sql = "SELECT id, cat_title, cat_desc FROM
store_categories ORDER BY cat_title";
$get_cats_res = mysqli_query($mysqli, $get_cats_sql) or die(mysqli_error($mysqli));
if (mysqli_num_rows($get_cats_res) < 1) {
$display_block = "<p><em>Sorry, no categories to browse.</em></p>";
} else {
while ($cats = mysqli_fetch_array($get_cats_res)) {
$cat_id = $cats['id'];
$cat_title = strtoupper(stripslashes($cats['cat_title']));
$cat_desc = stripslashes($cats['cat_desc']);
$display_block .= "<p><strong><a href=\"".$_SERVER["PHP_SELF"]."?cat_id=".$cat_id."\">".$cat_title."</a></strong><br/>".$cat_desc."</p>";
if (isset($_GET["cat_id"])) {
if ($_GET["cat_id"] == $cat_id) {
//get items
$get_items_sql = "SELECT id, item_title, item_price FROM store_items WHERE cat_id = '".$cat_id."' ORDER BY item_title";
$get_items_res = mysqli_query($mysqli, $get_items_sql) or die(mysqli_error($mysqli));
if (mysqli_num_rows($get_items_res) < 1) {
$display_block = "<p><em>Sorry, no items in this category.</em></p>";
} else {
$display_block .= "<ul>";
while ($items = mysqli_fetch_array($get_items_res)) {
$item_id = $items['id'];
$item_title = stripslashes($items['item_title']);
$item_price = $items['item_price'];
$display_block .= "<li><a href=\"showitem.php?item_id=".$item_id."\">".$item_title."</a></strong> (\$".$item_price.")</li>";
}
$display_block .= "</ul>";
}
//free results
mysqli_free_result($get_items_res);
}
}
}
}
//free results
mysqli_free_result($get_cats_res);
//close connection to MySQL
mysqli_close($mysqli);
?>
<html>
<head>
showitem.php
Code: Select all
<?php
//connect to database
$mysqli = mysqli_connect("localhost", "root", "", "store");
$display_block = "<h1>My Store - Item Detail</h1>";
//validate item
$get_item_sql = "SELECT c.id as cat_id, c.cat_title, si.item_title, si.item_price, si.item_desc, si.item_image FROM store_items AS si LEFT JOIN store_categories AS c on c.id = si.cat_id WHERE si.id = '".$_GET["item_id"]."'";
$get_item_res = mysqli_query($mysqli, $get_item_sql) or die(mysqli_error($mysqli));
if (mysqli_num_rows($get_item_res) < 1) {
//invalid item
$display_block .= "<p><em>Invalid item selection.</em></p>";
} else {
//valid item, get info
while ($item_info = mysqli_fetch_array($get_item_res)) {
$cat_id = $item_info['cat_id'];
$cat_title = strtoupper(stripslashes($item_info['cat_title']));
$item_title = stripslashes($item_info['item_title']);
$item_price = $item_info['item_price'];
$item_desc = stripslashes($item_info['item_desc']);
$item_image = $item_info['item_image'];
}
//make breadcrumb trail
$display_block .= "<p><strong><em>You are viewing:</em><br/>
<a href=\"seestore.php?cat_id=".$cat_id."\">".$cat_title."</a> > ".$item_title."</strong></p>
<table cellpadding=\"3\" cellspacing=\"3\">
<tr>
<td valign=\"middle\" align=\"center\"><img src=\"".$item_image."\"/></td>
<td valign=\"middle\"><p><strong>Description:</strong><br/>".$item_desc."</p>
<p><strong>Price:</strong> \$".$item_price."</p>";
//free result
mysqli_free_result($get_item_res);
//get colors
$get_colors_sql = "SELECT item_color FROM store_item_color WHERE item_id = '".$_GET["item_id"]."' ORDER BY item_color";
$get_colors_res = mysqli_query($mysqli, $get_colors_sql) or die(mysqli_error($mysqli));
if (mysqli_num_rows($get_colors_res) > 0) {
$display_block .= "<p><strong>Available Colors:</strong><br/>";
while ($colors = mysqli_fetch_array($get_colors_res)) {
$item_color = $colors['item_color'];
$display_block .= $item_color."<br/>";
}
}
//free result
mysqli_free_result($get_colors_res);
//get sizes
$get_sizes_sql = "SELECT item_size FROM store_item_size WHERE item_id = ".$_GET["item_id"]." ORDER BY item_size";
$get_sizes_res = mysqli_query($mysqli, $get_sizes_sql) or die(mysqli_error($mysqli));
if (mysqli_num_rows($get_sizes_res) > 0) {
$display_block .= "<p><strong>Available Sizes:</strong><br/>";
while ($sizes = mysqli_fetch_array($get_sizes_res)) {
$item_size = $sizes['item_size'];
$display_block .= $item_size."<br/>";
}
}
//free result
mysqli_free_result($get_sizes_res);
$display_block .= "
</td>
</tr>
</table>";
}
?>
<html>
<head>
<title>My Store</title>
</head>
<body>
<?php echo $display_block; ?>
</body>
</html>