我正在尝试使用教程创建自己的论坛。我已经解决了很多错误,我还有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();
?>
答案 0 :(得分:2)
你的$ _GET [id]应该在用它触摸mysql之前进行清理。就目前而言,您对数据库的攻击非常真实。我建议使用PDO
重新学习一些东西很糟糕,但如果你正在学习,那么做得更好。
关于你的问题......我不知道。我会尝试echo $ sql2;并确保查询看起来正确。还有print_r($ _ GET)来查看你的get数组。
答案 1 :(得分:2)
$_GET['id']
是否存在?在,它是否实际存在于URL中?使用的确切URL是什么?仔细检查没有任何大写字母,因为你似乎混合了很多案例(提示:代码中只使用小写字母)
了解addslashes
和mysql_real_escape_string
,否则有人会将您的服务器减少到熔化的残骸。
您有冗余错误检查。
$result2=mysql_query($sql2) or die(mysql_error());
// ...
if( $result2) {...} else {...}
最后一位是多余的,因为如果$result2
为假,那么它已经死了。
答案 2 :(得分:2)
你必须一次调试一件事!你说:
我无法获取我的代码以从网址栏获取线程ID。
所以首先要看的是浏览器的位置栏,其中包含URL。如果第一行代码不正确,为什么要关心下一百行代码呢?如果您的线程ID是999,并且您希望此代码获取此类ID:
$id = $_GET['id'];
...您需要在id=999
符号(必须)之后和?
符号(可选)之前在网址中看到#
。
如果ID不在此处,您应该收到通知:
注意:未定义索引:id
如果不这样做,则表示您尚未正确配置PHP。最简单的方法是找到您的php.ini
文件,设置这些指令:
error_reporting = E_ALL
display_errors = On
...然后重新启动您的网络服务器。
最后,学会使用var_dump()。
答案 3 :(得分:1)
如果您的表单是由post
发送的,那么您应该获得以下代码:
$id = $_POST['id'];
答案 4 :(得分:0)
如果要从URL获取价值,则必须使用PHP $ _ GET [] 方法来获取信息或价值。 重要的不是:如果数据库中没有图像,请使用本教程在数据库中插入一些图像。
您可以看到以下代码和链接,以获取有关
的更多信息PHP $ _GET方法 $ _GET方法是PHP的超级全局方法。
用于解析浏览器URL并通过id扫描并检索给定的参数或信息。点击下面的链接以获取有关本教程的更多信息。
https://www.campuslife.co.in/Php/how-to-get-id-from-one-page-to-another-page.php
首页的页面ID码
<a href="display.php?myid=<?php echo $img_id; ?>" target="new window">
<img src="<?php echo $img_id; ?>" title="Nature Image" />
</a>
第二页的$ _ GET方法代码
$id = $_GET["myid"];
点击下面的链接以逐步获取信息。
https://www.campuslife.co.in/Php/how-to-get-id-from-one-page-to-another-page.php