我有一个论坛,在那个论坛上,人们可以在他们选择的类别中创建一个帖子,但我想检查该类别是否存在,但我不知道如何,因为知道我是否在URL中输入另一个类别号码我仍然看到页面。
这是我的代码
$kategoriID = $_GET['kategoriID'];
if(!isset($overskrift) || !isset($indhold) || !isset($fejl))
{
$overskrift = "";
$indhold = "";
$fejl = false;
}#Lukker if isset overskrift,indhold
if(isset($kategoriID))
{
#tjek om kategori findes
$mysql = connect();
$stmt = $mysql->prepare("SELECT count(fk_forum_kategori) As t_id FROM forum_traad WHERE fk_forum_kategori = '$kategoriID'") or die($mysql->error);
$stmt->bind_result($t_id);
$stmt->execute() or die($mysql->error);
$stmt->fetch();
if($t_id <= 0)
{
echo $t_id;
$fejl == true;
echo "<br>HEj med dig!";
exit();
}
}#Lukker isset
if(isset($_POST['send'])) {
$kategoriID = $_GET['kategoriID'];
$overskrift = htmlspecialchars($_POST['overskrift']);
$indhold = htmlspecialchars($_POST['indhold']);
$godkendt = "ja";
if($fejl == true)
{
$error = "Denne kategori findes ikke";
} elseif(empty($overskrift) || empty($indhold)) {
$error = "Alle felter skal udfyldes";
} else {
$mysql = connect();
$stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, dato, godkendt) VALUES (?,?,?,?,?,?)") or die($mysql->error);
$stmt->bind_param('ssisis', $overskrift, $indhold, $kategoriID, $_SESSION['username'], $dato, $godkendt) or die($mysql->error);
$stmt->execute();
$stmt->close();
$traadID = mysqli_insert_id($mysql);
header("location: forum.traad.php?traadID=$traadID&kategoriID=$kategoriID");
}#Lukker else
}#Lukker isset send
答案 0 :(得分:1)
我认为你有一些逻辑错误。我有点猜测脚本是如何工作的,因为我不知道变量名是什么意思(它们是瑞典语?)。这是我的想法:
$kategoriID = $_GET['kategoriID'];
if(!isset($overskrift) || !isset($indhold) || !isset($fejl))
{
$overskrift = "";
$indhold = "";
$fejl = false;
}
如果未设置三个变量的任何,请将全部设置为默认值。我的猜测是这就是你的问题,这三个中的一个没有设置,所以你总是使用默认值。
if(isset($kategoriID))
{
$mysql = connect(); // let's assume this works
$stmt = $mysql->prepare("SELECT count(fk_forum_kategori) As t_id FROM forum_traad WHERE fk_forum_kategori = '$kategoriID'") or die($mysql->error);
选择与您的类别ID匹配的每一行的次数。这将永远是1.我建议SELECT COUNT(*) AS
次FROM
forum_traad WHERE
fk_forum_kategori = '$kategoriID'
(顺便说一下,如果你正在做一个准备好的陈述,你通常会做{{1} }})。
$mysql->prepare("SELECT ... WHERE id = ?"); $mysql->bind_param('d', $id);
如果给定类别没有线程,请停止执行脚本。
$stmt->bind_result($t_id);
$stmt->execute() or die($mysql->error);
$stmt->fetch();
if($t_id <= 0)
{
echo $t_id;
$fejl == true;
echo "<br>HEj med dig!";
exit();
}
}
用户已提交了自己的帖子。首先,检查它们是否缺少任何内容,如果是,则设置有用的错误消息。如果一切正常:
if(isset($_POST['send']))
{
$kategoriID = $_GET['kategoriID'];
$overskrift = htmlspecialchars($_POST['overskrift']);
$indhold = htmlspecialchars($_POST['indhold']);
$godkendt = "ja";
if($fejl == true)
{
$error = "Denne kategori findes ikke";
}
elseif (empty($overskrift) || empty($indhold))
{
$error = "Alle felter skal udfyldes";
}
else
{
将新线程插入数据库并关闭连接。
$mysql = connect();
$stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, dato, godkendt) VALUES (?,?,?,?,?,?)") or die($mysql->error);
$stmt->bind_param('ssisis', $overskrift, $indhold, $kategoriID, $_SESSION['username'], $dato, $godkendt) or die($mysql->error);
$stmt->execute();
$stmt->close();
将用户重定向到他们的新主题。但是,您正在尝试从已关闭的连接中获取最新的插入ID 。
所以,鉴于所有这些,我认为你可以通过验证他们使用的是有效的类别ID,我假设它在另一个数据库中, $traadID = mysqli_insert_id($mysql);
header("location: forum.traad.php?traadID=$traadID&kategoriID=$kategoriID");
}
}
是该表的外键。这就是我要做的事情:
fk_forum_kategori
这有帮助吗?
答案 1 :(得分:0)
"SELECT count(fk_forum_kategori) As t_id
可能不是你想要的。使用count()将返回与SQL查询中的条件匹配的行数,因此它可能始终显示类别编号1(因为每个类别编号只会在数据库中出现一次)。
你可能会想要这样的东西:
"SELECT fk_forum_kategori FROM forum_traad WHERE fk_forum_kategori = '$kategoriID'"