【问题标题】:view_forum.php. Can't fix the get idview_forum.php。无法修复获取 ID
【发布时间】:2013-11-30 19:08:18
【问题描述】:

$id=$_GET['id']; 行有一个错误,表示 注意:未定义的索引:第 101 行的 D:\XAMPP\htdocs\view_topic.php 中的 id。我试图将“ $_GET ”更改为“ $_POST ”,但错误仍然相同。有什么帮助吗?

我正在尝试从数据库中检索 id 并列出用户发布的所有论坛主题。其他php文件可以顺利运行。我在检索帖子 ID 时遇到问题。

<?php
$host="localhost";
$username="root";
$password="";
$db_name="db";
$tbl_name="forum_question";

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id that sent from address bar 
$id=$_GET['id'];
$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
?>

【问题讨论】:

标签: php get forum


【解决方案1】:

在将数据分配给来自外部世界的变量时,始终使用 isset 构造

if(isset($_GET['id']))
{
$id=$_GET['id'];
$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
}
else
{
echo "ID was not set. Let me go and check the form again !";
}
?>

【讨论】:

  • 因使用mysql_* 函数和可能的sql注入而被否决。
【解决方案2】:

此变量必须在您的 URL 中设置。您必须检查它是否存在:

<?php
$host = "localhost";
$username = "root";
$password = "";
$db_name = "db";
$tbl_name = "forum_question";

// Connect to server and select databse.
$db = new mysqli($host, $username, $password, $db_name);

// get value of id that sent from address bar 
$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;

if($id <> 0) {
    // TODO
    // 404 Not Found
} else {
    $sql = "SELECT * FROM $tbl_name WHERE id='$id'";
    $row = $db->query($sql)->fetch_assoc();
    // TODO
    // Do Something with Data
}

您的网址必须是http://example.com/path/to/script.php?id=42

  • 我添加了(int),所以不能进行sql注入。
  • 我将mysql_* 替换为 MySQLi,请参阅对您问题的评论。
  • 我从您查询中的变量中删除了引号,您不需要它们。

【讨论】:

  • 从 mysql_ 切换到 mysqli_ 有点毫无意义,如果您仍然提倡插值和手动转义/强制转换而不是绑定参数/准备好的语句(根据不吸引人的标准注释)。
  • 你需要它来使用版本>= 4.1的MySQL函数
猜你喜欢
  • 2019-11-15
  • 2018-02-14
  • 2021-09-11
  • 2019-05-22
  • 1970-01-01
  • 2017-12-14
  • 2013-04-02
  • 2016-02-04
相关资源
最近更新 更多