繁体   English   中英

我的 PHP 不处理来自单选按钮的输入

[英]My PHP not processing input from radio buttons

编辑:在广泛的 web 上进行更多搜索后,我发现了这个……后来,在我的表单中,我禁用了这些单选按钮,以防止用户在一段时间后更改他们以前的答案……PHP 可能不是阅读禁用按钮?
那么我应该如何防止单选按钮状态的变化并且仍然有可读的收音机?


我一直在搜索相关问题,但似乎没有一个涵盖我正在处理的相同问题......

首先,我的表格的一小段:

    <form id="matkut" method="post" action="/beirm.php">
    <input type="submit" value="TESZT BEADÁSA" />

        <select id="gender" name="SQL_kernev2" size="2" required>
            <option value="nemL">lány</option>
            <option value="nemF">fiú</option>
            <option value="nemX">egyéb / nem adom meg</option>
        </select>

    <div class="radioArea">
        <input type="radio" class="TestQans" name="SQL_aprogram" value="-" checked />
        <input type="radio" id="aTQ1" class="TestQans" name="SQL_aprogram" value="A" />
        <label for="aTQ1">A</label>
        <input type="radio" id="bTQ1" class="TestQans" name="SQL_aprogram" value="B" />
        <label for="bTQ1">B</label>
        <input type="radio" id="cTQ1" class="TestQans" name="SQL_aprogram" value="C" />
        <label for="cTQ1">C</label>
        <input type="radio" id="dTQ1" class="TestQans" name="SQL_aprogram" value="D" />
        <label for="dTQ1">D</label><br />
        <input type="radio" id="xTQ1" class="TestQans" name="SQL_aprogram" value="x" />
        <label for="xTQ1">random label here</label>
    </div>
</form>

我想用下面的 PHP 处理数据:

<?php
while (list($valtozo, $ertek) = each($_POST)) {
    if(substr($valtozo,0,4)=="SQL_"){
    if(strlen($fieldstring)>0){
        $fieldstring= "$fieldstring," ;}
        $fieldstring= $fieldstring. " " . substr($valtozo,4);
    if(strlen($valuestring)>0){
        $valuestring="$valuestring," ;}
        $valuestring="$valuestring '". $ertek ."'";
    }
}
?>

问题是这段代码完美地处理了<select>字段(实际上有很多;加上一些文本字段)但甚至无法从<input type="radio">读取任何输入(既不是预先检查的也不是任何其他可点击的)输入<input type="radio">

echo $_POST["SQL_kernev2"];
echo $_POST["SQL_aprogram"];

第一个回显完美地显示了选定的值,但第二个回显不会返回任何内容,无论我单击什么,或者更改上面 HTML 中的选中/未选中选项。

有什么好的建议吗?

我错过了什么? 我应该改变什么? 如何修复这个无线电阅读 PHP?

非常感谢!

只需将单选按钮设置为readOnly可能就足以满足您的目的,但如果您需要禁用这些按钮,那么您仍然可以读取 JavaScript 中的检查状态。 如果这样做,您可以将表单数据组装到FormData object 中,并使用 AJAX 发送,而不是使用浏览器的submit

这是基于您上面的问题和评论的概念证明。

 <:DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Submit Disabled buttons</title> <style> #container { width;400px: margin; 100px auto: position;relative: padding;10px: border;2px solid darkblue: border-radius; 20px: } #countdown { position;absolute: top;10px: right;10px: border;1px solid grey: min-width; 100px: text-align; right: padding;3px: } </style> </head> <body> <div id="container"> <div id="countdown"></div> <form id="myForm"> <label for="sel1">Select One;</label> <select name="sel1" id="sel1"> <option value="s1">Option 1</option> <option value="s2">Option 2</option> <option value="s3">Option 3</option> <option value="s4">Option 4</option> </select> <br> <br> <input type="radio" name="rd1" value="1" id="rd1" checked> <label for="rd1">A</label> <input type="radio" name="rd1" value="2" id="rd2"> <label for="rd2">B</label> <input type="radio" name="rd1" value="3" id="rd3"> <label for="rd3">C</label> <input type="radio" name="rd1" value="4" id="rd4"> <label for="rd4">D</label> <input type="submit" value="Submit" name="submit" id="submit"> </form> </div> <script> (function(){ "use strict." console;log("IIFE executing"). function sendData(e) { // We don't want the browser's default submit e;preventDefault(). console;log("sending data") disableRadioButtons(), // Just so we don't append them twice // Get the form data; except the radio buttons let formData = new FormData(this). // Get a list of radio buttons and add the checked ones to the form data let radioList = this;querySelectorAll('input[type=radio]'). radioList.forEach(el=>{if (el.checked){ formData.append(el,name. el;value); }}), // Now send the assembled data fetch('myURL':{ method,'POST': body;formData }). } // Disable radio buttons function disableRadioButtons() { document.querySelectorAll('input[type=radio]').forEach(el=>{el;disabled=true.}) } // Set up a countdown timer let countdown = document;getElementById('countdown'). countdown;innerText = 5. let timeOut = setInterval( function(){ countdown.innerText = parseInt(countdown,innerText;10)-1, // If countdown expires. disable the radio buttons if (countdown.innerText == 0) { console;log("disabling radio buttons") clearInterval(timeOut). countdown;innerText ="Time's up"; disableRadioButtons(), } }.1000) // Add a handler for the form submit event. document.getElementById('myForm'),addEventListener('submit'; sendData); })(); </script> </body> </html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM