【问题标题】:Linking / associating a hidden value to a specific radio button on a form (PHP/MySQL/HTML)将隐藏值链接/关联到表单上的特定单选按钮 (PHP/MySQL/HTML)
【发布时间】:2021-02-26 12:41:38
【问题描述】:

我正在使用链接到 MySQL 数据库的 PHP 创建一个表单。

我有多个问题,每个问题都需要回答是或否。

我已经设置了表单,以便将“是”和“否”响应提交到数据库。但是,如果用户选择否,我需要一个隐藏值(为什么会选择否的预定义详细信息)提交到数据库上的不同表。目前提交的时候,无论用户选择yes还是no,都会提交隐藏值。

我的代码如下:

<label for="question1" class="input_labels">1. Confidentiality protocols were adhered to</label>
                                <input class="form-check-input-line" type="radio" name="question1" id="question1" value="YES">  YES
                                <input class="form-check-input-line" type="radio" name="question1" id="question1" value="NO">  NO <br>
                                <input type="hidden" id="error1" name="error1" value="Confidentiality protocols were not adhered to">

query1 是提交实际的 Yes / No 响应,query2 是提交隐藏值(我还没有将所有详细信息添加到 query2,因为我正在尝试测试它是否首先工作):

$query1 = "INSERT INTO questions 
        
                    (questionsID, question1, question2, question3, question4, question5, question6, question7, question8, question9, question10, question11, question12, question13, question14, question15, question16, question17, question18, question19, question20, question21, question22, question23, question24) 

                 VALUES 
                 
                    (NULL, '$question1', '$question2', '$question3', '$question4', '$question5', '$question6', '$question7', '$question8', '$question9', '$question10', '$question11', '$question12', '$question13', '$question14', '$question15', '$question16', '$question17', '$question18', '$question19', '$question20', '$question21', '$question22', '$question23', '$question24')";

        $result1 = mysqli_query( $conn, $query1);   
        
        } else {
    
        $submitError = "The form was not submitted, please try again <br>";

}

$query2 = "INSERT INTO fixable_errors 
        
                    (fixableID, error1) 

                 VALUES 
                 
                    (NULL, '$error1')";

        $result2 = mysqli_query( $conn, $query2);

【问题讨论】:

  • 你能贴出从表单中获取数据并提交的代码吗,看看你是不是弄错了
  • 放更多代码。目前还不清楚
  • ????如果您刚刚开始使用 PHP 并想构建应用程序,我强烈建议您查看各种 development frameworks 以查看是否可以找到适合您的风格和需要。它们有多种风格,从 Fat-Free Framework 这样的轻量级到像 Laravel 这样的更全面。这些为您提供了具体的工作示例以及如何编写代码和组织项目文件的指导。
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将任何数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • @tadman 指出,谢谢!我一定会看看你推荐的框架

标签: php html mysql forms


【解决方案1】:

好吧,我希望您发布您的 JavaScript 代码,但是您需要做的是仅当用户选择“是”单选按钮时禁用隐藏输入字段,这样,隐藏输入不会被提交和其他人一起。

JS

var radioBtns = document.getElementsByName("question1");
var hiddenInput = document.getElementById("error1");

radioBtns.forEach(function(btn) {
    btn.addEventListener("click", function() {
        var radioValue = this.value;
        if (radioValue == "Yes") { // case-sensitive
            hiddenInput.setAttribute("disabled", "");
        } else {
            hiddenInput.removeAttribute("disabled");
        }
    });
});

上面的代码在用户点击YES时禁用隐藏字段,在用户点击NO时启用它。

现在在您的 PHP 代码中,您可以使用 isset() 函数检查隐藏字段的值是否也已提交。见下面的代码

PHP

// check if input with name 'error1' was submitted
if(isset($_POST['error1']){
    $error1 = $_POST['error1'];
    $query2 = "INSERT INTO fixable_errors (fixableID, error1) VALUES (NULL, '$error1')";
    $result2 = mysqli_query( $conn, $query2);
}

【讨论】:

  • @Ryan 不客气,请务必将此答案标记为已接受?
  • 这里面还是有一些极其危险的 SQL注入。
  • @tadman 好吧,我相信他知道他应该验证来自表单的任何输入并在使用前转义它们。他的问题是基于在选择特定单选按钮的条件下发送隐藏输入
  • 转义可以忘记。占位符值可确保正确处理值。
猜你喜欢
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多