PHP为可选字段数据设置 - 未定义索引

时间:2016-11-29 18:57:22

标签: php

我将表单数据传递到要通过服务器发送的电子邮件中(在这种情况下我使用的是SendGrid,但我认为这与PHP有关,而不是API),我有一个可重复的工作部分。形成。他们可以在表单上添加多个作业来填写,如果他们这样做,只需克隆字段并在每个字段标签/名称和id前面加上一个整数,例如wh-company2wh-company2和等等。他们最多可以增加10个工作岗位。

然后我将其传递到我发送的电子邮件模板中。一切都很好,但是当涉及到工作部分时,我想要检查一下,如果例如wh-company8存在,那么它将返回8个工作数据。

<?php for ($count = 1; $count <= 10; $count++) : ?>
    <?php if (isset($submitted_data['wh-company' . $count . '\''])) : ?>
        <p><strong>Work History <?php echo $count; ?></strong><br/>
        Company: <?php echo $submitted_data['wh-company' . $count . '\'']; ?><br/>  
        Position: <?php echo $submitted_data['wh-position' . $count . '\'']; ?><br/>    
        Company address: <?php echo $submitted_data['wh-address-1' . $count . '\'']; ?><br/>    
        Date worked from: <?php echo $submitted_data['wh-date-started' . $count . '\'']; ?><br/>    
        Date worked until: <?php echo $submitted_data['wh-date-ended' . $count . '\'']; ?><br/> 
        Reasons for leaving: <?php echo $submitted_data['wh-reasons-you-left' . $count . '\'']; ?><br/> 
        Referee name(s): <?php echo $submitted_data['wh-referee-name' . $count . '\'']; ?><br/> 
        Referee position: <?php echo $submitted_data['wh-referee-position' . $count . '\'']; ?><br/>    
        Referee phone number: <?php echo $submitted_data['wh-referee-telephone' . $count . '\'']; ?><br/>   
        Referee email: <?php echo $submitted_data['wh-referee-email' . $count . '\'']; ?><br/></p>
    <?php endif; ?>
<?php endfor; ?>

这是我到目前为止所拥有的。我没有isset而只是if ($submitted_data['wh-company' . $count . '\'']) :但是它为10个项目中的每一个都返回了Notice: Undefined index错误。然后我加入了isset,但现在还没有返回任何内容。

我做了什么明显错误的事吗?

2 个答案:

答案 0 :(得分:1)

你没有其他声明。这意味着isset返回false,跳过html片段并执行循环的下一次迭代。因为每个isset都失败了,所以你说过

  

它返回了一条通知:10个项目中每个项目的未定义索引错误

没有ouptut。

修改

正如评论中所述,添加'字符是导致Undefined index errorisset正在完美执行其任务的原因,只需使用以下内容:

<?php if (isset($submitted_data['wh-company' . $count])) : ?>

答案 1 :(得分:0)

您可以将[]用于表单中重复的字段,以便在发送到PHP时成为数组,并且您无需担心向新字段添加索引。下面是一个示例,在PHP文件中复制粘贴下一个代码并在浏览器中打开它(在作业<input>字段中键入内容):

<script type="text/javascript">
function add_job ()
{ var jobs = document.getElementById("jobs"); // <DIV>.
  jobs.innerHTML += "<br/>" + // ◄■■ ADD NEW <INPUT> INSIDE <DIV>.
                    "Enter job <input type='text' name='job[]'/>"; // ◄■■ JOB[]
}
</script>


<form method="post"> <!-- ◄■■ FORM WILL REFRESH BECAUSE NO ACTION DEFINED -->
  <button type="button" onclick="add_job()">Add job</button>
  <br/>
  <div id="jobs"></div> <!-- ◄■■ DIV FOR THE JOBS -->
  <br/>
  <input type="submit" value="Submit jobs"/>
</form>


<?php 
if ( isset( $_POST["job"] ) ) // ◄■■ IF PAGE REFRESHED (FORM SUBMISSION).
   { echo "Entered jobs: ";
     foreach ( $_POST["job"] as $job ) // ◄■■ "JOB" IS THE NAME OF THE <INPUT>S.
       echo $job . " ";
   }
?>

逻辑很简单:当单击按钮Add job时,会向<input>添加一个新的<div>,当提交表单时,PHP会将作业作为数组获取并显示它们。请注意,所有<input>具有相同的名称:“job []”,PHP会将它们识别为“job”(数组)。