我已经尝试了好几个小时,然后在这里搜索找到答案,但是找不到答案。
(我会尽力清楚地解释它):
我的网站是关于报告的。每个报告将包含一些信息,其中包括报告者的姓名。记者可以从“选择”“选项”列表中选择自己的名字。
我还有另一个页面,管理员可以在其中选择报告并查看是谁撰写的,并且管理员可以从相同的“选择”“选项”列表中更改报告者的名称。
因此,当管理员选择报告时,代码将检索报告者的名称,并将其粘贴在数据库的“选择”“选项”列表中。哪个好
这是代码的问题:
我有“数据库中的此顺序”这些名称: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'>×</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'>×</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/