fatal error

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
cty007
Forum Newbie
Posts: 9
Joined: Thu Dec 14, 2006 11:15 pm

fatal error

Post by cty007 »

Anyone know where is my mistake?
The error show when i click on "buy" in product.php.
Please guide me.
---------------------------------------------------------


Error shown:

Fatal error: Call to a member function fetch_row() on
a non-object in C:\test\kelly.php on line 14


----------------------------------------------------------

Code: Select all

//product.php

<?php



include("db.php");

$db=new mysqli('localhost','root','','test');
$db->select_db('test');



$query="select * from book order by title asc";
$result = $db->query($query);
?>

<?php
while($row =$result->fetch_assoc())
{
?>
 
<table border=1 width=80% bgcolor="pink">
<tr>
<td width=20%>
<font face="verdana" size="2" color="black" >
ISBN :
</font>
</td>
<td >
<font face="verdana" size="2" color="black">
<?php echo $row["isbn"]; ?>
</font>
</td>
</tr>

<tr>
<td width=20%>
<font face="verdana" size="2" color="black">
TITLE:
</font>
</td>
<td >
<font face="verdana" size="2" color="black">
<?php echo $row["title"]; ?>
</font>
</td>
</tr>

<tr>
<td width=20%>
<font face="verdana" size="2" color="black">
Author :
</font>
</td>
<td > 
<font face="verdana" size="2" color="black">
<?php echo $row["author"]; ?>
</font>
</td>
</tr>

<tr>
<td width=20%>
<font face="verdana" size="2" color="black">
Description :
</font>
</td>
<td >
<font face="verdana" size="2" color="black">
<?php echo $row["description"]; ?>
</font>
</td>
</tr>

<tr>
<td width=20%>
<font face="verdana" size="2" color="black">
Condition :
</font>
</td>
<td >
<font face="verdana" size="2" color="black">
<?php echo $row["condition"]; ?>
</font>
</td>
</tr>

<tr>
<td width=20%>
<font face="verdana" size="2" color="black">
Price(RM) : 
</font>
</td>
<td >
<font face="verdana" size="2" color="black">
<?php echo $row["price"]; ?>
</font>
</td>
</tr>





<td >
<font face="verdana" size="2" color="black">
<a href="cart.php?action=add_item&id=<?php echo $row["bookid"];?>">Buy</a>
</font>
</td>
</tr>
<br />
</table>

<?php }?>

<tr>
<td >
<hr size="2" color="red" NOSHADE>
</td>
</tr>



<tr>
<td >
<font face="verdana" size="5" color="black">
<a href="cart.php"> View Your Shopping Cart >></a>
</font>
</td>
</tr>
</table>
</body>
</html>

------------------------------------------------
//kelly.php

<?php


function AddItem($bookid){


$db=new mysqli('localhost','root','','test');
$db->select_db('test');

$query="select count(*) from cart where cookieId = '" . GetCartId() . "' and bookid = $bookid";
$result=$db->query($query);


$row =$result->fetch_row();

$numRows = $row[0];
if($numRows == 0)

{
// This item doesn't exist in the users cart,
// we will add it with an insert query
$query="insert into cart(cookieId, bookid) values('" . GetCartId() . "', $bookid)";
$result=$db->query($query);
}
else
{
	echo "The book already in your shopping cart.";
	
// This item already exists in the users cart,
}

}

function RemoveItem($bookid){
$db=new mysqli('localhost','root','','test');
$db->select_db('test');

$query="delete from cart where cookieId = '" . GetCartId() . "' and bookid = $bookid";
$result=$db->query($query);
}





function ShowCart(){

$db=new mysqli('localhost','root','','test');
$db->select_db('test');


$query="select * from cart inner join items on cart.bookid = book.bookid where cart.cookieId = '" . GetCartId() . "' order by book.title asc";
$result=$db->query($query);

$totalCost=0;
while($row = $result->fetch_assoc())
{
// Increment the total cost of all items
$totalCost+=$row["price"];

?>




<td width="55%" height="25">
<font face="verdana" size="1" color="black">
<?php echo $row["title"]; ?>
</font>
</td>
<td width="20%" height="25">
<font face="verdana" size="1" color="black">
$<?php echo number_format($row["price"], 2, ".", ","); ?>

</font>
</td>
<td width="10%" height="25">
<font face="verdana" size="1" color="black">
<a href="cart.php?action=remove_item&id=<?php echo $row["bookid"]; ?>">Remove</a>
</font>
</td>
</tr>
<br />

<?php } ?>

<tr>
<td width="100%" colspan="4">
<hr size="1" color="red" NOSHADE>
</td>
</tr>
<tr>
<td width="70%" colspan="2">
<font face="verdana" size="1" color="black">
<a href="products.php"><< Keep Shopping</a>
</font>
</td>
<td width="30%" colspan="2">
<font face="verdana" size="2" color="black">
<b>Total: $<?php echo number_format($totalCost, 2); ?></b>
</font>
</td>
</tr>
<?php } ?>

---------------------------------------------------
//cart.php

<?php
include("kelly.php");
include("db.php");
?>


<?php

switch($_GET["action"])
{
case "add_item":
{
AddItem($_GET["bookid"]);
ShowCart();
break;
}


case "remove_item":
{
RemoveItem($_GET["bookid"]);
ShowCart();
break;
}
default:
{
ShowCart();
}
}

?>


---------------------------------------------------
//db.php

<?php

function GetCartId()
{
// This function will generate an encrypted string and
// will set it as a cookie using set_cookie. This will
// also be used as the cookieId field in the cart table

if(isset($_COOKIE["cartId"]))
{
return $_COOKIE["cartId"];
}
else
{
// There is no cookie set. We will set the cookie
// and return the value of the users session ID

session_start();
setcookie("cartId", session_id(), time() + ((3600 * 24) * 30));
return session_id();
}
}

?>
-----------------------------------------------//end
User avatar
Zoxive
Forum Regular
Posts: 974
Joined: Fri Apr 01, 2005 4:37 pm
Location: Bay City, Michigan

Post by Zoxive »

You have

Code: Select all

$row =$result->fetch_row();
when i Think you need..

Code: Select all

$row =$db->fetch_row();
$result isn't what you made your class $db was.
User avatar
volka
DevNet Evangelist
Posts: 8391
Joined: Tue May 07, 2002 9:48 am
Location: Berlin, ger

Post by volka »

According to http://de2.php.net/mysqli fetch_row() is a method of mysqli_result. Therefore $row =$result->fetch_assoc() is correct.
But only if the query was successful, otherwise query() will return false. You have to test that.
The db connection can fail, select_db can fail, your query might be invalid or access is denied ...test it all.

Code: Select all

<?php
//product.php
require 'db.php';

$db=new mysqli('localhost','root','','test');
if (mysqli_connect_errno()) {
	die( 'Connect failed: ' . mysqli_connect_error() );
}

$db->select_db('test') or die( 'select_db failed: '.$db->error );

$query="select * from book order by title asc";
$result = $db->query($query) or die( 'query failed: '.$db->error );

while($row =$result->fetch_assoc())
{
Post Reply