我已经尝试了一段时间了 . 我感谢您的帮助 .
我有一个有两个字段的表格 . 1-用户名 . 2-城市 .
用户可以从城市选择选项中选择他们的城市(城市来自数据库) .
但是,如果用户没有找到他/她的城市,他/她可以选中该复选框以启用文本输入以进入他/她的城市(同时选择选项将被禁用) .
问题是,如果用户编写新城市,则选择选项将被禁用(这很好),但是当用户提交表单a并且存在验证问题(例如:空用户名!)时,表单将会出现返回以下内容:
城市选择选项将启用!!
城市文本输入将被禁用(用户输入的粘性城市名称)!!
那么,如何保持文本输入中的城市名称启用值,并使城市选择选项禁用?
这是我的代码:
<title> Form </title>
<link rel="icon" type="image/png" href="images/icon/anta_ana.png">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!--[if lte IE 8]><script src="assets/js/ie/html5shiv.js"></script><![endif]-->
<link rel="stylesheet" href="assets/css/main.css" />
<!--[if lte IE 8]><link rel="stylesheet" href="assets/css/ie8.css" /><![endif]-->
<!--[if lte IE 9]><link rel="stylesheet" href="assets/css/ie9.css" /><![endif]-->
<div id="page-wrapper">
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$username = $_POST['username'];
$city_name = $_POST['city_name'];
//errors handling :
$error = array();
if(empty($username)) $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> Please write your name!
</div>";
if($city_name == 'all') $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> Please selects a city!
</div>";
if(empty($error)) {
include("dbc.php");
$q = "INSERT INTO users (username,
city_name) VALUES
('$username',
'$city_name')";
$r = mysqli_query($dbc, $q);
if($r){
echo "<script>window.open('successfully_registered.php', '_self')</script>";
}
else{
echo "error";
}
}
else{
foreach ($error as $err){
echo $err;
}
}
}
?>
<form action="question.php" method="POST" name="" dir="rtl">
<!-- Userame -->
<div class="form-group">
<label class="control-label" style="float: right;"> Username </label>
<input type="text" class="form-control" placeholder="Username" name="username" value =
<?php if(isset($_POST['username'])) echo $_POST['username'] ?>>
</div>
<!-- City -->
<div class="form-group">
<label style="float: right;">City </label>
<?php
include("dbc.php");
$qm = "SELECT DISTINCT city_name FROM cities ORDER BY city_name";
$rm = mysqli_query($dbc,$qm);
while ($row = mysqli_fetch_array($rm)){
$cities_array[] = $row['city_name'];
}
echo '<select class="form-control border-input" name="city_name" id="city_name">';
echo '<option value="all"> All </option>';
foreach($cities_array as $cities){
$selected = '';
if($_POST['city_name'] == $cities) {
$selected = 'selected="selected"';
}
echo '<option value="'.$cities.'"'.$selected.'>'.$cities.'</option>';
}
echo '</select>';
?>
</div>
<!-- Another City? -->
<div class="form-group">
<i class="fa fa-pencil-square-o" aria-hidden="true"></i> Didn't find you city? Check this box to enter your city: <input type="checkbox" id="another_city"/>
<input placeholder="Write your city here" class="form-control" type="text" name="new_city" id="new_city" disabled value =
"<?php if (isset($_POST['new_city'])) echo $_POST['new_city']; ?>" >
<script>
document.getElementById('another_city').onchange = function() {
document.getElementById('new_city').disabled = !this.checked;
if(document.getElementById('new_city').disabled){
$("#city_name").prop('disabled', false);
}
else{
$("#city_name").prop('disabled', true);
}
};
</script>
</div>
<div class="form-group">
<button type="submit" class="btn btn-info btn-fill form-control" name="submit" value="Send"><i class="fa fa-paper-plane"></i> Send </button>
</div>
</form>
</div>
3 回答
如果要禁用“选择”,请使用此代码
首先:你的代码(主要)容易受到sql注入,http://php.net/manual/de/security.database.sql-injection.php
第二:原因很简单,你提交表格,在BACKEND中检查并重定向 . 选项启用和禁用文本框的原因仅仅是因为页面已重新加载,这就是您的默认设置 . 您可以传递一个指示您的网址失败的参数(如err = wrongArgument)或其他任何内容)并在这种情况下使用javascript禁用选项框 .
如果问题仅因验证而发生,您可以先通过ajax请求提交表单详细信息 . 验证它,如果没有错误,则提交它们 . 如果您使用的是jquery,那么您可以执行类似的操作
另一件事你可以做的是,如果你在验证失败后重定向到当前页面,并在结尾传递一个表示用户选中复选框的查询字符串 . 你必须给你的复选框一个名字,这样当你提交表格时它也会被提交 .
一旦你这样做,你将不得不添加代码来检查是否设置了
$_GET['checked']
和$_GET['city']
. 如果已设置,则可以使用js在表单中设置提供的值,如:PHP:
HTML: