displaying accurate results

点点圈 提交于 2019-12-11 12:34:10

问题


I'm creating a web site directory for my mobile site (FOUND HERE)

I have figured out how to display listings from my mysql table to my home page from my tables promo_cat list.

The thing im having trouble with is this:

once clicking on one of the catagories it leads me to my list.php page.

How do I get this page to display results related to the category clicked and not others?

For example:when clicking on "FREE" brings up this page: http://www.xclo.mobi/xclo2/list.php?id=FREE. Which displays all results. it should only display results that have a promo_cat field as "FREE" and should not display any other results as it does currently.

My list.php code:

<?php

include_once('include/connection.php');
include_once('include/article.php');

$article = new article;
$articles = $article->fetch_all();

?>

<html>

<head>
<title>xclo mobi</title>
<link rel="stylesheet" href="other.css" />
</head>

<body>
<?php include_once('header.html'); ?>


<div class="container">
<a href="index.php" id="logo">Category = ???</a>

<ol>
    <?php foreach ($articles as $article) { ?>

<div class="border">
<a href="single.php?id=<?php echo $article['promo_title']; ?>" style="text-decoration: none">
<img src="<?php echo $article['promo_image']; ?>" border="0" class="img" align="left"><br />


<a href="<?php echo $data['promo_link']; ?>" target="_blank"><img alt="" title="" src="GO.png" height="50" width="50" align="right" /></a>

          <font class="title"><em><center><?php echo $article['promo_title']; ?></center></em></font>

<br /><br />

<font class="content"><em><center><?php echo $article['promo_content']; ?></center></em></font>

</div><br/><br />

          </a>

 <?php } ?>
</ol>
</div>
</body>

</html>

/include/article.php

<?php

class article {
public function fetch_all(){
    global $pdo;
      $query = $pdo->prepare("SELECT * FROM mobi");
      $query->execute();
return $query->fetchAll();
              }

public function fetch_data($promo_title) {
   global $pdo;

 $query = $pdo->prepare("SELECT * FROM mobi WHERE promo_title = ?");
  $query->bindValue(1, $promo_title);
   $query->execute();

return $query->fetch(); 

}

}

?>

回答1:


Based on the code you provided, try this:

<?php foreach ($articles as $article) { 
   if ($article['promo_cat'] === 'FREE') { ?>

   // Keep the rest of the code

   //instead of <?php } ?> - put...
   <?php } } ?>

Keep in mind, this is messy. But the foreach statement (I imagine) is being used to print out all posts. So, before printing out a post, you just check to see if the promo_title is FREE, GIFT, etc. If it's not, then it doesn't print that item.

You can make this more dynamic by passing in a $_GET variable (which you apparently are doing, but the code is never using this variable) with the current promo title and altering the conditional line to say

if ($article['promo_cat'] === $_GET['id'])

Hope that helps!




回答2:


You need to make changes to the code for list.php based on the input it gets through GET parameter. something like:

if ($_GET['id'] == 'FREE'){
    // do something like display FREE items
}
elseif($_GET['id'] == 'GIFT') {
    // display GIFT items
}
else {
    // perform some default action 
}

This is to make it even more database driven (helpful when there are many categories):

$sql = "select * from categories where id = '".$_GET['id']."'";
if (mysql_results($sql)){
    // do something
}
else {
    // show error
}

Note that this is for demo only and in your code you should use PDO/MySQLI and prepared statements and not mysql_results function.

In light of more information provided by OP: Change this

$articles = $article->fetch_all();

to

$articles = $article->fetch_data($_GET['id']);

in list.php and see if you get correct results.



来源:https://stackoverflow.com/questions/17751536/displaying-accurate-results

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!