sajid
sajid

Reputation: 53

categories.php page is not collecting data from DATABASE

My category name is my navigation bar. I want to display "categoryname" on categories.php page while i am clicking any navigation items .

  1. page is connected with database
  2. it is creating dynamic links
  3. i checked the SQL query, its working

//this is categories.php file

<?php require ('includes/dbconnect.php');?>
    
<?php
if (!isset($_GET['categoryid'])){

header ("location:index.php");
}


$cat_sqli ="SELECT products.productid,products.productname,products.unit,products.price,products.brand,products.productdetails,categories.categoryid,categories.categoryname 
FROM products 
INNER JOIN categories ON (products.categoryid=categories.categoryid)
FROM products
INNER JOIN categories
ON (products.categoryid=categories.categoryid)
WHERE products.categoryid=".$_GET['categoryid'];
if ($cat_query = mysqli_query ($dbconnect,$cat_sqli)){

$cat_rs=mysqli_fetch_assoc($cat_query);

}

?>

<body>
<h1>Selected category | <?php echo $cat_rs['categoryname'];?></h1>


</body>

Upvotes: 0

Views: 42

Answers (2)

Mohammad
Mohammad

Reputation: 3547

in addition to scaisEdge answer, I want to fix your query from sql injection vulnerability and use prepared statements as follow:

//this is categories.php file

<?php require ('includes/dbconnect.php');?>

<?php
if (!isset($_GET['categoryid'])){
    header ("location:index.php");
}

$array_of_result = [];

$cat_sqli ="SELECT 
 products.productid
,products.productname
,products.unit
,products.price
,products.brand
,products.productdetails
,categories.categoryid
,categories.categoryname 
FROM products 
INNER JOIN categories ON products.categoryid=categories.categoryid
WHERE products.categoryid=?";

$stmt = $dbconnect->prepare($cat_sqli);

if($stmt){
    $stmt->bind_param('i', filter_input(INPUT_GET, 'categoryid', FILTER_VALIDATE_INT));
    if($stmt->execute()){
        $result = $stmt->get_result();
        $num_of_rows = $result->num_rows;

        if($num_of_rows>0){
            while ($row = $result->fetch_assoc()) {
                $array_of_result[] = $row;
           }
        }
        $stmt->free_result();
        $stmt->close();
    }
}
?>

<body>
<h1>Selected category | 
<?php
if(!empty($array_of_result)){
    foreach($array_of_result as $r){
        echo $r['categoryname'];
        break;
    }
}
</h1>
</body>

Upvotes: 1

ScaisEdge
ScaisEdge

Reputation: 133360

You are joining the table two time this is wrong (remove the second from and join clause and condition)

$cat_sqli ="SELECT 
     products.productid
    ,products.productname
    ,products.unit
    ,products.price
    ,products.brand
    ,products.productdetails
    ,categories.categoryid
    ,categories.categoryname 
FROM products 
INNER JOIN categories ON products.categoryid=categories.categoryid
WHERE products.categoryid=".$_GET['categoryid'];

Upvotes: 0

Related Questions