Javascript 在隐藏的div中过帐变量

Javascript 在隐藏的div中过帐变量,javascript,php,html,Javascript,Php,Html,我的表单中有一个下拉列表,其中有“是”或“否”选项,如果用户选择“否”,则会出现一个隐藏的Div,其中有一个文本框供用户填写。如果用户单击“是”,他们就进入下一个问题。我得到了一个未定义的索引错误,问题是用户选择“是”,而隐藏的div没有显示 下面是我的index.php,它包含表单和隐藏的div <form id="newForm" action="" method="post"> <div id="hiddenQuestion1"> <s

我的表单中有一个下拉列表,其中有“是”或“否”选项,如果用户选择“否”,则会出现一个隐藏的Div,其中有一个文本框供用户填写。如果用户单击“是”,他们就进入下一个问题。我得到了一个未定义的索引错误,问题是用户选择“是”,而隐藏的div没有显示

下面是我的index.php,它包含表单和隐藏的div

<form id="newForm" action="" method="post">
    <div id="hiddenQuestion1">
        <strong>1. Are the Team Players Wearing Gloves for the correct procedure?</strong> 
        <select id="questions1" name="question1" onchange="showfield1(this.options[this.selectedIndex].value)">
            <option value=""></option>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </select>
    </div>
    <br><div id="div1"></div><br>
    <!--Function to display text box if users selects no-->
<script type="text/javascript">
function showfield1(name){
    if(name=='No')
        document.getElementById('div1').innerHTML='Please provide a reason: <input type="text" id="reason1" name="reason1" size="43" /> Add attachment (Optional): <input type="file" id="attachmentFile1" name="attachmentFile1" class="InputBox">';
    else 
        document.getElementById('div1').innerHTML='';
}
</script>

    <div id="hiddenQuestion2" style="display:none">
        <strong>2. Are Team Players using the ESD station and signing daily sheet?</strong> 
        <select id="questions2" name="question2" onchange="showfield2(this.options[this.selectedIndex].value)">
            <option value=""></option>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </select>
    </div>
    <br><div id="div2"></div><br>
<!--Function to display text box if users selects no-->
<script type="text/javascript">
function showfield2(name){
    if(name=='No')
        document.getElementById('div2').innerHTML='Please provide a reason: <input type="text" id="reason2" name="reason2" size="43" /> Add attachment (Optional): <input type="file" id="attachmentFile2" name="attachmentFile2" class="InputBox">';
    else 
        document.getElementById('div2').innerHTML='';
}
</script>
因此,如果用户对问题1选择“是”,对问题2选择“否”,我会在post.php页面中得到错误“Undefined index:reason2”,如下所示

"<br />
<b>Notice</b>:  Undefined index: reason1 in 
<b>D:\inetpub\wwwroot\SMT_24_Point_Check\newAudit.php</b> on line <b>17</b> 
<br />
<br />
<b>Notice</b>:  Undefined index: attachmentFile1 in 
<b>D:\inetpub\wwwroot\SMT_24_Point_Check\newAudit.php</b> on line <b>18</b> 
<br />
<br />

注意:未定义索引:中的reason1 第17行的D:\inetpub\wwwroot\SMT\u 24\u Point\u Check\newAudit.php

注意:中未定义的索引:attachmentFile1 第18行的D:\inetpub\wwwroot\SMT\u 24\u Point\u Check\newAudit.php


出现“未定义索引”错误,因为如果答案为“否”,您甚至不会在DOM中生成输入,因此该post变量将不存在。解决此问题的快速方法如下:

而不是像这样的行:

$reason2 = $_POST['reason2'];
尝试:

或者同样的东西,但以一种更短更优雅的方式:

$reason2 = ($_POST['reason2']) ? $_POST['reason2'] : ''

另一个解决方案是始终包含HTML输入,但最初使用
display:none;
-将其隐藏,然后根据用户的回答使其可见将始终存在,如果未设置,则为空。

您会收到“未定义索引”错误,因为如果答案为“否”,您甚至不会在DOM中生成输入,因此该post变量将不存在。解决此问题的快速方法如下:

而不是像这样的行:

$reason2 = $_POST['reason2'];
尝试:

或者同样的东西,但以一种更短更优雅的方式:

$reason2 = ($_POST['reason2']) ? $_POST['reason2'] : ''

另一个解决方案是始终包含HTML输入,但最初使用
display:none;
-将其隐藏,然后根据用户的回答使其可见将始终存在,如果未设置,则为空。

这是当您为选项1选择是时发生的情况。隐藏字段
reason1
没有值,因此您可以在post.php中执行类似操作

首先使用
isset()
函数检查
reason1
是否有值

if(isset($_POST['reason1'])) {
    $reason1 = $_POST['reason1'];
} else {
    $reason1 = 0; `//Better to pass a value in here for future refernces`
}
然后,当您选择
No
选项2时,如果将其保留为空(我可以看到您将I写为可选),则它也没有值。这样您就可以像这样对
$reason1
执行相同的操作

if(isset($_POST['attachmentFile1'])) {
        $attachmentFile1= $_POST['attachmentFile1'];
    } else {
        $attachmentFile1= 0; `//Better to pass a value in here for future refernces`
    }

谢谢

当您为选项1选择是时,就会发生这种情况。隐藏字段
reason1
没有值,因此您可以在post.php中执行类似操作

首先使用
isset()
函数检查
reason1
是否有值

if(isset($_POST['reason1'])) {
    $reason1 = $_POST['reason1'];
} else {
    $reason1 = 0; `//Better to pass a value in here for future refernces`
}
然后,当您选择
No
选项2时,如果将其保留为空(我可以看到您将I写为可选),则它也没有值。这样您就可以像这样对
$reason1
执行相同的操作

if(isset($_POST['attachmentFile1'])) {
        $attachmentFile1= $_POST['attachmentFile1'];
    } else {
        $attachmentFile1= 0; `//Better to pass a value in here for future refernces`
    }

谢谢

向我们展示完整的错误刚刚编辑了问题以包含它。向我们展示完整的错误刚刚编辑了问题以包含它。对于更多的语法糖(PHP7):
$reason2=$\u POST['reason2']?”
对于更多的语法糖(PHP7):
$reason2=$\u POST['reason2']?”