首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/MySQL -邮政/问题审批系统?

PHP/MySQL -邮政/问题审批系统?
EN

Stack Overflow用户
提问于 2022-04-23 22:33:07
回答 2查看 383关注 0票数 -3

所以,我正在制作一个琐碎的游戏--我有一个页面,用户可以提交他们自己的琐碎问题,这些问题稍后会被放到游戏中(游戏中不太相关的单独部分)。无论如何,因此,防止垃圾邮件,和无关,或虚假提交/巨魔,我正在制作一个版主批准页面;这个页面显示用户提交的个人“未决”问题。(当他们提交一个问题时,它会进入一个名为'usertriviadata‘的“未决”数据库表。

然后,它在版主批准页面上显示每个悬而未决的问题,其中有一个提交按钮,其中mod/admin可以批准它。

它是这样一步一步地工作的:

  1. 页面显示(每一个琐事类别)审批页面上的每个待决问题,每个问题都有一个提交按钮。
  2. A版主可以查看它,如果他们想批准它,他们会单击“批准”按钮。如果单击“批准”按钮,系统将从“未决”'usertriviadata‘表中删除该问题,并将其插入到’已批准‘数据库表中,我将在该表中稍后使用该数据。

我遇到的问题,并没有完全弄清楚如何解决--当我单击“批准”按钮时,它会批准该类别中所有/任何悬而未决的问题。假设在“地理”类别中有三个悬而未决的问题。我点击“批准”这三个问题中的任何一个,它就会批准所有这些问题。基本上,删除和插入(在两个数据库表之间交换数据)是可行的,但我想将其个性化。我试过几种不同的方法,但我做得不太好。

有什么建议吗?代码在此图像下面(图像显示审批页面,以了解在出现多个未决问题时的一般情况):

在这里输入图像描述

代码语言:javascript
复制
    <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]
代码语言:javascript
复制
EN

回答 2

Stack Overflow用户

发布于 2022-04-23 23:42:39

你有一个单独的表格来回答每个问题,等待批准:

代码语言:javascript
复制
<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来指示哪个表单代表哪个问题。按下这些按钮中的任何一个都会做同样的事情。在处理提交的脚本中,运行以下查询:

代码语言:javascript
复制
    $sql = "SELECT ... FROM usertriviadata WHERE category='geography'";

注没有WHERE子句将select限制为单个问题。因此,您将使用与要批准的相同的查询来呈现问题列表。看起来,您试图在问题循环中使用if (isset($_GET["submit"])) {作为条件,以确定选择了哪些问题。然而,这是行不通的。只有一个$_GET["submit"] --每个问题都不是一个。所以点击任何一个表单按钮都会复制所有的问题。

让一个脚本同时执行表单呈现和表单处理,会让自己感到困惑。为了简单起见,我将这两个函数分开--让一个文件呈现列表,另一个文件处理表单提交。因此,表单呈现将执行类似的操作,在每个表单中包含问题id:

代码语言:javascript
复制
<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']来处理激活。

其他建议:

  • 使用POST作为表单提交,而不是GET。通常,如果请求导致对数据库的更改,则应该是POST。
  • 如果您构建的表单每个问题都有一个复选框(而不是每个问题有一个完整的表单),那么您可以允许同时批准多个问题。
  • 修正了您的SQL注入。耸耸肩说“我以后再修”是一个非常坏的习惯,尤其是从一开始就正确地做这件事并不难。
票数 0
EN

Stack Overflow用户

发布于 2022-04-24 01:22:02

编辑:不,没有。这是我觉得是朝着正确方向迈出的一步,但还是搞砸了。在这个问题上休息一下。我太沮丧了。

好的所以..。这就是你所说的,我不知道这是不是你想让我做的,但是,我做到了,而且效果完美。

代码语言:javascript
复制
    <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>

在页面底部:

代码语言:javascript
复制
    <?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注入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71984096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档