使用JS的HTML表单在PHP

时间:2015-12-10 20:24:22

标签: javascript php html forms

我有一个带JS的表单,我在用radiobuttons选择选项后隐藏并显示表单的字段。

<?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。这可能是原因。您有任何建议或解决方案吗?

P.S。抱歉我的英文;)

1 个答案:

答案 0 :(得分:1)

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

用户可以随时提交,如果是出于意图,则必须依次单击每个单选按钮以填写该部分。

我将您的代码作为纯HTML运行并检查了Chrome开发工具中的POST数据,如果您使用required填写所有字段,它就可以正常工作...

console中会出现以下错误:

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

Chrome正在尝试关注该字段以添加错误消息,但您设置style.display = 'none'却不能。