日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » 配列を使うメールフォーム

配列を使うメールフォーム

ページ: 1

投稿者 投稿
会員
登録者: 3 2010
返信数: 6
php配列を使ったメールフォームがどうもうまくいきません。。。
助けてくださいm(_ _)m

以前の人が作成したPHPのメールフォームを変更し、予約フォームを作成しております。

下記の図のように商品をチェックボックスで選び、
テキストボックスで個数を入力するというフォームを作り、
メール送信したいのです。

<図>
↓チェックボックス
□商品1 __個←テキストボックス
□商品2 __個
□商品3 __個

PHPにて下記の事がうまくできません。
1.for()又はそれ以外にて、商品[]と個数[]の2つの配列を表示の仕方がわかりません。

2.メール送信する際に、配列のまま送信すると"Array"となってしまうので、
 implode("&", $_POST['shohin']);を使用しました。
 しかしこれだとメール送信すると、
 商品1&商品2&商品3 1個&2個&3個となってしまうので、
 
 商品1 1個&商品2 2個 というようにメールで送ることはできますでしょうか? 



■HTML■
<form method="post" action="rsv.php">
<input type="checkbox" name="shohin[]" value="商品1" />商品1<input type="text" name="kosu[]">個
<input type="checkbox" name="shohin[]" value="商品2" />商品2<input type="text" name="kosu[]">個
<input type="checkbox" name="shohin[]" value="商品3" />商品3<input type="text" name="kosu[]">個
</form>


■PHP■
<?php
$shohin = $_POST["shohin"];
$kosu = $_POST["kosu"];
$mode = $_POST["mode"];
if($mode == "sends"){
$title = "ありがとうございました。ご予約を受け付けました。}?>


<?php print $title ?>
<?php if($mode != "sends"){ ?>

<?php
//配列を取り出し表示します。
for( $i = 0; $i < count( $shohin ); $i ++ ){
for( $i = 0; $i < count( $kosu ); $i ++ ){
print "{$shohin[$i]}{$kosu[$i]}<br/>";} }
//配列を文字列に変換。
$shohin = implode("/", $_POST['shohin']);
$kosu = implode("/", $_POST['kosu']);
?>

<?php
if($error){
print "<input type=\"button\" value=\"戻る\" onClick=\"history.back()\" />\n";
}else{
print "<form action=\"rsv.php\" method=\"post\">\n";
print "<input type=\"hidden\" name=\"shohin\" value=\"{$shohin}\" />\n";
   print "<input type=\"hidden\" name=\"kosu\" value=\"{$kosu}\" />\n";
print "<input type=\"button\" value=\"戻る\" onClick=\"history.back()\" />\n";
print "<input type=\"submit\" value=\"送信\" />\n";
print "</form>\n"; }
?>

<?php
//お知らせのメール
}else{
$to_1 = "***@****";

$subject = "ご予約です ";

$message .= "希望商品 : {$shohin}{$kosu}\n\n";

$add_header = "Content-Type:text/plain; charset=ISO-2022-JP\n";
$add_header .= "From:<***@*****>\n";
$add_header .= "Content-Transfer-Encoding: 7bit\n";

mb_internal_encoding("UTF-8");
mb_language("Japanese");

mb_send_mail($to_1,$subject,$message,$add_header);
}
?>
<?php
//フォームのすべてのテキストをチェックする
function txtCheck($txt){
$txt = htmlspecialchars($txt,ENT_QUOTES);
return $txt;
}
?>


以上です。
知識不足な質問でごめんなさい。
どなたかよろしくお願い致します。
会員
登録者: 8 2009
返信数: 103
こんにちは。
こういうフォームは組んだことがないので
ちょっと適当にやってみました。
htmlのinput要素のname属性値は明示的な添字が必要みたいですね。
参考程度にしてください。



#form.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>mail form</title>
<body>
<form method="post" action="rsv.php">
<input type="checkbox" name="shohin[0]" value="商品1">商品1<input type="text" name="kosu[0]">個<br>
<input type="checkbox" name="shohin[1]" value="商品2">商品2<input type="text" name="kosu[1]">個<br>
<input type="checkbox" name="shohin[2]" value="商品3">商品3<input type="text" name="kosu[2]">個<br>
<input type="hidden" name="mode" value="sends">
<input type="submit">
</form>
</body>
</html>



#rsv.php
<?php

ini_set('display_errors', 'On');
error_reporting(E_ALL);

function hsc($string) {
if(is_array($string)) {
return array_map("hsc", $string);
}
else {
return htmlspecialchars($string, ENT_QUOTES);
}
}

function CheckInputData($var) {
if(is_array($var)) {
return array_map("CheckInputData", $var);
}
else {
if(get_magic_quotes_gpc()) {
$var = striplashes($var);
}
return trim($var);
}
}

$_POST = CheckInputData($_POST);
$mode = $_POST["mode"];

header("Content-Type: text/plain; utf-8");
if($mode === "sends" && isset($_POST["shohin"])){
print "ありがとうございました。ご予約を受け付けました。\n";
}
else {
print "商品を選択してください。";
exit();
}

$shohin = hsc($_POST["shohin"]);
$kosu = hsc($_POST["kosu"]);

$message = "希望商品: \n";
while($shohin_name = current($shohin)) {
$message .= $shohin_name . " " . $kosu[key($shohin)] . "個\n";
next($shohin);
}

mb_language("ja");
mb_internal_encoding("utf-8");

$to_1 = "***@****";

$subject = "ご予約です";

$add_header = "From: <***@*****>";

// mb_send_mail($to_1, $subject, $message, $add_header);



// print_r($shohin);
// print_r($kosu);
print_r($message);

?>

追記 忘れてましたが1番の質問の意味がわかりませんでした。
« 最終編集者 nulla 日時 2010 年 7 月 21 日(水) 16:53. »
会員
登録者: 3 2010
返信数: 6
返信本当にありがとうございます!

<追記 忘れてましたが1番の質問の意味がわかりませんでした。
説明がわかりづらくて申し訳ありません!


作成している予約フォームですが、
【入力画面(HTML)】確認ボタン→【 確認画面(rsv.php)】送信ボタン →
【”ありがとうございました。予約を受け付けました”(rsv.php)】

という流れで、フォームで入力してものを、
確認としてrsv.phpで出力した後、送信したいのです。

その際に、(あなたが選んだのは)「商品1:1個」「商品2:2個」と表示する為に
PHPでどのように記述すればいいのか

配列が2つあるので、
forでの値の回し方は↓の記述でいいのか、

もしくはfor()以外の他の関数を使用して配列を表示する場合は、
どういった記述がいいのか
そちらをお聞きしたかったのです

<?php
//配列を取り出し表示します。
for( $i = 0; $i < count( $shohin ); $i ++ ){
for( $i = 0; $i < count( $kosu ); $i ++ ){
print "{$shohin[$i]}{$kosu[$i]}<br/>";} }
//配列を文字列に変換。
$shohin = implode("/", $_POST['shohin']);
$kosu = implode("/", $_POST['kosu']);
?>


説明不足ですみません。
上記でも分かりづらかったら仰って下さい。
よろしくお願い致します。
会員
登録者: 8 2009
返信数: 103
それでしたらすでに用件は満たしているような気がします。
私が提示したソースを実際に試してみてください。
会員
登録者: 3 2010
返信数: 6
早速の返信ありがとうございます!

実際に試させて頂こうと、サーバーにあげ、実行したのですが、
Fatal error: Call to undefined function: striplashes() in /home/sites/chicappa.jp/users/chicappa.jp-climbone/web/test/rsv.php on line 30 と表示されました。

私のコードで on line 30 は $var = striplashes($var);  が該当するのですが

もしくは私の方に不手際がありますでしょうか?

お手数おかけしまして本当にすみません。
よろしくお願いしますm(_ _)m
会員
登録者: 8 2009
返信数: 103
おはようございます。
誤植でした。
striplashes → stripslashes
会員
登録者: 3 2010
返信数: 6
nulla様 返信ありがとうございます。

無事思い通りの仕様ができました!m(_ _)m

提示して頂いたソースを何度も拝見し、
一部を作成中のphpに組み込ませて頂きました。

作成中のものは、if elseでエラーを指定してあり
確認→送信と1つのphpでしたが、
それだとうまく配列がメール送信されない為、
確認と送信のphpと2つのphpに分けて、組み込みました。

まだ勉強不足の為、正しく記述できてるかはわかりませんが、
何とか希望通りの仕様となりました。

本当に困っていたので、助かりました。
ありがとうございます!

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » 配列を使うメールフォーム

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています