【问题标题】:automatically create new pages with php and mysqli使用 php 和 mysqli 自动创建新页面
【发布时间】:2016-07-13 03:51:34
【问题描述】:

我仍然对 php 和 mysqli 感兴趣,有很多东西要学,但在这一点上,这个问题是我最重要的优先事项之一。

我对这个问题进行了一些研究,但老实说,目前我对我的水平相当复杂的东西感到不知所措。我想找到最简单最有效的方法来“自动”生成大量页面,每个页面都包含不同的数据。

下面第 1 页的代码示例非常简化了,因为实际页面实际上有很多东西,但我希望简化的示例可以说明我的观点。

<?php

$servername = "servername";
$username = "username";
$password = "password";
$db= "db";

$conn = mysqli_connect("servername","username","password","db");


$query = "SELECT word FROM demo WHERE group=1";
$result = $conn->query($query);
$row = mysqli_fetch_assoc($result);
$word = $row['word'];

echo $word;

?>

在我的表中,“组”列中有 500 个条目(记录?),编号为 1、2、3 等,一直到 500。 出于我的特定目的,我绝对需要创建与组一样多的在线页面——在本例中为 500 个页面。

第 2 页的回显必须引用第 2 组,第 3 页的回显必须引用第 3 组,依此类推。

显然,有一种方法可以做到这一点,而无需复制和粘贴代码 500 次并手动更改每个组中的组!哈哈。但最简单的方法是什么?

提前感谢您的理解和帮助,不管怎样,祝您有美好的一天。

【问题讨论】:

  • 了解$_GET参数。
  • group 是真实的列名 (dev.mysql.com/doc/refman/5.7/en/keywords.html) 吗?你不应该需要 500 页。拥有 1 个动态构建其内容的页面。使用GET 参数来了解用户在哪个页面上。使用参数化查询。
  • 谢谢你们。我将研究 $_GET 参数和参数化查询。不,“组”不是实际的字段名称。但如果是这样,那会是个问题吗?
  • 是的,groupmysql 中的保留词。请参阅链接的文档。带有(R) 的所有内容都是保留术语,除非在反引号中(或者您可以始终反引号),否则不能使用。

标签: php mysqli


【解决方案1】:

如果我对您的理解正确,我相信您正在等待动态地从数据库创建页面。您可以在请求http://yoursite.com/page.php?group=1. 中使用get 变量 然后在您的代码中更新您的查询:

$query = "SELECT word FROM demo WHERE group=".$_GET['group'];

该查询是不安全的,因为任何用户都可以将原始 mysql 注入 $_GET['group'] 变量。

$group = mysqli_real_escape_string($conn, $_GET['group']);
$query = "SELECT word FROM demo WHERE `group`='$group'";

这样更安全。

【讨论】:

  • 已编辑。建议新用户使用参数化查询。
  • 这个查询会有语法错误,因为group是mysql的保留字。
  • 您应该在参数绑定警察到达之前删除您更安全的部分。
  • 清除错别字。我同意应该使用陈述,但这超出了回答他们问题的范围。
  • 谢谢大家。我会尽力而为。顺便说一句,感谢有关 mysql 注入的提示。我正在阅读它以及表单等的其他安全问题,但为了我自己的练习/学习,我现在优先尝试解决这 500 页的事情。在我将它们从私人个人演示带到公共之前,我会确保我有适当的安全性等等。但我现在要花点时间才能让这个 GET 变量的事情正确......一次一件事
【解决方案2】:

所以 PHP 默认会在它访问的任何目录中寻找一个名为 index.php 的文件。您可以将这样的文件放在 public_html 或 www 的根目录或您的站点访问的任何位置。现在在此文件中,您可以执行以下操作:

<?php
    if($_GET['group']){ //Make sure you have the var
         $query = "SELECT word FROM demo WHERE `group`=?"; //The query with param
        if ($stmt = mysqli_prepare($conn, query){ // try it out
            mysqli_stmt_bind_param($stmt, "i", $_GET['group']); // bind the data
            $stmt->execute(); //run it
            $result = $stmt->get_result(); // get results

            //use result to echo and stuff
        }
    } else {
        //Do something incase there is not a group specified.
        echo "Nothing here";
    }
?>

现在,当您访问您的站点时,您会看到类似“localhost/index.php”的内容,但在此处看不到任何内容,但如果您输入 localhost/index.php?group='55',您将可以访问结果中的第 55 页数据。

【讨论】:

  • 非常感谢书呆子提供的详细示例。老实说,我仍然对一些基础知识感到困惑,认为我能够立即使其工作。我想我需要更多地学习/练习,这样我才能理解你们在代码中使用的一些我不太理解的东西,但我真的很感谢输入和示例。最终,我将准备好正确使用它,并掌握代码中的所有内容和功能。再次感谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 2023-03-14
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多