php - 提交表单后,在 PHP 中对来自 MySQL 的数据进行粘性选择不会粘住所有数据

标签 php html mysql forms select

我已经尝试了几个小时,并在这里四处寻找答案,但找不到答案。

(我会尽力解释清楚):

我的网站是关于报告的。每份报告都会包含一些信息,其中包括报告者的姓名。记者可以从“选择”“选项”列表中选择自己的名字。

我有另一个页面,管理员可以在其中选择报告并查看是谁撰写的,并且管理员可以从同一“选择”“选项”列表中更改报告者姓名。

因此,当管理员选择报告时,代码会检索报告者的姓名并将其粘贴在数据库中的“选择”“选项”列表中。这很好。

这是代码的问题:

我有这些名字“按照数据库中的顺序”:Adam、Bell、Carlos、David

如果报告者姓名是 Bell,管理员将其更改为 Adam,然后单击“提交”。如果表格没有问题,表格将被正确提交。但是,如果页面信息出现任何其他问题(例如,电话格式错误),验证将会显示,这就是我遇到的问题:所选的名称不粘!所以,名字将保留为贝尔而不是亚当

疯狂的是,如果记者姓名是 Adam,管理员将其更改为 Bell,然后单击“提交”。页面信息出现任何问题,该名称都会与贝尔粘在一起!

重点是:

如果管理员将名称从“Adam”更改为 Bell、Carlos 或 David,则名称将被粘住。因为 Adam 是名字顺序中的第一个名字。

如果名字是 Bell,如果管理员将其更改为 Carlos 或 David,则该名称可能会被粘住(Carlos 会被粘住,与 David 相同),但不是 Adam!否则该名称将返回 Bell。

如果名字是 Carlos,只有当管理员将其更改为 David 时,该名字才可以被粘住(只有 David 才会保持粘性,否则名字将返回到 Carlos)

David 无法更改为保留任何其他名称,因为它是订单的姓氏。

你明白重点了吗?

如果姓名是 Carlos,管理员选择 Bell 更改姓名,则该姓名不会粘在表单中。它将回到卡洛斯。另一方面,如果名称是 Carlos,并且管理员选择 David 来更改名称,则名称将被粘住(这是因为我认为名称的顺序)或者因为“foreach”已经传递了名称Adam、Bell,所以当你遇到 Carlos 时,他们不会很粘,但是,对于 David 来说没关系,因为 David 是姓氏(在 Carlos 名字之后)

那么,我的代码有什么问题???

(很抱歉问了这么长的问题,但正如您所看到的,问题很复杂)

<?php
                    //check session value:
                    if (isset($_SESSION['report_id'])){
                      $report_id = $_SESSION['report_id'];
                    }
                    else if (isset($_POST['report_id'])){
                      $report_id = $_POST['report_id'];
                    }
                    else{
                      echo "index.php";
                    }

                    //if POST "Update" :
                    if ( ($_SERVER['REQUEST_METHOD'] == 'POST') && (isset($_POST['update'])) ) {
                      $username = $_POST['username'];
                      $phone_number = $_POST['phone_number'];
                      //errors handling :
                      $error = array();
                      if(empty($phone_number)) $error[]= "<div class='alert alert-danger alert-dismissible input-sm' role='alert' dir='rtl' style='padding-top: 5px; padding-right: -5px; padding-bottom: 0px; padding-left: 0px'>
                                                        <button type='button' class='close' data-dismiss='alert' aria-label='Close'>
                                                        <span aria-hidden='true'>&times;</span>
                                                        </button>
                                                        <strong style='color: #e62e00;'>Warning !</strong> Enter a phone number!
                                                        </div>";

                      if(empty($error)){
                        include("dbc.php");
                        $qq = "UPDATE reports SET username = '$username',
                                                 section_name = '$section_name',
                                                 phone_number = '$phone_number'
                                                 WHERE report_id = '$report_id'";
                        $rr = mysqli_query($dbc, $qq);
                        if($rr){
                          echo "<script>window.open('successful_update.php', '_self')</script>";
                        }
                        else{
                          echo "<div class='alert alert-danger alert-dismissible' role='alert'>
                                                                    <button type='button' class='close' data-dismiss='alert' aria-label='Close'>
                                                                    <span aria-hidden='true'>&times;</span>
                                                                    </button>
                                                                    <strong>Warning !</strong> Something wrong!
                                                                    </div>";
                        }
                      }
                      else{
                        foreach ($error as $err){
                          echo $err;
                        }
                      }
                    }

                  <form action="report_details.php" method="POST" name="">

                    <?php
                      include("dbc.php");
                      $q = "SELECT * FROM reports WHERE report_id = '$report_id'";
                      $r = mysqli_query($dbc, $q);
                      while ($row = mysqli_fetch_array($r)){
                          $db_username = $row['username'];
                          $db_phone_number = $row['phone_number'];
                      }
                    ?>

                    <!-- Username -->
                    <div class="form-group">
                      <label>name:</label>
                      <?php
                        include("dbc.php");
                        $qq = "SELECT DISTINCT username FROM users ORDER BY username";
                        $rr = mysqli_query($dbc,$qq);
                        while ($row = mysqli_fetch_array($rr)){
                          $username_array[] = $row['username'];
                        }
                        echo '<select class="form-control border-input" name="username">';
                                                    foreach($username_array as $user){
                                                        $selected = '';
                                                        if($user == $db_username) {
                                                            $selected = 'selected="selected"';
                                                        }
                                                        if($_POST['username'] == $user) {
                                                            $selected = 'selected="selected"';
                                                        }
                                                        echo '<option value="'.$user.'"'.$selected.'>'.$user.'</option>';
                                                    }
                        echo '</select>';
                      ?>
                    </div>

                    <!-- Phone Number -->
                    <div class="form-group">
                      <label for="phone_number">Phone Number :</label>
                      <input type="text" class="form-control border-input" placeholder="Phone Number" name="phone_number" value =
                      <?php if(isset($_POST['phone_number'])) { echo $_POST['phone_number']; } else { echo $db_phone_number; } ?>>
                    </div>

                    <!-- Update Button -->
                    <div class="text-center">
                      <button type="submit" class="btn btn-warning btn-fill btn-wd" name="update" value="Update">Update</button>
                    </div>

                  </form>

最佳答案

问题在于,当发布表单时,您正在获取并使用数据库中的数据而不是发布的数据。至少对于用户名来说是这样。

尝试改变:

$db_username = $row['username']; 

$db_username = isset($_POST['username']) ? $_POST['username'] : $row['username'];

现在将使用已发布的数据(如果有),而不是数据库数据。

当您回显电话号码时,您实际上已经在执行此操作(回显电话号码时应将其用引号引起来)。

更好的选择

您实际上可以只更改这部分:

$q = "SELECT * FROM reports WHERE report_id = '$report_id'";
$r = mysqli_query($dbc, $q);
while ($row = mysqli_fetch_array($r)){
    $db_username = $row['username'];
    $db_phone_number = $row['phone_number'];
}

if (!isset($_POST['username'])) {
    // We have no post data, get it from the database
    $q = "SELECT * FROM reports WHERE report_id = '$report_id'";
    $r = mysqli_query($dbc, $q);
    while ($row = mysqli_fetch_array($r)){
        $db_username = $row['username'];
        $db_phone_number = $row['phone_number'];
    }
} else {
    // We have post data, let's use that instead
    $db_username = $_POST['username'];
    $db_phone_number = $_POST['phone_number'];
}

然后

<input type="text" class="form-control border-input" placeholder="Phone Number" name="phone_number" value="<?= $db_phone_number ?>" />

因为如果您有发布数据,则根本不需要进行数据库调用。

关于php - 提交表单后,在 PHP 中对来自 MySQL 的数据进行粘性选择不会粘住所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46374125/

相关文章:

mysql - 我如何将 mongodb 中的相同模式重写为 mySql

javascript - 如何使用 AJAX 从 php 获取值

php - 如何循环遍历日期数组并按周、月或自定义季度进行分组?

php 到 rtf,é 变成 É

php - 如何防止 whereRaw 自动对我的集合进行排序?

mysql - 如何在按日期/unix 时间戳分组时优化查询?

php - Laravel 5 : Use Server-Sent Events to push messages to browser

javascript - 带有 jQ​​uery appendTo 的表

html - CSS - 如何在不移动其他 div 的情况下将一个 div 放在浏览器的中心

javascript - Jquery preventDefault 在 android 4.4 默认浏览器上不起作用