如何在提交并执行更新语句后刷新页面以显示更新的值?

How to do a page refresh after submitting and executing an update statement to show the updated values?

我必须单击更新按钮,然后在数据库中进行更新并刷新以在同一页面上显示更新后的值。这些值也必须在数据库中更新。我一直在尝试进行刷新,但它不起作用。需要一些帮助和指导。除了页面刷新还有其他选择吗?可以不刷新页面吗?

      <?php
      //initalizing the query
      $id =  $_GET['id'];
      $query = "SELECT * FROM new_default_reports WHERE id = '$id'";
      $result = $conn->query($query);
      $row = $result->fetch_assoc();
      ?>

      <input type="button" id="btnShow" style="overflow:hidden;margin- left:1400px;font-weight:bold;background-color:lightgray" value="Edit Default Reports" />
      <div id="dialog" align="center">
      <form action = "" method="post">
      <label> SQL Statement</label>
      <textarea name="sqlst" style="width:100%;height:40%;" class = "form-control"><?php echo $row['sql_statement']?></textarea><br>
      <label> X axis: </label>
      <input type="text" name="x" class = "form-control" value="<?php echo $row['x_axis'] ?>"><br>
      <label> Y axis: </label>
      <input type="text" name="y" class = "form-control"  value="<?php echo $row['y_axis'] ?>"><br>
      <input type="submit" name = "set" value="Update" style="background-color:darkred;width:100px;color:white;font-weight:bold" onclick="window.location.reload();"/>
      </form>
      </div>

      <?php 
      if (isset($_POST['set'])){
      $query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
      $result = $conn->query($query);
      header("Refresh: 0; url=previewgraphs.php?id=".$id);
      }
      ?>

更新:

  <input type="button" id="btnShow"
   style="overflow:hidden; margin-left:1400px; font-weight:bold; background-color:lightgray" value="Edit Default Reports">
<div id="dialog" align="center">
<form action="previewgraphs.php?id=$id" method="post">
    <label>SQL Statement</label>
    <textarea name="sqlst" style="width:100%; height:40%;" class="form-control">
        <?php echo $row['sql_statement']?>
    </textarea>
    <br>
    <label>X axis: </label>
    <input type="text" name="x" class="form-control"
           value="<?php echo $row['x_axis'] ?>">
    <br>
    <label>Y axis: </label>
    <input type="text" name="y" class="form-control"
           value="<?php echo $row['y_axis'] ?>">
    <br>
    <input type="submit" name="set" value="Update"
           style="background-color:darkred;width:100px;color:white;font-weight:bold">
    <input type="submit" name="submitted" value="Submit the form">
</form>
 </div>

   <?php 
   if (isset($_POST['submitted'])){
  $query = "UPDATE new_default_reports SET sql_statement  ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
  $result = $conn->query($query);

  // make a query to get the updated result and display it on the page
  $select_query = "SELECT sql_statement, x_xis, y_axis FROM new_default_reports WHERE id = $id";
  $select_result = $conn->query($select_query);
  if ($select_result->num_rows == 1) {
      echo "You have successfully updated the database.";
      $row = $select_result->fetch_assoc();
      echo $row['sql_statement'];
      echo $row['x_axis'];
      echo $row['y_axis'];
  }
}
  ?>

header 函数在您的情况下不起作用,因为您在尝试设置 header 之前已经输出了。 解决方案是反转 php 和 html 代码,使 php 代码位于文档的最开头。

小提示,现在你其实不需要刷新了。

编辑 包含 select 查询。

<?php 
    if (isset($_POST['set'])){
        $query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
        $result = $conn->query($query);
        //header("Refresh: 0; url=previewgraphs.php?id=".$id);//not needed
        $select_query = "SELECT sql_statement, x_xis, y_axis FROM new_default_reports WHERE id = $id";
        $select_result = $conn->query($select_query);
        if ($select_result->num_rows == 1) {
            $row = $select_result->fetch_assoc();
        }
    }

?>

 <input type="button" id="btnShow" style="overflow:hidden;margin- left:1400px;font-weight:bold;background-color:lightgray" value="Edit Default Reports" />
<div id="dialog" align="center">
    <form action = "" method="post">
        <label> SQL Statement</label>
        <textarea name="sqlst" style="width:100%;height:40%;" class = "form-control"><?php echo $row['sql_statement']?></textarea><br>
        <label> X axis: </label>
        <input type="text" name="x" class = "form-control" value="<?php echo $row['x_axis'] ?>"><br>
        <label> Y axis: </label>
        <input type="text" name="y" class = "form-control"  value="<?php echo $row['y_axis'] ?>"><br>
        <input type="submit" name = "set" value="Update" style="background-color:darkred;width:100px;color:white;font-weight:bold" />
    </form>
</div>

并删除 onclick="window.location.reload();"

更新查询后请从数据库中获取更新值。

请试试这个代码:-

<?php 
    if (isset($_POST['set'])){
        $query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
        $result = $conn->query($query);

        $select_query = "SELECT * FROM new_default_reports where id = $id";
        $select_result= $conn->query($select_query );
        $row = $select_result->fetch_assoc();
    }
?>

<input type="button" id="btnShow" style="overflow:hidden;margin- left:1400px;font-weight:bold;background-color:lightgray" value="Edit Default Reports" />
<div id="dialog" align="center">
    <form action = "" method="post">
        <label> SQL Statement</label>
        <textarea name="sqlst" style="width:100%;height:40%;" class = "form-control"><?php echo $row['sql_statement']?></textarea><br>
        <label> X axis: </label>
        <input type="text" name="x" class = "form-control" value="<?php echo $row['x_axis'] ?>"><br>
        <label> Y axis: </label>
        <input type="text" name="y" class = "form-control"  value="<?php echo $row['y_axis'] ?>"><br>
        <input type="submit" name = "set" value="Update" style="background-color:darkred;width:100px;color:white;font-weight:bold" />
    </form>
</div>

我会这样做:

<input type="button" id="btnShow"
       style="overflow:hidden; margin-left:1400px; font-weight:bold; background-color:lightgray" value="Edit Default Reports">
<div id="dialog" align="center">
    <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>"
          method="post">
        <label>SQL Statement</label>
        <textarea name="sqlst" style="width:100%; height:40%;" class="form-control">
            <?php echo $row['sql_statement']?>
        </textarea>
        <br>
        <label>X axis: </label>
        <input type="text" name="x" class="form-control"
               value="<?php echo $row['x_axis'] ?>">
        <br>
        <label>Y axis: </label>
        <input type="text" name="y" class="form-control"
               value="<?php echo $row['y_axis'] ?>">
        <br>
        <input type="submit" name="set" value="Update"
               style="background-color:darkred;width:100px;color:white;font-weight:bold"">
        <input type="submit" name="submitted" value="Submit the form">
    </form>
</div>

<?php 
    if (isset($_POST['submitted'])){
      $query = "UPDATE new_default_reports SET sql_statement  ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
      $result = $conn->query($query);

      // make a query to get the updated result and display it on the page
      $select_query = "SELECT sql_statement, x_axis, y_axis FROM new_default_reports WHERE id = $id";
      $select_result = $conn->query($select_query);
      if ($select_result->num_rows == 1) {
          echo "You have successfully updated the database.";
          $row = $select_result->fetch_assoc();
          echo $row['sql_statement'];
          echo $row['x_axis'];
          echo $row['y_axis'];
      }
    }
?>

因此您不需要刷新页面,而是将表单发送给它自己。这将导致另一个请求。如果表单已发送,if 子句中的 php 代码将被执行,数据库将被更新。你的任务是进行 select 查询以获取更新的结果并将其显示在页面上。

如果用户在每次获取请求时打开带有表单的页面,她将看不到来自数据库的任何结果。

在编写 HTML 时,您还应该尝试保持一致并在整个项目中保持代码约定。对于单个标签 XML-like style 是 <input \>,HTML-style 是 <input>.

希望这对您有所帮助,同时也为您提供了解决问题的另一种观点。

编辑:

我从您的输入元素中删除了 onclick 事件并添加了一个提交按钮。检查表单是否已发送时,请在您的 if 子句中查找提交按钮。如果你愿意,你可以使用 <button type="submit">Submit the form</button> 而不是 <input type="submit">

另一个编辑:

我添加了简单的 select 查询并在页面上显示了更新后的报告。 这是我的想法:

  • 用户发送 GET 请求 - 显示表单
  • 用户发送 POST 请求(提交表单)- 它被发送给自己,显示来源,如果更新成功,用户会得到反馈,显示更新的值

当创建这样的东西时,我总是在 CRUD 上思考 - 创建、检索、更新、显示。

表单应更新数据库中的条目。 对于检索部分,您最好使用另一个视图,只显示结果,而不显示表单。

您当然可以将表单发送到显示结果的页面*,但我认为这不是一个好习惯。如果更新操作成功,用户需要一些反馈。

例如这样的事情:

<form action="<?php echo 'previewgraphs?id=$id'; ?>">

你不应该把太多的逻辑塞进一个部分。重新考虑您的设计。我还建议您使用实现 MVC 模式的框架。你有一个很大的选择。该框架将处理很多事情并为您提供语义 URLs,因此您将拥有类似:

/reports
/reports/1

而不是将所有参数附加到 URL。

首先重构你的代码。 代码的第一部分必须保存值,以防提交更改。然后你再次从数据库中读取并显示结果。

但这可能是浏览器或代理缓存问题。我有几个非常有用的标签:

        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Expires" CONTENT="-1">
        <meta http-equiv="cache-control" content="no-cache">

将它们放在 html 部分。较旧的 IE 有时会用代理做一些奇怪的事情。

干杯,卡斯滕