2016-11-29 5 views
1

私はフォームデータをサーバーに送るための電子メールに渡しています(この場合、私はSendGridを使用していますが、PHPではなくAPIに関連していると思います)。フォーム上に反復可能なジョブセクションがあります。フォームに複数のジョブを追加して記入することもできます。フィールドをクローンし、各フィールドラベル/名前とIDの前に整数(たとえば、wh-company2wh-company2など)を付加します。最大10のジョブを追加できます。PHPはオプションのフィールドデータのためにセットする - 未定義インデックス

私はこれを私の電子メールテンプレートに送信しています。すべてがうまくいきますが、ジョブセクションになるとチェックしたいので、たとえば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

あなたはelse文を持っていません。これは、issetがfalseを返すことを意味し、htmlスニペットはスキップされ、ループの次の反復が実行されます。あなたは

を述べているという事実が指摘し、ひとつひとつissetが失敗しているので、それはご注意を返しました:

10項目のそれぞれについて、未定義のインデックスエラーを何ouptutはありません。

EDIT

コメントで述べたように、'文字を追加することissetは、単に以下を使用し、完全にそのタスクを実行している間Undefined index errorを引き起こしているものです:

あなたが使用することができます
<?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はそれらを "ジョブ"(配列)として認識します。

関連する問題