php url参数

时间:2008-11-19 06:18:31

标签: php mysql

我正在我的网站上工作,我正在尝试获取url参数“page”这是一个整数,它告诉在MySQL数据库中读取哪个条目,以便为所有页面添加HTML。这是我的代码,出于安全原因删除了MySQL用户名和密码:

  if ($_GET["page"]) {
  $con = mysql_connect("localhost","username","password");
  if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  }
  mysql_select_db("jmurano_pages", $con);
  $title=mysql_query("SELECT title FROM pageContent WHERE pageID=" . $_GET['page']);
  echo "<title>" . $title . "</title>\n";
  echo "</head>\n";
  echo "<body>\n";
  $content = mysql_query("SELECT content FROM pageContent WHERE pageID=" . $_GET['page']);
  echo $content;
  echo "\n</body>\n</html>";
}

这将标题设置为“资源ID#2”,将内容设置为“资源ID#3”。我想不出我做错了什么。


我仍然感到困惑。我是一个完整的PHP新手。我到底需要做什么才能访问内容和标题?

6 个答案:

答案 0 :(得分:3)

除了注入漏洞(参见John的回答),您应该使用

从mysql_query获取标题
 $res = mysql_query("SELECT title FROM pageContent WHERE pageID=" . $escapedpage);
 $title = mysql_fetch_assoc($res);
 $title = $title['title']
 $res2 = mysql_query("SELECT content FROM pageContent WHERE pageID=" . $escapedpage);
 $content = mysql_fetch_assoc($res2);
 $content = $content['content'];

但是我认为如果你按照在线mysql php教程那将是明智之举。

修改
更好的是只使用1个mysql_query,如下所示:

$res = mysql_query("SELECT title, content FROM pageContent WHERE pageID=" . $escapedpage);
$row = mysql_fetch_assoc($res);
$title = $row['title'];
$content = $row['content'];

这样可以节省脚本时间和资源,因为只需要一个mysql查询 本教程相当不错:http://www.freewebmasterhelp.com/tutorials/phpmysql

答案 1 :(得分:2)

你显然需要学习很多东西(我们都必须从某个地方开始!),所以SO上的单个答案将无法教你一切,但这里是一个启动者:

当您在SELECT查询上运行mysql_query时,它将返回以下两种情况之一:

  • 如果您的查询出错,则会返回 false
    • 有关此错误的详细信息,请致电mysql_error()
  • 如果查询正常,则会返回资源
    • 使用此资源,您可以调用其他mysql函数来查找有关您刚刚使用SELECT创建的数据集的信息。
    • mysql_fetch_assoc()将从您的查询中返回一行的关联数组。
      • 执行此操作以查看:$row = mysql_fetch_assoc($resource); print_r($row);
    • 再次调用它以检索下一行。
    • 当没有更多行时,mysql_fetch_assoc()将返回false。
      • 因此你可以像这样编写循环:
        while ($row = mysql_fetch_assoc($resource)) { // do stuff }

答案 2 :(得分:1)

这是一些伪代码。

$result = mysql_query($sql);

//for each row in the result, do stuff with it...
while ($row = mysql_fetch_array($result)){
  $title = $row["title"];
  $content = $row["content"];

  //this will show you the row data visually
  //var_dump($row);
}

作为PHP新手,学习调试(必要时使用var_dump),阅读文档和阅读教程。

此外,还有大量的php + mysql教程在线... google“php and mysql”

祝你好运!

答案 3 :(得分:1)

您应该在一个查询中检索这两个字段,因为这可能会更快。另外假设pageID始终是一个整数,您应该首先将其强制转换为整数以防止SQL注入。我会使用类似的东西:

<?php
if (isset($_GET["page"])) {
    $con = mysql_connect("localhost","username","password");
    if (!$con) {
        die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("jmurano_pages", $con);

    $pageId = (int) $_GET['page'];

    $result = mysql_query('SELECT title, content FROM pageContent WHERE pageID= ' . $pageId);

    if (!$result) {
        die(mysql_error());
    }

    $row = mysql_fetch_assoc($result);

    if (!$row) {
        die('page not found');
    }

    echo "<title>" . $row['title'] . "</title>\n";
    echo "</head>\n";
    echo "<body>\n";
    echo $row['content'];
    echo "\n</body>\n</html>";

} else{ 
    //what are you going to do if page is not passed?
}
?>

请注意

  • 您可能希望将数据库连接代码放在一个单独的位置,这样就不必将其复制到多个页面上
  • 你应该阅读有关SQL注入的内容,以及如何将HTML和PHP(表示和逻辑)分开的一些方法,否则你可能会得到非常混乱的代码

答案 4 :(得分:0)

此外,您有一个SQL注入漏洞...永远不会将$ _GET,$ _POST或其他用户提供的变量直接放入查询中。

你应该这样做:

$page = $_GET["page"];
$escaped_page = mysql_real_escape_string($page);

并将$ escaped_pa​​ge放入您的查询中。

答案 5 :(得分:0)

还有一件事......您可以在一个查询中选择标题和内容:

选择标题,内容来自....