【问题标题】:PHP - How can I retrieve data from a database and display it in a form and make changes to it and update it?PHP - 如何从数据库中检索数据并将其显示在表单中并对其进行更改和更新?
【发布时间】:2017-02-05 13:26:28
【问题描述】:

我是 PHP 新手,我尝试 PHP 已经有一段时间了。我已经能够从我的数据库中检索数据并以表格形式查看它,但是当我尝试更改任何值时似乎无法更新它。我的代码如下。我一直在尝试一些事情,对于糟糕的代码感到抱歉

<form action="user.php" method="POST">
                <h4>Edit Account</h4>
                <input type="text" name="editstudent_number" placeholder="Enter Student Number">
                <input type="submit" name="editaccount" value="Search"><br>
                <?php
                    if (isset($_POST['editaccount'])){
                        $GLOBALS['editstudent_number'] = $_POST['editstudent_number'];
                        $editstudent = $GLOBALS['editstudent_number'];

                        $edit_sql = "SELECT username, student_number, email, password, progress, rank FROM users WHERE student_number = '$editstudent'";
                        $edit_query = mysqli_query($conn, $edit_sql);
                        $edit_fetch = mysqli_fetch_assoc($edit_query);

                        $username = $edit_fetch['username'];
                        $student_number = $edit_fetch['student_number'];
                        $email = $edit_fetch['email'];
                        $password = $edit_fetch['password'];
                        $progress = $edit_fetch['progress'];
                        $rank = $edit_fetch['rank'];

                        echo "<input type='text' name='username' value='$username' /><br>";
                        echo "<input type='text' name='student_number' value='$student_number' /><br>";
                        echo "<input type='text' name='email' value='$email' /><br>";
                        echo "<input type='text' name='password' value='$password' /><br>";
                        echo "<input type='text' name='progress' value='$progress' /><br>";
                        echo "<input type='text' name='rank' value='$rank' />";
                        echo "<input type='submit' name='editaccount' value='Save changes' />";                 
                    }

                        $GLOBALS['username'] = $_POST['username'];
                        $GLOBALS['student_number'] = $_POST['student_number'];
                        $GLOBALS['email'] = $_POST['email'];
                        $GLOBALS['password'] = $_POST['password'];
                        $GLOBALS['progress'] = $_POST['progress'];
                        $GLOBALS['rank'] = $_POST['rank'];

                        $edit_username = $GLOBALS['username'];
                        $edit_student_number = $GLOBALS['student_number'];
                        $edit_email = $GLOBALS['email'];
                        $edit_password = $GLOBALS['password'];
                        $edit_progress = $GLOBALS['progress'];
                        $edit_rank = $GLOBALS['rank'];

                    if (isset($_POST['editaccount'])){
                        $sql = "UPDATE users SET username='$edit_username', student_number='$edit_student_number', email='$edit_email', password='$edit_password', progress='$edit_progress', rank='$edit_rank' WHERE student_number = '$editstudent'";
                        $query = mysqli_query($conn, $sql);                     
                    }
                ?>
            </form>

【问题讨论】:

    标签: php html mysqli


    【解决方案1】:

    您的搜索按钮和保存更改按钮名称相同,这可能会导致冲突。

    搜索

    <input type="submit" name="editaccount" value="Search"><br>
    

    保存

    <input type='submit' name='editaccount' value='Save changes' />
    

    看看你如何在代码中有两次相同的if (isset($_POST['editaccount'])){

    更改名称。

    此外,搜索和更新使用不同的 FORM。

    这是你的代码,我已经清理了一点,希望能正常工作。

    <h4>Edit Account</h4>
    
    <!-- search form -->
    <form action="user.php" method="POST">
      <input type="text" name="editstudent_number" placeholder="Enter Student Number">
      <input type="submit" name="searchstudent" value="Search"><br>
    </form>
    
    <!-- update form -->
    <form action="user.php" method="POST">
    
    <?php
    
      if (isset($_POST['editaccount']))
      {
          $edit_username = $_POST['username'];
          $edit_student_number = $_POST['student_number'];
          $edit_email = $_POST['email'];
          $edit_password = $_POST['password'];
          $edit_progress =$_POST['progress'];
          $edit_rank = $_POST['rank'];
    
          $sql = "UPDATE users SET username='$edit_username', student_number='$edit_student_number', email='$edit_email', password='$edit_password', progress='$edit_progress', rank='$edit_rank' WHERE student_number = '$edit_student_number'";
          $query = mysqli_query($conn, $sql);                     
      }
    
      if (isset($_POST['searchstudent']))
      {
          $editstudent = $_POST['editstudent_number'];
    
          $edit_sql = "SELECT username, student_number, email, password, progress, rank FROM users WHERE student_number = '$editstudent'";
          $edit_query = mysqli_query($conn, $edit_sql);
          $edit_fetch = mysqli_fetch_assoc($edit_query);
    
          $username = $edit_fetch['username'];
          $student_number = $edit_fetch['student_number'];
          $email = $edit_fetch['email'];
          $password = $edit_fetch['password'];
          $progress = $edit_fetch['progress'];
          $rank = $edit_fetch['rank'];
    
          echo "<input type='text' name='username' value='$username' /><br>";
          echo "<input type='text' name='student_number' value='$student_number' /><br>";
          echo "<input type='text' name='email' value='$email' /><br>";
          echo "<input type='text' name='password' value='$password' /><br>";
          echo "<input type='text' name='progress' value='$progress' /><br>";
          echo "<input type='text' name='rank' value='$rank' />";
          echo "<input type='submit' name='editaccount' value='Save changes' />";                 
      }
      else
      {
        echo "Please search the student number to update the details.";
      }
    
    ?>
    
    </form>
    

    请注意,您不应该允许用户更新您的表的主键。在您的情况下,学生编号是主键,但您允许用户更新它。这将导致更新过程中的冲突和错误。

    【讨论】:

    • 同意同名属性。然而,他们可以保留他们现在拥有的东西,他们只需要添加一个额外的语句。即:if (isset($_POST['editaccount']) &amp;&amp; $_POST['editaccount']=='Save changes' ) 完全有效。
    • @Fred-ii- 哦,是的,你是对的,完全忘记了这一点。谢谢
    • 谢谢你们,我发现了错误,只是在输出周围添加了表单标签,然后从那里继续。
    • 太棒了。如果您认为有用,请采纳答案。
    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多