如何从 url 获取 ID 值?

发布于 2024-12-15 09:44:18 字数 2157 浏览 3 评论 0原文

我正在尝试使用教程创建自己的论坛。我已经修正了很多错误,还剩下 1 个错误要做。

当您在主题上发布回复时,它会将您的回复保存在 MySQL 数据库中。您的回复将有一个与您回复的线程 ID 相匹配的 int,称为 Question_id。

我无法让我的代码从 URL 栏中获取线程 id。

这些是应该完成这项工作的 2 行代码:

$id = $_GET['id'];

$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";

这是整个文件 add_answer.php

<?php

$host="XXXXXX"; // Host name
$username="XXXXXX"; // Mysql username
$password="XXXXXX"; // Mysql password
$db_name="XXXXXX"; // Database name
$tbl_name="XXXXXX"; // Table name

// Connect to server and select database.
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 hidden field
$id = $_GET['id'];
var_dump($id);

// Find highest answer number.
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);

// $result=mysql_query($sql) or die(mysql_error());

// add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1
if ($rows) {
    $Max_id = $rows['Maxa_id']+1;
}
else {
    $Max_id = 1;
}

// get values that sent from form
$a_name=$_POST['a_name'];
$a_email=$_POST['a_email'];
$a_answer=$_POST['a_answer'];

$datetime=date("d/m/y H:i:s"); // create date and time

// Insert answer
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
$result2=mysql_query($sql2) or die(mysql_error());

if($result2)
{
    echo "Successful<BR>";
    echo "<meta http-equiv='refresh' content='4;url=index.php?content=main_forum' />";

    // If added new answer, add value +1 in reply column
    $tbl_name2="forum_question";
    $sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
    $result3=mysql_query($sql3);

}
else {
    echo "An error as occured. Please report this to administrator. ID: FAA01.";
}

mysql_close();
?>

I am trying to make my own forums using a tutorial. I have already fixed quite a lot of errors and I have 1 left to do.

When you post a reply on a thread it will save your reply in a MySQL database. You reply will have an int that matches with the thread id you replied on, called question_id.

I cant get my code to get the thread id from the URL bar.

These are the 2 lines of code that should do the work:

$id = $_GET['id'];

$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";

And this is the entire file add_answer.php

<?php

$host="XXXXXX"; // Host name
$username="XXXXXX"; // Mysql username
$password="XXXXXX"; // Mysql password
$db_name="XXXXXX"; // Database name
$tbl_name="XXXXXX"; // Table name

// Connect to server and select database.
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 hidden field
$id = $_GET['id'];
var_dump($id);

// Find highest answer number.
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);

// $result=mysql_query($sql) or die(mysql_error());

// add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1
if ($rows) {
    $Max_id = $rows['Maxa_id']+1;
}
else {
    $Max_id = 1;
}

// get values that sent from form
$a_name=$_POST['a_name'];
$a_email=$_POST['a_email'];
$a_answer=$_POST['a_answer'];

$datetime=date("d/m/y H:i:s"); // create date and time

// Insert answer
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
$result2=mysql_query($sql2) or die(mysql_error());

if($result2)
{
    echo "Successful<BR>";
    echo "<meta http-equiv='refresh' content='4;url=index.php?content=main_forum' />";

    // If added new answer, add value +1 in reply column
    $tbl_name2="forum_question";
    $sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
    $result3=mysql_query($sql3);

}
else {
    echo "An error as occured. Please report this to administrator. ID: FAA01.";
}

mysql_close();
?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花开柳相依 2024-12-22 09:44:18

你的 $_GET[id] 在接触 mysql 之前应该被清理。就目前情况而言,您的数据库确实面临着受到攻击的危险。我建议使用 PDO

重新学习一些东西很糟糕,但如果你正在学习,最好把它做对。

至于你的问题……我不知道。我会尝试 echo $sql2;并确保查询看起来正确。还可以 print_r($_GET) 查看您的获取数组。

your $_GET[id] should be sanitized before touching mysql with it. As it stands right now you are in very real danager of an attack on your database. I suggest using PDO

It sucks to re-learn something, but if you are learning, its better to do it right.

As for your question...I don't know. I would try echo $sql2; and make sure the query looks right. Also print_r($_GET) to see your get array.

狼性发作 2024-12-22 09:44:18

您必须一次调试一件事!你说:

我无法让我的代码从 URL 栏中获取线程 id。

因此,第一个要查看的地方是浏览器的地址栏,即 URL 所在的位置。如果第一行代码不正确,为什么还要关心接下来的一百行代码呢?如果您的线程 ID 是 999 并且您希望此代码获取这样的 ID:

$id = $_GET['id'];

...您需要在 URL 中的 ? 符号之后看到 id=999(其中是强制性的)并且在 # 符号之前(这是可选的)。

如果此处没有 ID,您应该会收到通知:

注意:未定义索引:id

如果没有,则说明您没有正确配置 PHP。最简单的方法是找到您的 php.ini 文件,设置这些指令:

error_reporting = E_ALL
display_errors = On

... 并重新启动您的 Web 服务器。

最后,学习使用var_dump()

You have to debug one thing at a time! You say:

I cant get my code to get the thread id from the url bar.

so the first place to look at is your browser's location bar, where the URL is. Why care about the next hundred lines of code if the first one is not right? If your thread ID is 999 and you want this code to fetch such ID:

$id = $_GET['id'];

... you need to see id=999 in the URL, after the ? symbol (which is mandatory) and before the # symbol (which is optional).

If ID is not here, you should be getting a notice:

Notice: Undefined index: id

If you don't, you haven't configured PHP properly. The simplest way is to find your php.ini file, set these directives:

error_reporting = E_ALL
display_errors = On

... and restart your web server.

Finally, learn to use var_dump().

故事还在继续 2024-12-22 09:44:18
  1. $_GET['id'] 存在吗?例如,它实际上存在于 URL 中吗?使用的确切 URL 是什么?仔细检查是否存在任何大写字母,因为您似乎经常混合大小写(提示:仅在代码中使用小写字母)

  2. 了解 addslashesmysql_real_escape_string,否则有人会将您的服务器变成熔化的残骸。

  3. 您有多余的错误检查。

    $result2=mysql_query($sql2) 或 die(mysql_error());
    // ...
    if( $result2) {...} else {...}
    

最后一点是多余的,因为如果 $result2 为 false 那么它就已经死了。

  1. Does $_GET['id'] exist? As in, is it actually present in the URL? What is the exact URL used? Double-check there aren't any uppercase letters in the way, since you appear to mix cases a lot (tip: only use lower case letters in code)

  2. Learn about addslashes and mysql_real_escape_string, otherwise someone WILL reduce your server to a melted wreck.

  3. You have redundant error checking.

    $result2=mysql_query($sql2) or die(mysql_error());
    // ...
    if( $result2) {...} else {...}
    

That last bit is redundant, since if $result2 is false then it's already died.

拥有 2024-12-22 09:44:18

如果您的表单是通过 post 发送的,您应该通过以下方式获取 id:

$id = $_POST['id'];

If you form is sent by post you should get the id with:

$id = $_POST['id'];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文