我正在我的网站上工作,我正在尝试获取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新手。我到底需要做什么才能访问内容和标题?
答案 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
时,它将返回以下两种情况之一:
mysql_error()
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?
}
?>
请注意
答案 4 :(得分:0)
此外,您有一个SQL注入漏洞...永远不会将$ _GET,$ _POST或其他用户提供的变量直接放入查询中。
你应该这样做:
$page = $_GET["page"];
$escaped_page = mysql_real_escape_string($page);
并将$ escaped_page放入您的查询中。
答案 5 :(得分:0)
还有一件事......您可以在一个查询中选择标题和内容:
选择标题,内容来自....