使用mysql数据库和php制作内容“feed”,这是一种安全的方法吗?

时间:2013-05-04 01:47:53

标签: php mysql database feed

我正在制作一个侧栏栏,它会显示提交到我数据库中的10个最新内容。我对这一切都很陌生,所以我想知道......这是一个好办法吗?它工作..不是自动的,但当我向我的数据库提交一些东西时,它去那里..我提交别的东西然后顶部转到第二个..!我只是不能动摇这种感觉,也许这不是一个好方法。

前3个部分

<div class="span3 offset3">

<?php include 'feed/one.php'; ?>

    <ul class="nav nav-list well">


        <li class="nav-header"></li>
        <li class="active"><a href="#">HIT INFO</a></li>
        <?php while($row = $data->fetch_assoc()) { ?>

        <li><a href="<?php print $row['link']?>"><?php 
             Print "<tr>"; 
             Print "<th>Hit:</th> <td>".$row['hit'] . "</td> "; 
             Print "<th>Amount:</th> <td>".$row['amount'] . " </td>"; 
             Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
             Print "<br><br/>"; 
             Print "</table>";?></a></li>
        <?php } ?>

        <li class="divider"></li>
        <?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 1, 1"); ?>
        <?php while($row = $data->fetch_assoc()) { ?>

        <li><a href="<?php print $row['link']?>"><?php 
             Print "<tr>"; 
             Print "<th>Hit:</th> <td>".$row['hit'] . "</td> "; 
             Print "<th>Amount:</th> <td>".$row['amount'] . " </td>"; 
             Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
             Print "<br><br/>"; 
             Print "</table>";?></a></li>
        <?php } ?>
        <li class="divider"></li>
        <?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 2, 1"); ?>
        <?php while($row = $data->fetch_assoc()) { ?>

        <li><a href="<?php print $row['link']?>"><?php 
             Print "<tr>"; 
             Print "<th>Hit:</th> <td>".$row['hit'] . "</td> "; 
             Print "<th>Amount:</th> <td>".$row['amount'] . " </td>"; 
             Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
             Print "<br><br/>"; 
             Print "</table>";?></a></li>
        <?php } ?>
        <li class="divider"></li>
        <?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 3, 1"); ?>
        <?php while($row = $data->fetch_assoc()) { ?>

        <li><a href="<?php print $row['link']?>"><?php 
             Print "<tr>"; 
             Print "<th>Hit:</th> <td>".$row['hit'] . "</td> "; 
             Print "<th>Amount:</th> <td>".$row['amount'] . " </td>"; 
             Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
             Print "<br><br/>"; 
             Print "</table>"; ?></a></li>
             <?php } ?>

提交的数据会显示在我的主页上,直到其他内容被提交,转到“Feed”,并转到另一个显示过去数据的页面。

3 个答案:

答案 0 :(得分:1)

而不是每次查询数据库并获取记录以显示它时,您应该在一个查询中执行此操作,该查询将获取您需要的行数:

<?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 1, N"); ?> 

这将获取前N行,其中N当然必须是数字。然后你应该循环抛出行并按照你现在的方式打印它。唯一的区别是,你可能需要一段时间才能正确地获得打开/循环/关闭表格的细微差别,但这是一个非常好的投入你的时间来包围它!

答案 1 :(得分:1)

您似乎没有任何用户可以拦截的内容,因此“安全”不是问题。

但是你在查询不合逻辑。当您可以最初获取数据并使用该对象在需要时中继内容时,没有理由在整个页面上重复具有多个偏移的相同查询。在文件的开头运行这样的查询,或理想情况下在渲染任何输出之前运行。

"SELECT * FROM hit ORDER BY hit_id DESC LIMIT 4"

现在您有4个项目,因此访问整个页面中的内容可能是这样的:

<ul class="nav nav-list well">
    <li class="nav-header"></li>
    <li class="active"><a href="#">HIT INFO</a></li>
        <?php while($row = $data->fetch_assoc()): ?>

            <li>
                <a href="<?php print $row['link']?>">
                <table>
                    <tr>
                        <th>Hit:</th> <td><?php echo $row['hit']; ?></td>
                        <th>Amount:</th> <td><?php echo $row['amount']; ?></td>
                        <th>Category:</th> <td><?php echo $row['category']; ?></td>
                    </tr>
                    <br><br/> 
                </table>
              </a>
          </li>
          <li class="divider"></li>
        <?php endwhile; ?>
 </ul>

现在,你有一些标记错误。你关闭一个你永远不会打开的桌子。这只能以一种小的方式被视为表格数据,因此无论如何,表格可能不是最好的方法。我自己并不明白你以这种方式使用th和td,但如果它对你有用那么好。

你应该突破php来显示html。回声像"<th>"之类的东西是完全没必要的。

答案 2 :(得分:0)

您实际上是使用hit_id字段来对从数据库中获取的数据进行排序。

如果您想要实际检索“提交到我的数据库中的10个最新内容”,则除了自动增加的ID之外,您还需要其他内容。 (类似于COUNT行上的amount)。它将取决于填充此字段的实际值/方式,但它可能看起来像这样:

SELECT * FROM hit GROUP BY Category ORDER BY amount DESC;

关于这一部分:

  

但是当我向我的数据库提交一些东西时,它会去那里..我   提交其他内容然后顶部转到第二个

原因很简单,你正在使用ORDER BY hit_id DESC,这就是为什么最后插入的ID首先出现的原因。