javascript - 带 JS 的 HTML 表单在 PHP 中无法正常工作

标签 javascript php html forms

我有一个带有 JS 的表单,在使用单选按钮选择选项后隐藏和显示表单的字段。

<?php require_once 'resources/menus/adminMenu.php'; ?>
<div class="col-lg-offset-3 col-lg-6 ">
    <div class="well bs-component">
        <form class="form-group" method="post">
            <fieldset>
                <legend>Wyszukaj</legend>
                <div class="form-group" style="display: block" id="queryIndex">
                    <label for="index" class="control-label">Indeks</label>
                    <input class="form-control" id="index" name="index" type="text">
                </div>
                <div class="form-group" style="display: none" id="queryName">
                    <label for="name" class="control-label">Imię</label>
                    <input class="form-control" id="name" name="name" type="text">
                    <label for="surname" class="control-label">Nazwisko</label>
                    <input class="form-control" id="surname" name="surname" type="text">
                </div>
                <div class="form-group" style="display: none" id="queryFaculty">
                    <label for="faculty" class="control-label">Wydział</label>
                    <select class="form-control" id="faculty" name="faculty" required="required">
                        <option value=""></option>
                        <option value="Wydział A">Wydział A</option>
                        <option value="Wydział B">Wydział B</option>
                        <option value="Wydział C">Wydział C</option>
                        <option value="Wydział D">Wydział D</option>
                        <option value="Wydział E">Wydział E</option>
                    </select>
                </div>
                <div class="form-group" style="display: none" id="querySubject">
                    <label for="subject" class="control-label">Kierunek</label>
                    <select class="form-control" id="subject" name="subject" required="required">
                        <option value=""></option>
                        <option value="Kierunek AA">Kierunek AA</option>
                        <option value="Kierunek AB">Kierunek AB</option>
                        <option value="Kierunek AC">Kierunek AC</option>
                        <option value="Kierunek BA">Kierunek BA</option>
                        <option value="Kierunek BB">Kierunek BB</option>
                        <option value="Kierunek BC">Kierunek BC</option>
                        <option value="Kierunek CA">Kierunek CA</option>
                        <option value="Kierunek CB">Kierunek CB</option>
                        <option value="Kierunek CC">Kierunek CC</option>
                        <option value="Kierunek DA">Kierunek DA</option>
                        <option value="Kierunek DB">Kierunek DB</option>
                        <option value="Kierunek DC">Kierunek DC</option>
                        <option value="Kierunek EA">Kierunek EA</option>
                        <option value="Kierunek EB">Kierunek EB</option>
                        <option value="Kierunek EC">Kierunek EC</option>
                    </select>
                </div>
                <div class="form-group" style="display: none" id="querySystem">
                    <label for="system" class="control-label">System</label>
                    <select class="form-control" id="system" name="system" required="required">
                        <option value=""></option>
                        <option value="st">Stacjonarne</option>
                        <option value="nst">Niestacjonarne</option>
                    </select>
                </div>
                <div class="form-group" style="display: none" id="queryDegree">
                    <label for="degree" class="control-label">Stopień</label>
                    <select class="form-control" id="degree" name="degree" required="required">
                        <option value=""></option>
                        <option value="I">1. stopień (inżynierskie/licencjat)</option>
                        <option value="II">2. stopień (magisterskie)</option>
                    </select>
                </div>
                <div class="form-group" style="display: none" id="querySemester">
                    <label for="semester" class="control-label">Semestr</label>
                    <select class="form-control" id="semester" name="semester" required="required">
                        <option value=""></option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                    </select>
                </div>
                <div class="form-group">
                    <input type="radio" name="search" value="index" checked="checked"
                           onClick="changeForm('queryIndex')"> Indeks
                    <input type="radio" name="search" value="name"
                           onClick="changeForm('queryName')"> Imię i nazwisko
                    <input type="radio" name="search" value="faculty"
                           onClick="changeForm('queryFaculty')"> Wydział
                    <input type="radio" name="search" value="subject"
                           onClick="changeForm('querySubject')"> Kierunek
                    <input type="radio" name="search" value="system"
                           onClick="changeForm('querySystem')"> System
                    <input type="radio" name="search" value="degree"
                           onClick="changeForm('queryDegree')"> Stopień
                    <input type="radio" name="search" value="semester"
                           onClick="changeForm('querySemester')"> Semestr
                </div>
                <script type="text/javascript">
                    function changeForm(element) {
                        document.getElementById('queryIndex').style.display = 'none';
                        document.getElementById('queryName').style.display = 'none';
                        document.getElementById('queryFaculty').style.display = 'none';
                        document.getElementById('querySubject').style.display = 'none';
                        document.getElementById('querySystem').style.display = 'none';
                        document.getElementById('queryDegree').style.display = 'none';
                        document.getElementById('querySemester').style.display = 'none';
                        document.getElementById(element).style.display = 'block';
                    }
                </script>
                <div class="form-group col-lg-4">
                    <div class="control-label">
                        <button type="submit" class="btn btn-primary" name="submit" value="searchStudent">Szukaj
                        </button>
                    </div>
                </div>
            </fieldset>
        </form>
    </div>
</div>

我还有 PHP 文件,我可以从该文件中获取数据。

 function studentWindow()
    {
        $this->setView("AdminPanel", "StudentWindow");
        if (isset($_POST['submit']) && $_POST['submit'] == 'searchStudent') {
            $query="";
            $data=array();
            if($_POST['search']=='index'){
                $data['index']=sanitizeString($_POST['index']);
                $query="st_index LIKE '?%'";
            }
            elseif($_POST['search']=='name'){
                $data['name']=sanitizeString($_POST['name']);
                $data['surname']=sanitizeString($_POST['surname']);
                $query="name LIKE '?%' AND surname LIKE '?%'";
            }
            elseif($_POST['search']=='faculty'){
                $data['faculty']=$_POST['faculty'];
                $query='AS st INNER JOIN subject AS s ON st.id_subject=s.id_subject INNER JOIN faculty AS f ON s.id_faculty=f.id_faculty WHERE f.name=?';
            }
            elseif($_POST['search']=='subject'){
                $data['subject']=$_POST['subject'];
                $query='AS st INNER JOIN subject AS s ON st.id_subject=s.id_subject WHERE s.name=?';
            }
            elseif($_POST['search']=='system'){
                $data['system']=$_POST['system'];
                $query='system=?';
            }
            elseif($_POST['search']=='degree'){
                $data['degree']=$_POST['degree'];
                $query='degree=?';
            }
            elseif($_POST['search']=='semester'){
                $data['semester']=$_POST['semester'];
                $query='semester=?';
            }
            $this->loadModel("AdminPanel");
            $model = new AdminPanelModel();
            $model->getStudents($query,$data);
        }
    }

这是一个问题。我无法从表单获取数据,而且按钮也不起作用。我制作了类似的其他形式,但没有 JS。这可能就是原因。您有什么建议或解决方案吗?

附注抱歉我的英语不好;)

最佳答案

问题是在不需要表单字段时使用 required='required'

用户可以随时提交,并且不明显您必须依次单击每个单选按钮来填写该部分(如果这是有意的)。

我将您的代码作为纯 HTML 运行,并在 Chrome 开发工具中检查了 POST 数据,如果您使用 required 填写所有字段,则效果很好...

您将在控制台中收到一条错误消息,内容如下:

An invalid form control with name='faculty' is not focusable.

Chrome 正在尝试聚焦该字段以添加错误消息,但您设置了 style.display = 'none',因此它无法实现。

关于javascript - 带 JS 的 HTML 表单在 PHP 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34211058/

相关文章:

javascript - 如何创建一些东西来接收来自 tomcat 服务器页面的数据?

html - Chrome 没有在我的电脑上反射(reflect) css 但其他 chrome 工作正常

javascript - jQuery 的复选框异常

javascript - 如何更改 URL Websocket NodeJs(服务器/客户端)

php - laravel 5 (JTW) 登录失败

php - c9.io php pdo 连接到 mysql

javascript - 如何将这些数组值全部打印成 html 表单?

javascript - 如何在 Jquery 中选择 html 元素的特定实例?

PHP + XPath 获取指定日期之间的节点值

javascript - 本地存储和 Internet Explorer 9 冒险