2016-11-29 21 views
1

我將表單數據傳遞到通過服務器發送的電子郵件中(在這種情況下,我使用SendGrid,但我認爲這與PHP相關,而不是API)和I在表格上有一個可重複的工作部分。他們可以在表單上添加多個工作來填寫,如果他們這樣做,只需克隆字段並將每個字段標籤/名稱和ID前綴爲一個整數,例如wh-company2wh-company2等等。他們最多可以添加10個工作。PHP isset可選字段數據 - 未定義索引

然後,我將這個傳遞到我發送的電子郵件模板中。一切都很好,但是當涉及到工作部分時,我想進行檢查,例如,如果存在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,但現在不返回任何內容。

我在做什麼明顯錯誤?

+6

你爲什麼要添加這個'\''? –

+0

\是爲了逃避''',但是,在索引字符串的末尾添加'''字符似乎有點有趣。這可能是導致所有索引首先不正確的原因。 – GKnight

+0

發佈您的HTML表單以查看字段名稱。 –

回答

1

你沒有別的聲明。這意味着isset返回false,跳過html代碼段並執行循環的下一次迭代。因爲每一個isset失敗,注意到的事實,你說

它返回一個通知:爲每個10項

沒有ouptut的未定義指數錯誤。

編輯

正如評論指出,加入'字符是什麼導致了Undefined index errorisset完美地執行它的任務,只需使用以下命令:

<?php if (isset($submitted_data['wh-company' . $count])) : ?> 
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」(一個數組)。