-1

我正在尝试使用教程制作自己的论坛。我已经修复了很多错误,我还有 1 个要做。

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

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

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

$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();
?>
4

4 回答 4

2
  1. $_GET['id']存在吗?如,它是否真的存在于 URL 中?使用的确切 URL 是什么?仔细检查是否有任何大写字母,因为您似乎经常混合大小写(提示:仅在代码中使用小写字母)

  2. 了解addslashesand mysql_real_escape_string,否则有人会将您的服务器降低到融化的残骸。

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

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

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

于 2011-11-14T13:17:18.530 回答
2

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

我无法让我的代码从 url 栏中获取线程 ID。

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

$id = $_GET['id'];

...您需要id=999在 URL 中的?符号之后(这是必需的)和#符号之前(这是可选的)看到。

如果 ID 不在这里,您应该会收到通知:

注意:未定义索引:id

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

error_reporting = E_ALL
display_errors = On

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

最后,学习使用var_dump()

于 2011-11-14T13:21:52.543 回答
2

你的 $_GET[id] 应该在用它接触 mysql 之前进行消毒。就目前而言,您正处于对您的数据库进行攻击的真正危险之中。我建议使用PDO

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

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

于 2011-11-14T13:16:22.113 回答
1

如果您的表格是由您发送的,post您应该使用以下方式获取 ID:

$id = $_POST['id'];
于 2011-11-14T13:15:19.633 回答