【问题标题】:PHP adding elements in foreach loop not submittingPHP在foreach循环中添加元素不提交
【发布时间】:2014-03-13 10:42:24
【问题描述】:

我正在从数据库字段创建一个表单,所以我提取所有记录并循环并在 php.ini 的 foreach 循环中添加表单元素。问题是当我提交表单时没有发布元素,我得到的唯一返回是提交按钮: -

stdClass Object
(
    [submitbutton] => Submit
)

这就是我创建元素的方式,这些元素都在屏幕上正确显示和运行,只是在我提交时它不会发布,但如果我在 foreach 循环中没有元素,它们会发布,但我需要创建从数据库中动态获取它们,有什么想法吗?

foreach($records as $log){
    $inc++;

    if($log->type == 0){ 

        $mform->addElement('html', '<p>'.$log->leadin.'</p>');

        $attributes = array();
        $distractors = explode(',', $log->distractors);
        $radioarray=array();
        $count = 0;

        foreach($distractors as $dis){
            $count++;
            $radioarray[] =& $mform->createElement('radio', 'radio', '', $dis, $count, array());
        }

        $mform->addGroup($radioarray, 'radioar'.$inc, '', array(' '), false);
    }
    else if($log->type == 1){

        $mform->addElement('html', '<div>'.$log->leadin.'</div>');

        $distractors = explode(',', $log->distractors);
        $count = 0;

        foreach($distractors as $dis){
            $count++;
            $mform->addElement('checkbox', 'check'.$count, $dis);
        }
    }}

这是上述代码输出的图像,所有显示和功能都正确。

<form autocomplete="off" action="blocks/training_plan/student/survey.php" method="post" accept-charset="utf-8" id="mform1" class="mform">
<div style="display: none;"><input name="sesskey" type="hidden" value="MJS9xXm2SA" />

调查选择 1?

<fieldset class="hidden"><div>
    <div id="fgroup_id_radioar1" class="fitem fitem_fgroup femptylabel"><div class="fitemtitle"><div class="fgrouplabel"><label> </label></div></div><fieldset class="felement fgroup"><span><input name="radio" value="1" type="radio" id="id_radio_1" /><label for="id_radio_1">1</label></span> <span><input name="radio" value="2" type="radio" id="id_radio_2" /><label for="id_radio_2">2</label></span> <span><input name="radio" value="3" type="radio" id="id_radio_3" /><label for="id_radio_3">3</label></span> <span><input name="radio" value="4" type="radio" id="id_radio_4" /><label for="id_radio_4">4</label></span></fieldset></div><div>Survey choice 2?</div>
    <div id="fitem_id_check1" class="fitem fitem_fcheckbox "><div class="fitemtitle"><label for="id_check1">1 </label></div><div class="felement fcheckbox"><span><input name="check1" type="checkbox" value="1" id="id_check1" /></span></div></div>
    <div id="fitem_id_check2" class="fitem fitem_fcheckbox "><div class="fitemtitle"><label for="id_check2">2 </label></div><div class="felement fcheckbox"><span><input name="check2" type="checkbox" value="1" id="id_check2" /></span></div></div>
    <div id="fitem_id_check3" class="fitem fitem_fcheckbox "><div class="fitemtitle"><label for="id_check3">3 </label></div><div class="felement fcheckbox"><span><input name="check3" type="checkbox" value="1" id="id_check3" /></span></div></div>
    <div id="fitem_id_check4" class="fitem fitem_fcheckbox "><div class="fitemtitle"><label for="id_check4">4 </label></div><div class="felement fcheckbox"><span><input name="check4" type="checkbox" value="1" id="id_check4" /></span></div></div>
    <div id="fitem_id_answer3" class="fitem fitem_ftextarea "><div class="fitemtitle"><label for="id_answer3">Survey choice 3? </label></div><div class="felement ftextarea"><textarea rows="10" cols="80" name="answer3" id="id_answer3"></textarea></div></div>
    </div></fieldset>
<fieldset class="hidden"><div>
    <div id="fgroup_id_buttonar" class="fitem fitem_actionbuttons fitem_fgroup"><div class="felement fgroup"><input name="submitbutton" value="Submit" type="submit" id="id_submitbutton" /> <input name="cancel" value="Cancel" type="submit" onclick="skipClientValidation = true; return true;" class=" btn-cancel" id="id_cancel" /></div></div>
    </div></fieldset>

【问题讨论】:

  • 你能把你的输出的视图源贴出来
  • 这些字段都在您的表单中吗?
  • 是的,所有字段都在表单中,它们在 foreach 循环之外创建时会发布结果,但在通过 foreach 循环创建时不会发布结果
  • 不给表格截图,给我们看表格的源代码(HTML),以便我们为您提供帮助
  • 我添加了html,格式有点不对

标签: php forms foreach pear


【解决方案1】:

使用这个代码,也可以在这个表单中添加提交按钮

<form autocomplete="off" action="blocks/training_plan/student/survey.php" method="post" accept-charset="utf-8" id="mform1" class="mform">
    <?php
        foreach($records as $log){
        $inc++;

        if($log->type == 0){ 

            $mform->addElement('html', '<p>'.$log->leadin.'</p>');

            $attributes = array();
            $distractors = explode(',', $log->distractors);
            $radioarray=array();
            $count = 0;

            foreach($distractors as $dis){
                $count++;
                $radioarray[] =& $mform->createElement('radio', 'radio', '', $dis, $count, array());
            }

            $mform->addGroup($radioarray, 'radioar'.$inc, '', array(' '), false);
        }
        else if($log->type == 1){

            $mform->addElement('html', '<div>'.$log->leadin.'</div>');

            $distractors = explode(',', $log->distractors);
            $count = 0;

            foreach($distractors as $dis){
                $count++;
                $mform->addElement('checkbox', 'check'.$count, $dis);
            }
        }}
    ?>
</form>

【讨论】:

    【解决方案2】:

    已解决!我发现我在第一次加载页面和第一次创建表单时在url中传递的额外参数也需要在提交表单时出现,所以url上的额外参数搜索了一条数据库记录,当我提交了表单,页面被重新加载,所有函数都被再次调用并失败,因为参数丢失并且找不到记录。希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多