【问题标题】:My PHP not processing input from radio buttons我的 PHP 没有处理来自单选按钮的输入
【发布时间】:2021-06-07 20:28:38
【问题描述】:

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


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

首先,我的表单的简短 sn-p:

    <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 ."'";
    }
}
?>

问题是这段代码完美地处理了&lt;select&gt; 字段(实际上有很多;加上一些文本字段)但甚至无法读取来自@ 的任何输入(既没有预先检查也没有任何其他可点击) 987654324@

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

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

有什么好的建议吗?

我错过了什么?我应该改变什么?如何修复这个 radio-reading-PHP?

非常感谢!

【问题讨论】:

  • 最不幸的...可能是我的服务器有任何(隐藏的?)设置与 radio.processing 混淆?好的,我认真地为这些 sn-ps 剪辑了我的代码,但其他一切都很完美,没有警告,没有错误,只是空的数据库字段而不是单选值......编辑:这里有人说“对他们来说非常有效”但它只是消失了
  • 我完全按照您在这里的方式设置了您的代码(除了我添加的结束 &lt;/form&gt;)。它正在发送我期望的所有数据,包括单选按钮数据。
  • 也谢谢你。与此同时,我编辑了整个内容:以前从没想过,但是通过 JS 禁用无线电会导致我这边崩溃?
  • 浏览器不会提交禁用的字段。如果您在提交之前禁用了 JavaScript 中的单选按钮,那么您将看不到数据。
  • @TangentiallyPerpendicular:再次感谢——所以,我需要找到一种方法来阻止用户点击它们,但至少不要禁用之前选中的选项......

标签: php html forms radio-button


【解决方案1】:

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

这是基于您的问题和上述 cmets 的概念证明。

<!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>

【讨论】:

  • 当我发现禁用无线电不是通过 PHP Post 处理的事实时,我还阅读了只读属性。仅适用于输入文本、文本区域和此类字段——不适用于收音机或复选框……现在,我使用我原来的 PHP 并禁用 :not(:checked) 按钮——但如果你能对这个 readOnly 事情有所了解,我将不胜感激。谢谢!
  • 我最好的是MDN referencereadOnly
  • 谢谢!所以,简而言之:按钮没有简单的只读...“schade”。
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多