我已经尝试了好几个小时,然后在这里搜索找到答案,但是找不到答案。

(我会尽力清楚地解释它):

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

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

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

这是代码的问题:

我有“数据库中的此顺序”这些名称:Adam,Bell,Carlos,David

如果报告者的名字是Bell,并且管理员将其更改为Adam,然后单击Submit。如果表格没有问题,表格将被正确提交。但是,如果页面信息有任何其他问题(例如错误的电话格式设置),则会显示验证,这就是我遇到的问题:所选名称不固定!因此,名称将保留为Bell NOT Adam

疯狂的事情是,如果报告者的名字是亚当,管理员将其更改为Bell,然后单击Submit。如果页面信息有任何问题,该名称将与Bell保持一致!

重点是:

如果管理员将名称从“ Adam”更改为Bell,Carlos或David,则该名称将具有粘性。因为亚当是名字顺序的名字。

如果名称是Bell,那么如果管理员仅将名称更改为Carlos或David,则该名称可能会发粘(Carlos会发粘,与David相同),但不是Adam!否则名称将回到贝尔。

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

不能更改大卫以保持其他名称不变,因为这是订单的姓氏。

你明白了吗?

如果名称为Carlos,则管理员选择Bell即可更改名称,该名称在表单中不会发粘。它将回到卡洛斯。另一方面,如果名称是Carlos,并且管理员选择David来更改名称,则该名称将是粘性的(这是因为我认为名称的顺序)或因为“ foreach”已通过名称亚当,贝尔,所以当您到达卡洛斯时,他们不会很黏腻,但是对大卫来说还可以,因为大卫是姓氏(在卡洛斯名字之后)

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

(很长的问题,我很抱歉,但是您看到的这个问题很复杂)

<?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>

最佳答案

问题在于,发布表单时,您正在获取和使用数据库中的数据而不是发布的数据。至少对于username

尝试更改:

$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 - 提交表单后,使用MySQL中的MySQL数据进行粘稠选择不会保留所有数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46374125/

10-11 01:41
查看更多