Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php url参数_Php_Mysql - Fatal编程技术网

php url参数

php url参数,php,mysql,Php,Mysql,我正在我的网站上工作,我正在尝试获取url参数页面,它是一个整数,告诉在MySQL数据库中读取哪个条目,该条目保存所有页面的HTML。以下是我的代码,出于安全原因删除了MySQL用户名和密码: if ($_GET["page"]) { $con = mysql_connect("localhost","username","password"); if (!$con) { die('Could not connect: ' . mysql_error()); }

我正在我的网站上工作,我正在尝试获取url参数页面,它是一个整数,告诉在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新手。我需要做什么才能访问内容和标题?

您应该阅读手册

返回值

用于选择、显示、描述、解释和 返回resultset的其他语句, mysql\u查询成功后返回一个资源, 或错误为FALSE

对于其他类型的SQL语句, 插入、更新、删除、删除等,mysql\u查询 成功时返回TRUE,错误时返回FALSE

返回的结果资源应传递给mysql_fetch_数组, 和其他用于处理结果表的函数,以访问返回的数据


此外,您还有一个SQL注入漏洞。。。切勿将$\u GET、$\u POST或其他用户提供的变量直接放入查询中

你应该做:

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

并将$escape_页面放入您的查询中。

除了注入漏洞,请参见John的答案,您应该使用

 $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_查询,如下所示:

$res = mysql_query("SELECT title, content FROM pageContent WHERE pageID=" . $escapedpage);
$row = mysql_fetch_assoc($res);
$title = $row['title'];
$content = $row['content'];
这将节省您的脚本时间和资源,因为只需要一个mysql查询。
本教程相当不错:

这里有一些psuedo代码

$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教程。。。googlephp和mysql


祝你好运

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


从……中选择标题、内容

很明显,你有很多东西需要学习,我们都必须从某个地方开始!,所以一个简单的答案并不能教会你一切,但这里有一个开始:

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

如果查询中有错误,它将返回false。 有关此错误的详细信息可通过调用mysql\u error获得 如果查询正常,它将返回一个资源 使用此资源,您可以调用其他mysql函数来查找您刚才使用SELECT创建的数据集的相关信息。 mysql\u fetch\u assoc将从查询返回一行的关联数组。 执行此操作以查看:$row=mysql\u fetch\u assoc$resource;打印r$行; 再次调用它以检索下一行。 当没有更多行时,mysql\u fetch\u assoc将返回false。 因此,您可以编写如下循环: 而$row=mysql\u fetch\u assoc$resource{//do stuff}
您应该在一个查询中检索这两个字段,因为这样可能会更快。另外,假设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表示和逻辑分离的方法,否则您可能会得到非常混乱的代码
更妙的是:$page=isset$\u GET[page]?intval$\u GET[第页]:-1;这是一个很好的建议,但我投了反对票,因为它甚至没有试图回答这个问题。是的,这应该可以解决它。OP没有从资源中获取数据,而是使用$content资源句柄作为变量。把手是一个很难掌握的概念,但它们确实很有用另见