[英]PHP/MySQL - Post/Question approval system?
所以,我正在制作一个问答游戏——我有一个页面,用户可以在其中提交他们自己的问答问题,这些问题稍后会被放入游戏中(游戏的单独部分,在这里不太相关)。 无论如何,所以要防止垃圾邮件、不相关的内容或虚假提交/喷子,我正在制作一个版主批准页面; 该页面显示用户提交的各个“未决”问题。 (当他们提交问题时,它会进入一个名为“usertriviadata”的“待定”数据库表。
然后,它会在版主批准页面上显示每个未决问题,并带有一个提交按钮,版主/管理员可以在其中批准它。
一步一步,这是它的工作原理:
我遇到的问题,无法完全弄清楚如何解决——当我单击批准按钮时,它会批准该特定类别中的所有/任何未决问题。 假设“地理”类别中有 3 个未决问题。 我在这 3 个问题中的任何一个上单击批准,它都会批准所有这些问题。 基本上,删除和插入(在两个数据库表之间交换数据)有效,但我想对其进行个性化设置。 我尝试了一些不同的东西,但我不能完全正确。
有什么建议么? 代码在此图像下方(图像显示批准页面以大致了解存在多个未决问题时的外观):
[在此处输入图片描述][1]
<div class="categories">
<h3>Geography</h3>
<?php
$sql = "SELECT questionID, category, uploaderUsername, question, correctAnswer, answerTwo, answerThree, answerFour FROM usertriviadata WHERE category='geography'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$questionID = $row['questionID'];
$category = $row['category'];
$uploaderUsername = $row['uploaderUsername'];
$question = $row['question'];
$correctAnswer = $row['correctAnswer'];
$answerTwo = $row['answerTwo'];
$answerThree = $row['answerThree'];
$answerFour = $row['answerFour'];
echo "<div class='individuals'><p>Question ID: $questionID</p> <p>Category: $category</p> <p>Uploader Username: $uploaderUsername</p> <p>Question: $question</p> <p>Correct Answer: $correctAnswer</p> <p>Answer 2: $answerTwo</p> <p>Answer 3: $answerThree</p> <p>Answer 4: $answerFour</p> <form action='' method='GET'><input type='submit' name='submit' value='Approve'/></form> </div> ";
if (isset($_GET["submit"])) {
// Move question to approved table
$sql = "INSERT INTO approved (category, uploaderUsername, question, correctAnswer, answerTwo, answerThree, answerFour)
VALUES ('$category', '$uploaderUsername', '$question', '$correctAnswer', '$answerTwo', '$answerThree', '$answerFour')";
// Error Handles
if ($conn->query($sql) === TRUE) {
echo "<p class='green'>Question approved.</p>";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
// Delete question from pending/usertriviadata table
$sql = "DELETE FROM usertriviadata WHERE questionID='$questionID'";
if ($conn->query($sql) === TRUE) {
echo "<p class='green'>Question removed from pending/usertriviadata database table. Please wait 5 seconds before approving another post.</p>";
echo "<meta http-equiv='refresh' content='5; URL=../triviaApproval/moderatorApproval' />";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
} else {
echo "No posts need approved here.";
}
?>
</div>```
If you want the CSS as well, it is here:
```html {
background-color: #AC6A6C;
font-family: "Trirong", serif;
color: #DEF706;
text-align: center;
}
.option-a {
text-align: center;
display: inline;
background-color: gray;
color: #DEF706;
font-size: 125%;
width: 100px;
padding: 0.5%;
text-decoration: none;
}
.option-a:hover {
cursor: pointer;
background-color: #4E4E4D;
}
.option-a:focus {
padding: 0.3%;
background-color: blue;
}
.individuals {
padding: 1%;
display: inline-block;
border: 1px solid;
}
.green {
color: green;
}
```[enter image description here][2]
你有这个,每个待批准的问题都有一个单独的表格:
<form action='' method='GET'>
<input type='submit' name='submit' value='Approve'/>
</form>
<form action='' method='GET'>
<input type='submit' name='submit' value='Approve'/>
</form>
<form action='' method='GET'>
<input type='submit' name='submit' value='Approve'/>
</form>
但请注意,它们都是一样的。 没有 ID 来指示哪个表单代表哪个问题。 按下这些按钮中的任何一个都会做同样的事情。 在处理提交的脚本中,您运行此查询:
$sql = "SELECT ... FROM usertriviadata WHERE category='geography'";
请注意,没有 WHERE 子句将 select 限制为单个问题。 因此,您使用相同的查询来呈现您要批准的问题列表。 您似乎正在尝试在问题循环内使用if (isset($_GET["submit"])) {
作为确定选择了哪些问题的条件。 但是,这是行不通的。 只有一个$_GET["submit"]
-- 每个问题没有一个。 因此,单击任何一个表单按钮都会复制所有问题。
让一个脚本同时执行表单呈现和表单处理会让您感到困惑。 为了简单起见,我将这两个函数分开——让一个文件呈现列表,让第二个文件处理表单提交。 因此,您的表单呈现器将执行类似这样的操作以在每个表单中包含问题 ID:
<form action='approve.php' method='POST'>
<input type='hidden' name='questionId' value='<?= $questionID =?'>
<input type='submit' name='submit' value='Approve'/>
</form>
然后,在approve.php
中,在 WHERE 子句中使用$_POST['questionId']
来处理激活。
其他建议:
编辑:不,不是。 我觉得这是朝着正确方向迈出的一步,但它仍然搞砸了。 在这个问题上休息一下。 我很沮丧。
好的,所以...这属于您所说的内容,我不确定这是否正是您要我做的,但是,我做到了,而且效果完美。
<div class="categories">
<h3>Geography</h3>
<?php
$sql = "SELECT questionID, category, uploaderUsername, question, correctAnswer, answerTwo, answerThree, answerFour FROM usertriviadata WHERE category='geography'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$questionID = $row['questionID'];
$category = $row['category'];
$uploaderUsername = $row['uploaderUsername'];
$question = $row['question'];
$correctAnswer = $row['correctAnswer'];
$answerTwo = $row['answerTwo'];
$answerThree = $row['answerThree'];
$answerFour = $row['answerFour'];
echo "<div class='individuals'><p>Question ID: $questionID</p> <p>Category: $category</p> <p>Uploader Username: $uploaderUsername</p> <p>Question: $question</p> <p>Correct Answer: $correctAnswer</p> <p>Answer 2: $answerTwo</p> <p>Answer 3: $answerThree</p> <p>Answer 4: $answerFour</p> <form action='' method='POST'><input type='hidden' name='questionId' value='<?= $questionID =?'><input type='submit' name='submit' value='Approve'/></form> </div> ";
}
} else {
echo "No posts need approved here.";
}
?>
</div>
在页面底部:
<?php
if (isset($_POST["submit"])) {
// Move question to approved table
$sql = "INSERT INTO approved (category, uploaderUsername, question, correctAnswer, answerTwo, answerThree, answerFour)
VALUES ('$category', '$uploaderUsername', '$question', '$correctAnswer', '$answerTwo', '$answerThree', '$answerFour')";
// Error Handles
if ($conn->query($sql) === TRUE) {
echo "<p class='green'>Question approved.</p>";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
// Delete question from pending/usertriviadata table
$sql = "DELETE FROM usertriviadata WHERE questionID='$questionID'";
if ($conn->query($sql) === TRUE) {
echo "<p class='green'>Question removed from pending/usertriviadata database table. Please wait 5 seconds before approving another post.</p>";
echo "<meta http-equiv='refresh' content='5; URL=../triviaApproval/moderatorApproval' />";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
?>
现在我将处理 SQL 注入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.