0

チェックボックス付きの基本的なフォームがあり、送信時に管理者に電子メールで送信します(およびクライアントへのコピー)。私が持っているコードは、最後のチェックボックスのみをエコーし​​ます (したがって、電子メールには 1 つのチェックボックスしか表示されません)。電子メールですべてのチェックボックス情報を送信することはできません (ここからいくつかのバージョンのコードを試した後でも)。

<form method="POST" name="contactform" action="include/contactstationcode.php"> 
<h1>Quick Contact Form</h1> 
<p>
<section id="nameLabel" class="labelClass"><label id="Name">Full Name: </label><input name="name" id="name" size="30" class="inputField" type="text"><br></section>
<section id="nameLabel" class="labelClass"><label id="Student ID">Student ID: </label><input name="studentid" id="studentid" size="8" class="inputField" type="text"><br></section>
<section id="nameLabel" class="labelClass"><label id="Email">Email: </label><input name="email" id="email" size="30" class="inputField" type="text"><br></section>
<section id="nameLabel" class="labelClass"><label id="ContactNumber">Contact Number: </label><input name="contactnumber" id="contactnumber" size="30" class="inputField" type="text"><br></section>
<section id="nameLabel" class="labelClass"><label id="interests">Interests: <input type="checkbox" name="check_list[]" value="Presenting " checked> Presenting<br><input type="checkbox" name="check_list[]" value="Producing "> Producing<br><input type="checkbox" name="check_list[]" value="Audio Production ">Audio Production<br><input type="checkbox" name="check_list[]" value="Marketing "> Marketing<br><br><input type="checkbox" name="check_list[]" value="Web "> Web<br>
<section id="messageLabel" class="labelClass"><label>Relevant Experience:</label></section>
<section id="messageInput" class="inputClass"><textarea name="experience" id="experience" cols="30" rows="3"></textarea><br></section><br>
<section id="buttonClass" class="buttonClass"><input src="images/submit.png" onmouseover="this.src='images/submit2.png'" onmouseout="this.src='images/submit.png'" alt="submit" value="submit" height="25" type="image" width="70"></section>
</p>
</form>

私が持っているPHPスクリプトは次のとおりです。

<?php date_default_timezone_set('Europe/London');
$from = 'From: company@company.com'; 
$today = date('l, F jS Y.'); 
$to = 'secret@secret.com'; 
//Form Fields
$name = $_POST['name'];
$studentid = $_POST['studentid'];
$email = $_POST['email'];
$contactnumber = $_POST['contactnumber'];
$experience = $_POST['experience'];
if(!empty($_POST['check_list'])) {
foreach($_POST['check_list'] as $check) {
        $check=$check.',';
}
}


//Admin Email Body
$subject = 'ClickTeesside.com Get Involved Request';
$bodyp1 = "You have received a Get Involved Request through the ClickTeesside website on $today \n\nFrom: $name ($studentid)\nEmail Address: $email\nContact Number: $contactnumber";
$bodyp2 = "\n\nInterests include: ".$check;
$bodyp3 = "\n\nPrevious Experience: $experience";
$bodyp4 = "\n\nIf suitable, please get in touch with this candidate as soon as possible - the candidate has also received an automated response.";
$body=$bodyp1.$bodyp2.$bodyp3.$bodyp4;
mail ($to, $subject, $body, $from);

//Candidate Email
$candidatesubject = 'ClickTeesside.com Get Involved: Automated Email';
$candidatefrom =  'From: ClickTeesside.com';
$cbody = "Thank you for emailing Click Radio about becoming involved with the station.\nWe've sent your details to our Station Management, who will review your application.\nIf successful, we will contact you in due course.\n\n";
$cbody2 = "Here is a copy of what you sent to us on $today:\n\nName: $name ($studentid)\nEmail Address: $email\nContact Number: $contactnumber\nSpecified Interested Areas: ".$check."\n\nPrevious Experience: $experience";
$candidatebody = $cbody.$cbody2;
mail ($email, $candidatesubject, $candidatebody, $from);

header("Location: http://www.google.co.uk/");
?>

どこが間違っているのかわかりません-正しい方向に私を向けることができれば:)ありがとう!

4

3 に答える 3

1

問題はここにあります:

foreach($_POST['check_list'] as $check) {
    $check=$check.',';
}

$checkループの各反復で現在のアイテムの値に設定されます。最後のループで$checkは、最後のアイテムに設定され、次に追加されます,

この問題を解決するには、ループで別の変数名を使用します。

$check = "";
foreach($_POST['check_list'] as $c) {
    $check .= $c.',';
}

上記はより多くのコードを保持し、問題をよりよく示していますが、これを行う方法はimplode関数を使用することです。

$check = implode(",", $_POST['check_list']);

これにより、末尾のコンマなしで同じ文字列が得られます。

于 2013-04-17T20:51:40.050 に答える
0

これを編集します:

if(!empty($_POST['check_list'])) {
foreach($_POST['check_list'] as $check) {
    $check=$check.',';
}
}

これとともに:

$allChecks = '';
if(!empty($_POST['check_list'])) {
foreach($_POST['check_list'] as $check) {
    $allChecks .= $check.',';
}
}

次に、$allChecks をメールで送信します。

$bodyp2 = "\n\nInterests include: ".$allChecks;
于 2013-04-17T20:45:10.710 に答える
0

foreach で行っていることは、毎回値を置き換えることです。.= を使用して、文字列の前に次の値を追加します。

他のいくつかの調整は、すべてのフィールドが PHP とクライアント側の両方に存在することを確認することです。純粋なPHPを書いている場合は同じファイルを使用する傾向があるため、 if(isset($_POST)): フォームアクションはそれ自体を参照しています。

幸運を。

于 2013-04-17T20:51:54.350 に答える