我很困惑,是的,一切都将在数据库上。而且,它确实有点深。这个问题涉及4页PHP。首先,我需要解释一下,你需要知道站点地图。网站地图就像这样 forum.php - > 论坛主题 - > discussion.php - >的 deleteTopic.php
所以,我将更清楚地解释如下所示。
Discussion.php 。此页面用于转到删除主题的新页面。因此,我将此变量(如 topic_id )传递给 deleteTopic.php ,因为我必须从 discussion.php 中检索该值。以下是这样的事情。
<a href=\"deleteTopic.php?topic_id=$topic_id\">DELETE</a>
DeleteTopic.php 。此页面用于删除所选主题,并从 discussion.php 中检索 topic_id 。
$topic_id = $_REQUEST['topic_id'];
$sql = "DELETE FROM forum_topic WHERE topic_id = $topic_id ";
mysql_query($sql);
echo "Topic has been deleted!";
header ('Location:forum-topic.php');
exit();
?>
是的,它已成功删除所选主题,但它在 forum-topic.php 上显示了一些错误,例如 unidentified thread_id和thread_name 。我意识到我已经在 forum.php 中检索了该值。因为在 deleteTopic.php 中,它具有来自 forum.php 的值。所以代码就是这样。
Forum.php 。这是所选线程转到 forum-topic.php 的地方。因此,我必须传递像thread_id和thread_name这样的变量。
<a href=\"forum-topic.php?thread_id=$thread_id&thread_name=$thread_name\">$thread_name</a>
那么,你能告诉我该怎么做吗?我不知道应该从哪里检索并将变量从 discussion.php 传递到 deleteTopic.php 并导航到 forum-topic.php 之后已成功删除所选主题。不幸的是, forum-topic.php 有一些来自 forum.php 的值。
那么,你能告诉我应该从哪里开始吗?还能带我去吗?我真的很感谢您的任何答案。干杯!
答案 0 :(得分:0)
向forum-topic.php添加逻辑以正常处理不接收任何参数,甚至接收thread_id和thread_name的无效值。应该有一些默认定义为后退。
您还可以使用会话变量来处理页面之间的记忆值。如果你之前没有使用过它们,那么php.net文档起初可能看起来有些令人生畏,但如果你搜索一些例子,它们的使用起来会非常简单。
然后请阅读SQL Injection并删除用户将$ topic_id更改为他们想要的内容,以攻击您的数据库或删除任意主题。< / p>
还强烈考虑将所有mysql函数更改为mysqli或PDO,因为不推荐使用mysql函数。 (PDO和mysqli还提供了使用参数化查询防止SQL注入的更好方法。)
很抱歉,我没有为您提供快速简便的答案,但所有这些对于改进您的代码都有很大的帮助。
答案 1 :(得分:0)
如果要存储thread_id和name的值,请将其存储在session中,并随时检索它们。
因此,在forum-topic.php中,首先检查是否有新的线程变量,并将它们添加到会话中,否则,如果您来自deleteTopic.php,则可以使用会话中的现有线程变量。 一般的想法是这样的 -
<?php
session_start();
if(isset($_GET['thread_id']) && isset($_GET['thread_name'])){
//If the GET parameters are available. Store them.
$_SESSION['thread_id'] = rawurldecode($_GET['thread_id']);
$_SESSION['thread_name'] = rawurldecode($_GET['thread_name']);
}else{
if(!isset($_SESSION['thread_id']) && !isset($_SESSION['thread_name'])){
//Error.
die('error'); //Or you can redirect.
}
}
/*
The session variables have been initialised.
*/
$t_id = $_SESSION['thread_id'];
$t_name = $_SESSION['thread_name'];
/*
From here on, instead of using $_GET['thread_id'] and $_GET['thread_name'], use $t_id and $t_name.
*/
//Rest of your code.
?>
主要问题是在从表中删除并保留线程变量后返回时处理参数。
答案 2 :(得分:0)
使用isset()
函数查看变量是否具有值:
if (isset($thread_id) && isset($thread_name)){
echo "<a href=\"forum-topic.php?thread_id=$thread_id&thread_name=$thread_name\">$thread_name</a>"; }