首页 文章

提交表单后禁用选择选项

提问于
浏览
1

我已经尝试了一段时间了 . 我感谢您的帮助 .

我有一个有两个字段的表格 . 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'>&times;</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'>&times;</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 回答

  • 0

    如果要禁用“选择”,请使用此代码

    $('select').attr('disabled','disabled');
    
  • 0

    首先:你的代码(主要)容易受到sql注入,http://php.net/manual/de/security.database.sql-injection.php

    第二:原因很简单,你提交表格,在BACKEND中检查并重定向 . 选项启用和禁用文本框的原因仅仅是因为页面已重新加载,这就是您的默认设置 . 您可以传递一个指示您的网址失败的参数(如err = wrongArgument)或其他任何内容)并在这种情况下使用javascript禁用选项框 .

  • 0

    如果问题仅因验证而发生,您可以先通过ajax请求提交表单详细信息 . 验证它,如果没有错误,则提交它们 . 如果您使用的是jquery,那么您可以执行类似的操作

    $("#form-id").submit(function(e){
        e.preventDefault();
        $.ajax({
                    method: 'POST',
                    url: 'validate.php',
                    data: $(this).serialize(),
                    success: function(res){
                        if(res == "success") {
                            $(this).submit();
                        } else { // error }
                    },
                    fail: function(){
                        // error
                    }
                })
    })
    

    另一件事你可以做的是,如果你在验证失败后重定向到当前页面,并在结尾传递一个表示用户选中复选框的查询字符串 . 你必须给你的复选框一个名字,这样当你提交表格时它也会被提交 .

    if(isset($_POST['another_city']) and $_POST['another_city'] == "on") {
        // header("Location: ...") redirects the page to the provided location
        header("Location: question.php?checked=1"&city=".$city_name);
    }
    

    一旦你这样做,你将不得不添加代码来检查是否设置了 $_GET['checked']$_GET['city'] . 如果已设置,则可以使用js在表单中设置提供的值,如:

    PHP:

    $checked = "";
    $city = "";
    if(isset($_GET['checked']) and $_GET['checked'] == 1) {
        $checked = "checked";
    }
    if(isset($_GET['city'])) {
        $city= $_GET['city'];
    }
    

    HTML:

    <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" <?php echo $checked?> id="another_city"/>
         <input placeholder="Write your city here" class="form-control" type="text" name="new_city" id="new_city" disabled value = "<?php echo $city; ?>" >
    

相关问题