php url参数
我正在我的网站上工作,我正在尝试获取url参数页面,它是一个整数,告诉在MySQL数据库中读取哪个条目,该条目保存所有页面的HTML。以下是我的代码,出于安全原因删除了MySQL用户名和密码: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()); }
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资源句柄作为变量。把手是一个很难掌握的概念,但它们确实很有用另见