-1

人のリスト (名、姓、およびその会社) を作成できる HTML フォームを作成しようとしています。フォーム上の他のすべてのデータと一緒に、この人のリストを (PHP 経由で) メールで送信したいと考えています。

配列を作成するのが道だと思われるので、HTMLとjQueryでこれを試みました:

$('#add').click(function(e)
{
    $('#namelist').append('<p  class="nameentry"><input type="text" name="cfsName[]" value="' + cName + ": " + fName + " " + sName + '" class="cfsname" disabled /> <input type="button" name="remove" class="remove" value="Remove" /></p>');
    fName = $('input[name=inputfName]').val('Forename');
    sName = $('input[name=inputsName]').val('Surname');

    e.preventDefault();
});

HTML は cfsname[] という配列の空の div に追加されます (私が理解している限り)。

これを解釈して電子メールを作成する PHP コードは次のとおりです。

$message = "";
if (isset($_REQUEST['visitor']) && $_REQUEST['visitor'] == "Yes")
{
    $message .= "Nature of work: Site visit" . "\n";
}
else
{
    $message .= "Nature of work: $natureofwork" . "\n";
}
$message .= "Location: $locationofwork" . "\n\n";
$message .= "Dates: $dayfrom " . "$monthfrom " . "$yearfrom " . "to $dayto " . "$monthto " . "$yearto" . "\n";
$message .= "Times: $hourfrom" . ":" . "$minfrom " . "to " . "$hourto" . ":" . "$minto" . "\n\n";
foreach($_POST['cfsName'] as $key => $value)
{
    $message .= $key . " " . $value . "\n";
}
$message .= "Project Manager: $projectmanager" . "\n";
$message .= "Contact Number: $contactnumber" . "\n";

mail(
    $emailto,
    "Worksheet Info Test",
    $message,
    $headers
);

電子メールはほとんど期待どおりに送信されます (私の 'if' ループも機能しませんが、現時点では重要ではありません) が、配列から取得された名前のリストを含むセクションは空白です。私は明らかに完全に間違ったことをしています。メッセージ コード内で「foreach」を呼び出すことはできますか? 私のHTML配列は正しく書かれていますか? どうにかして HTML 配列を別の PHP 配列に変換する必要がありますか?

誰かが私のコードに重大な欠陥を見つけることができれば (多くの小さな欠陥があると確信しています)、正しい方向に突き進んでいただければ幸いです!

4

3 に答える 3

1

作成している入力フィールドが動的に返されない場合は、それらを「無効」に作成したことが原因である可能性が最も高いです。

無効化された入力コントロールは、ブラウザーからサーバーに送信してはなりません。それは単純な視覚的および行動的なものではありません。したがって、別の場所の入力フィールドから無効フラグを削除しないと、送信されません。

于 2013-04-28T13:43:12.397 に答える
0

フォームの送信にどのような方法を使用していますか? GETまたはPOST?あなたのコードは、投稿として変数にアクセスしようとします:$_POST['cfsName']私は$_REQUEST['cfsName']安全のために使用します。

Mysteryos があなたの JS コードについて言っているように、「それらを使用する前に変数を割り当ててください」。

HTML フォームを介して配列を PHP に渡す方法について、簡単な例を次に示します。

<form>
a<input name="arr[]" value="a"/><br/>
b<input name="arr[]" value="b"/><br/>
c<input name="arr[]" value="c"/><br/>
d<input name="arr[]" value="d"/><br/>
<input type="submit"/>
</form>
<?php

foreach ( $_REQUEST['arr'] as $item ) {
        echo "<div>$item</div>";
}

送信すると、次のように出力されます。

<form>
a<input name="arr[]" value="a"/><br/>
b<input name="arr[]" value="b"/><br/>
c<input name="arr[]" value="c"/><br/>
d<input name="arr[]" value="d"/><br/>
<input type="submit"/>
</form>
<div>a</div>
<div>b</div>
<div>c</div>
<div>d</div>
于 2013-04-28T13:27:51.350 に答える
-1

(無視してください)まず、各入力には一意の名前を付ける必要があります。 次に、変数を使用する前に変数を割り当てます。3 番目に、「cName」という名前の変数が表示されますが、どこにも割り当てられていません。それはあなたに任せます。スヴェンが言ったように、無効な入力はブラウザから送信されないため、非表示の入力に変えます。

説明:

JavaScript コード

$('#add').click(function(e)
{
    fName = $('input[name=inputfName]').val('Forename');
    sName = $('input[name=inputsName]').val('Surname');
    $('#namelist').append('<p  class="nameentry">'+cName + ': ' + fName + ' ' + sName+'<input type="hidden" name="cfsName[]" value="' + cName + ": " + fName + " " + sName + '" class="cfsname"/> <input type="button" name="remove" class="remove" value="Remove" /></p>');

    e.preventDefault();
});

PHP コード (同じまま)

...
foreach($_POST['cfsName'] as $key => $value)
{
    $message .= $key . " " . $value . "\n";
}
  ...
于 2013-04-28T13:18:04.707 に答える