使用OnChange提交时,为什么我无法访问表单数据?

时间:2016-02-16 21:34:51

标签: php forms mysqli submit onchange

我有一个简单的HTML选择选项,它应该自动发送OnChange。表单似乎发送或重新加载页面"我应该说我没有得到任何数据的另一端。我尝试了POSTGET我重命名了表单数据的每个部分,并更改了整个if(isset()信息。有什么想法我没有得到任何数据?

FORM:

<?php
$system1 = mysqli_fetch_assoc(mysqli_query($conn, 
               "SELECT * FROM ap_system_status WHERE system_id = '1'"));
$system_id_1 = $system1['system_id'];
$system_name_1 = $system1['system_name'];
$system_status_1 = $system1['system_status'];
?>
<strong><? echo $system_name_1; ?></strong> 
<div align="right" style="float:right">
    <div class="form-group">
        <form action="" method="GET" id="system_status" name="system_status">
            <input type="hidden" id="system_id" value="<? echo $system_id_1; ?>" />
            <select class="form-control" onchange="this.form.submit()" id="status">
                <option disabled="disabled" selected="selected" hidden="hidden"><? echo $system_status_1; ?></option>
                <option value='<i class="fa fa-exclamation-triangle" style="color:#F60"></i> Experiencing Errors'>Experiencing Errors</option>
                <option value='<i class="fa fa-exclamation-triangle" style="color:#F60"></i> Being Updated'>Being Updated</option>
                <option value='<i class="fa fa-exclamation-triangle" style="color:#F60"></i> Maintenance Mode'>Maintenance Mode</option>
                <option value='<i class="fa fa-times-circle-o" style="color:#F00"></i> System Offline'>System Offline</option>
                <option value='<i class="fa fa-check-circle-o" style="color:#090"></i> Good Service'>Good Service</option>
            </select> 
            <noscript><input type="submit" value="Submit"></noscript>
       </form> 

DATA COLLECTION(非常基本,但只测试!!):

<?php 
if(isset($_POST['system_status'])){
    $system_id = $_POST['system_id'];
    $status = $_POST['status'];
    echo $system_id;
    echo $status;
}else{

}
?>

1 个答案:

答案 0 :(得分:3)

对表单和PHP进行一些更改应该可以正常工作。为了使用表单提交表单元素,它们必须具有name个属性,并且表单method必须与超级全局($_GET$_POST)匹配在PHP中访问。

<!--Change the form method to match what you are using in your PHP-->
<form action="" method="POST" id="system_status" name="system_status">
    <!--Add a name to this input-->
    <input type="hidden" id="system_id" value="<? echo $system_id_1; ?>" name="system_id" />
    <!--Add a name to this select-->
    <select class="form-control" onchange="this.form.submit()" id="status" name="status">
        <option disabled="disabled" selected="selected" hidden="hidden"><? echo $system_status_1; ?></option>
        <!--Not related to your question, but switch the value attribute with the
        option text so you can see your icons and get the value I assume you expect-->
        <option value="Experiencing Errors"><i class="fa fa-exclamation-triangle" style="color:#F60"></i> Experiencing Errors</option>
        ...
    </select>
    <noscript><input type="submit" value="Submit"></noscript>

我实际上不建议完全删除isset检查,而是修改它以便它实际验证您要使用的值是否存在。

<?php
if (!empty($_POST['system_id']) && !empty($_POST['status'])) {
    $system_id = $_POST['system_id'];
    $status = $_POST['status'];
    echo $system_id;
    echo $status;
} else {
    // error handling for missing values
}