サニタイズについて教えてください

このQ&Aのポイント
  • PHPの問い合わせフォームでのサニタイズ方法を教えてください
  • サニタイズはhtmlspecialchars以外にも何か方法があるのでしょうか?
  • 入力内容の誤りをチェックするためのコードも教えてください
回答を見る
  • ベストアンサー

サニタイズについて教えて下さい。

PHPで問い合わせフォームを作成しましたが、サニタイズされているかがわかりません。 以下は、submit後のphpファイルですが、サニタイズされていなければ、どこにどのようなコードを記述すれば良いのでしょうか? また、サニタイズはhtmlsprcialcharsの他になにかあるのでしょうか? function myEcho($errorBool, $value) { if($errorBool) { echo'<FONT COLOR="#cc3333">',$value,'</FONT><br/>';; } else { echo $value; } } // list用? function myListEcho($errorBool, $value) { if($errorBool) { echo'お問い合せ内容をお選びください<FONT COLOR="#cc3333">&nbsp;※必ず入力してください。</FONT>';; } else { echo $value; } } // 名前のチェック $name=$_POST['name']; $nameError = false; if($name=='') { $nameError = true; $name = '※必ず入力してください。';; } // E-mailのチェック $mail=$_POST['mail']; $mailError = false; $mail2=$_POST['mail2']; $mail2Error = false; if (!preg_match( '/^[a-z0-9][a-z0-9_\.\-]*@[a-z0-9][a-z0-9_\.\-]+[a-z]$/i', $mail)) { $mailError = true; $mail='※正しいメールアドレスを指定してください。'; }elseif($mail!==$mail2) { $mailError = true; $mail='※確認用メールアドレスと一致していません。'; } // 確認用チェック if($mail2=='') { $mail2Error = true; $mail2='※必ず入力してください。'; } // お問い合わせ内容確認? $list=$_POST['list']; $listError = false; if($list=='お問い合せ内容をお選びください') { $listError = true; } // 内容 $content=$_POST['content']; $contentError = false; if($content=='') { $contentError = true; $content='※必ず入力してください。';; } ?> <?php if($nameError || $mailError || $mail2Error || $listError || $contentError) { echo'<p align="center"><FONT COLOR="#cc3333">入力内容に誤りがあります。※印の項目は必ずご記入ください。</FONT></p>';; } else{ echo'<p class="text4">以下の内容で送信しますか?</p>';; } ?> <table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="190" align="left" bgcolor="#FFF09D">お名前<span class="tabletext1"></span></td> <td> <?php myEcho($nameError,$name);; ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス<span class="tabletext1"></span></td> <td> <?php myEcho($mailError,$mail);; ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス(確認)<span class="tabletext1"></span></td> <td> <?php myEcho($mail2Error,$mail2);; ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">お問い合せ内容<span class="tabletext1"></span></td> <td> <?php myListEcho($listError,$list);; ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">内容<span class="tabletext1"></span></td> <td> <?php myEcho($contentError,$content);; ?> </td> </tr> </table> <?php if($nameError || $mailError || $mail2Error || $listError || $contentError) { echo'<form>'; echo'<p align="center" class="margin01"><input type="button" value="戻る" onclick="history.back()"</p>'; echo'</form>'; } else { echo'<form method="post"action="thanks.php">'; echo'<input type="hidden" name="name" value="'.$name.'">'; echo'<input type="hidden" name="mail" value="'.$mail.'">'; echo'<input type="hidden" name="mail2" value="'.$mail2.'">'; echo'<input type="hidden" name="list" value="'.$list.'">'; echo'<input type="hidden" name="content" value="'.$content.'">'; echo'<p align="center" class="margin01"><input type="button"onclick="history.back()"value="戻る">'; echo'<input type="submit"value="OK"></p>'; echo'</form>'; } ?>

noname#233083
noname#233083
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

<?php function in_array_denial( $ary, $n ) { foreach ( $ary as $a ) if ( $a !== $n ) return false; return true; } define( 'FE_EMPTY', 1 ); define( 'FEDESAGREEMENT', 2 ); $e = array( 'name' => 0 ,'mail' => 0 ,'mail2' => 0 ,'list' => 0 ,'content' => 0 ); // 名前のチェック if( $_POST['name'] === '' ) $e['name'] = FE_EMPTY; // 空文字と比較する場合は === を用いる // E-mailのチェック if ( !preg_match('/^[a-z0-9][a-z0-9_\.\-]*@[a-z0-9][a-z0-9_\.\-]+[a-z]$/i', $_POST['mail']) ) $e['mail'] = FE_DESAGREEMENT; // 確認用チェック if( $_POST['mail2'] === '' ) $e['mail2'] = FE_EMPTY; elseif( $_POST['mail'] !== $_POST['mail2'] ) $e['mail2'] = FE_DESAGREEMENT; // お問い合わせ内容確認? if($list=='お問い合せ内容をお選びください') $e['list'] = true; // 内容 if($content=='') $e['content'] = FE_EMPTY; ?> <?php if( in_array_denial( $e, 0 ) ) : ?> <p align="center"><font color="#cc3333">入力内容に誤りがあります。※印の項目は必ずご記入ください。</font></p> <?php else : ?> <p class="text4">以下の内容で送信しますか?</p> <?php endif; ?> <table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="190" align="left" bgcolor="#FFF09D">お名前<span class="tabletext1"></span></td> <td> <?php if( $e['name'] === FE_EMPTY ) :?> <font color="#cc3333">必ず入力してください</font><br/> <?php else : ?> <?=htmlentities($_POST['name'], ENT_COMPAT|ENT_XHTML, UTF-8 )?><!--値を埋め込む場合は必ずサニタイズを行う--> <?php endif;?> </td> </tr> ・・・ <?php if( in_array_denial( $e, 0 ) ) : ?> <p align="center" class="margin01"><a href="..." value="戻る" onclick="history.back()"></a></p>'; <?php else : ?> <form method="post"action="thanks.php">'; <input type="hidden" name="name" value="<?=htmlentities($_POST['name'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="mail" value="<?=htmlentities($_POST['mail'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="mail2" value="<?=htmlentities($_POST['mail2'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="list" value="<?=htmlentities($_POST['list'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="content" value="<?=htmlentities($_POST['content'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <p align="center" class="margin01"><a href="..." onclick="history.back()"value="戻る"> <input type="submit"value="OK"></p> </form> <?php endif; ?>

noname#233083
質問者

お礼

ありがとうございます!!

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

「どういう処理をするのか」によります。 ブラウザに(htmlソースとして)返すのであれば必ずhtmlspecialchars()を通してください。 http://php.net/manual/ja/function.htmlspecialchars.php 第二引数はENT_QUOTES、第三引数で文字エンコードもキチンと指定します。

noname#233083
質問者

お礼

ありがとうございます!! 試してみます!!

関連するQ&A

  • 問い合わせフォームでの確認画面について

    phpで問い合わせフォームを作成しているのですが、修正ヵ所があれば問い合わせフォームの下に「戻る」ボタンだけを表示し、正確に入力されていれば「戻る」ボタンと「OK」ボタンを表示することができました。 しかし、問い合わせフォームの上に表示する、修正ヵ所があれば「入力内容に誤りがあります。※印の項目は必ずご記入ください。」、正確に入力されていれば「以下の内容で送信しますか?」を表示させることができません。 この場合、どのようなコードを、どの部分に記述したら良いのでしょうか? ちなみに、submit後のphpファイルのコードは以下となります。 かなり無駄が多いかもしれません。 <table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="190" align="left" bgcolor="#FFF09D">お名前<span class="tabletext1"></span></td> <td> <?php $name=$_POST['name']; if($name=='') { echo'<FONT COLOR="#cc3333">※必ず入力してください。</FONT>';; } else { echo $name; } ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス<span class="tabletext1"></span></td> <td> <?php $mail=$_POST['mail']; if (!preg_match( '/^[a-z0-9][a-z0-9_\.\-]*@[a-z0-9][a-z0-9_\.\-]+[a-z]$/i', $mail)) { echo'<FONT COLOR="#cc3333">※正しいメールアドレスを指定してください。</FONT>';; }elseif($_POST['mail']!==$_POST['mail2']) { echo '<FONT COLOR="#cc3333">※確認用メールアドレスと一致していません。</FONT>';; }else{ echo $mail; } ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス(確認)<span class="tabletext1"></span></td> <td> <?php $mail2=$_POST['mail2']; if($mail2=='') { echo'<FONT COLOR="#cc3333">※必ず入力してください。</FONT>';; } else { echo $mail2; } ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">お問い合せ内容<span class="tabletext1"></span></td> <td> <?php $list=$_POST['list']; if($list=='お問い合せ内容をお選びください') { echo'お問い合せ内容をお選びください<FONT COLOR="#cc3333">&nbsp;※必ず入力してください。</FONT>';; } else { echo $list; } ?> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">内容<span class="tabletext1"></span></td> <td> <?php $content=$_POST['content']; if($content=='') { echo'<FONT COLOR="#cc3333">※必ず入力してください。</FONT>';; } else { echo $content; } ?> </td> </tr> </table> <?php if($name==''|| $mail==''|| $mail2==''|| $list==''|| $content=='') { echo'<form>'; echo'<p align="center" class="margin01"><input type="button" value="戻る" onclick="history.back()"</p>'; echo'</form>'; } elseif($_POST['mail']!==$_POST['mail2']) { echo'<form>'; echo'<p align="center" class="margin01"><input type="button" value="戻る" onclick="history.back()"</p>'; echo'</form>'; } elseif(!preg_match( '/^[a-z0-9][a-z0-9_\.\-]*@[a-z0-9][a-z0-9_\.\-]+[a-z]$/i', $mail)) { echo'<form>'; echo'<p align="center" class="margin01"><input type="button" value="戻る" onclick="history.back()"</p>'; echo'</form>'; } elseif($list=='お問い合せ内容をお選びください') { echo'<form>'; echo'<p align="center" class="margin01"><input type="button" value="戻る" onclick="history.back()"</p>'; echo'</form>'; } else { echo'<form method="post"action="thanks.php">'; echo'<input type="hidden" name="name" value="'.$name.'">'; echo'<input type="hidden" name="mail" value="'.$mail.'">'; echo'<input type="hidden" name="mail2" value="'.$mail2.'">'; echo'<input type="hidden" name="list" value="'.$list.'">'; echo'<input type="hidden" name="content" value="'.$content.'">'; echo'<p align="center" class="margin01"><input type="button"onclick="history.back()"value="戻る">'; echo'<input type="submit"value="OK"></p>'; echo'</form>'; } ?>

    • ベストアンサー
    • PHP
  • htmlファイルからphpファイルへの値の受け渡し

    表を使った問い合わせフォームを作成したのですが、データを受け渡す方法がわかりません!! 初めの問い合わせページは以下のようにhtmlファイルで記述しました。 この場合、次のページにデータを引き渡すphpファイルには、どうのような記述をしたら良いのでしょうか? <form method="post" action="info.php"> <table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="190" align="left" bgcolor="#FFF09D">お名前 <span class="tabletext1">※必須</span></td> <td><input name="name" type="text" class="form01" id="name" /><br /> 入力例:山田 太郎 </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス <span class="tabletext1">※必須</span></td> <td><input name="mail" type="text" class="form01" id="mail" /><br /> 入力例:●●●●●●@yamada.co.jp </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス(確認) <span class="tabletext1">※必須</span></td> <td><input name="mail2" type="text" class="form01" id="mail2" /></td> </tr> <tr> <td align="left" bgcolor="#FFF09D">お問い合せ内容 <span class="tabletext1">※必須</span></td> <td> <select name="list" id="list"> <option>お問い合せ内容をお選びください</option> <option>事業内容について</option> <option>求人について </option> <option>その他</option> </select> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">内容 <span class="tabletext1">※必須</span></td> <td><textarea name="content" id="内容" cols="45" rows="5"></textarea></td> </tr> </table> <p align="center" class="margin01"> <input type="reset" value="クリア" /> <input type="submit" value="送信内容を確認する" /> </p> <input type="hidden" name="test" value="cloud" /> </form>

    • ベストアンサー
    • PHP
  • PHPでフォーム作成について(初歩的質問)

    PHPに関しては超初心者のものです。 テキストで学び始めたのですが、HTMLのフォームにPHPスクリプトが組み込まれた以下のようなプログラムの時、写真のようになってうまく表示されません(当然動作しません)。 経験者の方なら、おわかりになられると思うのですが、調べてもわからず困っています。 お助けをよろしくお願いいたします。 【環境】 Windows XP, XAMPP(PHP5.3/Apache2.2・・・) 【ソース】 <?php //------------------------------------------------------- // ■ 初期値設定 //------------------------------------------------------- $kname = ""; ~ (中略) ~ ?> <hr> <b>会員登録フォーム)</b><p> <form action="<?=$_SERVER["PHP_SELF"]?>" method="POST" enctype="multipart/form-data"> <table border="1" width="600" cellspacing="0" cellpadding="0"> <?php //-------------------------------------------------- // □ 会員名 //-------------------------------------------------- ?> <tr> <td align="center" width="150" bgcolor="#b2ce77">会員名</td> <td align="left" width="450"> &nbsp;<input type="text" name="kname" value="<?=$kname?>" size="40"> </td> </tr> <?php //-------------------------------------------------- // □ 住所 //-------------------------------------------------- ?> <tr> <td align="center" width="150" bgcolor="#b2ce77">住所</td> <td align="left" width="450"> &nbsp;<select name="ken"> <option value="1"<?if ($ken=="1"){echo " selected";}?>>北海道</option> <option value="2"<?if ($ken=="2"){echo " selected";}?>>青森県</option> <option value="3"<?if ($ken=="3"){echo " selected";}?>>秋田県</option> <option value="4"<?if ($ken=="4"){echo " selected";}?>>岩手県</option> </select> </td> </tr> <?php //-------------------------------------------------- // □ 性別 //-------------------------------------------------- ?> <tr> <td align="center" width="150" bgcolor="#b2ce77">性別</td> <td align="left" width="450"> &nbsp;<input type="radio" name="seibetsu" value="1"<?if ($seibetsu=="1"){echo " checked";}?>>男性 &nbsp;<input type="radio" name="seibetsu" value="2"<?if ($seibetsu=="2"){echo " checked";}?>>女性 </td> </tr> <?php //-------------------------------------------------- // □ メールアドレス //-------------------------------------------------- ?> <tr> <td align="center" width="150" bgcolor="#b2ce77">メールアドレス</td> <td align="left" width="450"> &nbsp;<input type="text" name="mail" value="<?=$mail?>" size="30"> </td> </tr> <?php //-------------------------------------------------- // □ パスワード //-------------------------------------------------- ?> <tr> <td align="center" width="150" bgcolor="#b2ce77">パスワード</td> <td align="left" width="450"> &nbsp;<input type="password" name="pw" value="<?=$pw?>" size="30"><br> &nbsp;5文字以下の半角数字を入力して下さい。 </td> </tr> <?php //-------------------------------------------------- // □ 画像ファイル //-------------------------------------------------- ?> ~ 中略 ~ <?php //-------------------------------------------------- // □ 備考 //-------------------------------------------------- ?> <tr> <td align="center" width="150" bgcolor="#b2ce77">備考</td> <td align="left" width="450"> &nbsp;<textarea name="biko" cols="60" rows="10"><?=$biko?></textarea> <input type="hidden" name="no" value="abc"> </td> </tr> </table> <br> <?php //-------------------------------------------------- // □ 登録ボタン //-------------------------------------------------- ?> <input type="submit" name="submit" value="   登録する   "> </form> </body> </html>

    • 締切済み
    • PHP
  • チェックボックス + フリーワード検索 PHP&MYSQL

    現在検索画面の作成をしているのですが、分からないことがありましたので 質問をさせて頂きました。 検索画面ですが、簡単な2ページ構成になっております。(kensaku.phpとresult.php) 仕様としてはkensaku.phpにチェックボックス(複数選択可)と フリーワードがあり、一つの検索ボタンで検索し結果をresult.phpに表示させようと思っております。データベースはMYSQLです。 検索ボタンが一つしかないため、もしチェックボックスが選択されず、フリーワードだけ入力されたのであれば、それだけで検索。その逆のもし チェックボックスだけ選択されたのであればそれだけで検索。 また両方入力されたのであれば、両方のデータを検索できるように したいと思っております。 フリーワード検索までは出来るようになったのですが、 チェックボックス検索(両方検索・片方のみ検索)などが どうしても出来ません。 どなたかご存知の方ご教授して頂けないでしょうか。 宜しくお願い致します。 こちらがコードになります。 1,kensaku.php <form action="result.php" method="POST" > <table class="font12" cellpadding="5" cellspacing="10" width="430" align="center"> <tr> <td> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="1" />aaa</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="2" />bbb</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="3" />ccc</span><br /> </td> </tr> <tr> <td><input type="text" name="sejyutu_else" value="フリーワード検索" size="30" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="検索する" /></td> 2, result.php <?php $sejyutu = $_POST["sejyutu"]; $sejyutu_else = $_POST["sejyutu_else"]; if($sejyutu and sejyutu_else<>''){ //DB接続・選択 if (!$int_connect = @mysql_connect('localhost','aaa','aaaa')) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("database", $int_connect)) { die("can't use selected database."); } $sql = "select * from table where sejyutu_else like'%$sejyutu_else%'"; $result=mysql_query($sql,$int_connect); $rows=mysql_num_rows($result); ?> <table width="430" cellpadding="5" cellspacing="0" class="font12"> <?php while($row = mysql_fetch_array($result)){ ?> <tr> <td colspan="2"><p class="salon_name"><?php echo $row["name"]; ?></p></td> </tr> <tr> <td valign="top"><p class="salon_item">最寄り駅:</p></td> <td class="salon_detail"><?php echo $row["station"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">住所:</p></td> <td class="salon_detail"><?php echo $row["address"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">施術名</p></td> <td class="salon_detail"><?php echo $row["sejyutu"];?></td> </tr> <?php } } ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • チェックボックスから検索、PHP コード付き

    現在チェックボックスとフリーワード検索をしようしたサイトを作ろうとしているのですが、どうしても仕様通りにいきませんでしたのでここで 質問をさせて頂きました。 検索画面ですが、簡単な2ページ構成になっております。(kensaku.phpとresult.php) コードのどこが間違っているのかが分かりません。 どなたかお分かりになる方がいましたらお伺い出来ませんでしょうか。 宜しくお願い致します。 1,kensaku.php <form action="result.php" method="POST" > <table class="font12" cellpadding="5" cellspacing="10" width="430" align="center"> <tr> <td> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="1" />aaa</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="2" />bbb</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="3" />ccc</span><br /> </td> </tr> <tr> <td><input type="text" name="sejyutu_else" value="フリーワード検索" size="30" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="検索する" /></td> <?php //DB接続・選択 if (!$int_connect = @mysql_connect('localhost','bbb','aaa')) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("database", $int_connect)) { die("can't use selected database."); } // SQLクエリ $sql = "select * from table"; $where = array(); // sejyutuカラムの条件を調べる if (isset($_POST['sejyutu']) && is_array($_POST['sejyutu'])) { foreach ($_POST['sejyutu'] as $sejyutu) { $where[] = "sejyutu like '%" . mysql_real_escape_string($sejyutu) . "%'"; } } // sejyutu_elseカラムの条件を調べる if (isset($_POST['sejyutu_else']) && strlen($_POST['sejyutu_else'])) { $where[] = "sejyutu_else like '%" . mysql_real_escape_string($_POST['sejyutu_else']) . "%'"; } // 検索キーワードの有無により処理分岐 if (!$where) { echo "検索キーワードを入力して下さい"; } else { // SQL文を生成する $sql .= " where " . implode(' OR ', $where); $res = mysql_query($sql,$int_connect); if (!mysql_num_rows($res)) { echo "<p>該当データがありません</p>"; } else { // TABLEタグを書く while ($row = mysql_fetch_array($res)) { // 各結果をTR,TDタグで整形して表示する ?> <table width="430" cellpadding="5" cellspacing="0" class="font12"> <tr> <td colspan="2"><p class="salon_name"><?php echo mb_convert_encoding(trim($row["salon_name"]),"sjis","euc-jp") ?></p></td> <td><a href="salon_page.php?code=<?php echo $row['id'];?>">詳しくはこちら</a></td> </tr> <tr> <td valign="top"><p class="salon_item">最寄り駅:</p></td> <td class="salon_detail"><?php echo mb_convert_encoding(trim($row["station"]),"sjis","euc-jp") ?></td> </tr> <tr> <td valign="top"><p class="salon_item">住所:</p></td> <td class="salon_detail"><?php echo mb_convert_encoding(trim($row["address"]),"sjis","euc-jp") ?></td> </tr> <tr> <td valign="top"><p class="salon_item">施術名</p></td> <td class="salon_detail"><?php echo mb_convert_encoding(trim($row["sejyutu"]),"sjis","euc-jp") ?></td> </tr> <?php } } } ?>

    • ベストアンサー
    • PHP
  • 画面の再読込をせずに動作する方法について

    下記のソースで動作は出来ているのですが、画面の再読込が必要な状況となっております。 そのため、再読込をせずに動作させたいと思ったのですが、どうすればできるかわからなかったのでアドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 【やりたい事】 1. サブ入力画面でcopyボタンを押下時、入力画面の名前とメールアドレスをサブ入力画面にコピーしているのですが、画面の再読込が必要になっているのを、再読込無しで動作させたいです。 2. 入力画面でdel2ボタンを押下時、3rdの行の内容を2ndにコピーした上で、3rdの内容を削除しているのですが、画面の再読込が必要になっているのを、再読込無しで動作させたいです。 3. これは出来ればで結構なのですが、del2(またはdel3)ボタン押下時、その行に何もデータが存在しない場合は、何かしら警告メッセージを表示できるとありがたいです。 【動作確認方法】 下記の3つのファイルをドキュメントルート直下にtestフォルダを設置し、ブラウザからindex.phpにアクセスしてください。 その後、任意の名前とメールアドレスを入力し、add2ボタンを押下するとサブ入力画面に遷移するため、そこでcopyボタンの動作を試すことができます。 また、del2ボタンの動作は、サブ入力画面で任意の名前とメールアドレスを入力後、saveボタンを押下すると入力画面に遷移するため、そこでdel2(del3)ボタンの動作を試すことができます。 【ソースコード】 1. index.php <?php mb_internal_encoding('UTF-8'); $document_root = $_SERVER['DOCUMENT_ROOT']; $list=array( "mode" , "submit" , "name" , "name1" , "name2" , "name3" , "mail" , "mail1" , "mail2" , "mail3" ); foreach($_POST as $key=>$value){ if (in_array($key, $list)) { $$key=strip_tags($value); } } if($mode=="input") { if($submit == "add2") { $name1 = $name2; $mail1 = $mail2; require_once($document_root . "/test/sub_input.html"); } elseif($submit == "add3") { $name1 = $name3; $mail1 = $mail3; require_once($document_root . "/test/sub_input.html"); } elseif($submit == "del2") { $name2 = $name3; $mail2 = $mail3; $name3 = ""; $mail3 = ""; require_once($document_root . "/test/input.html"); } else { $name3 = ""; $mail3 = ""; require_once($document_root . "/test/input.html"); } } else if($mode=="sub_input") { if($submit == "copy") { $name1 = $name; $mail1 = $mail; require_once($document_root . "/test/sub_input.html"); } else { if($name2 == "") { $name2 = $name1; $mail2 = $mail1; require_once($document_root . "/test/input.html"); } else { $name3 = $name1; $mail3 = $mail1; require_once($document_root . "/test/input.html"); } } } else { require_once($document_root . "/test/input.html"); } ?> 2. input.html <form action="./index.php" method="post"> <table width="100%"> <tr> <td>名前</td> <td><input type="text" name="name" id="name" value="<?php echo $name ?>" /></td> <td>&nbsp;</td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="mail" id="mail" value="<?php echo $mail ?>" /></td> <td>&nbsp;</td> </tr> <tr> <td>2nd</td> <td><?php echo $name2; ?><input type="hidden" name="name2" value="<?php echo $name2; ?>" /><input type="hidden" name="mail2" value="<?php echo $mail2; ?>" /></td> <td><input type="submit" name="submit" value="add2" /> <input type="submit" name="submit" value="del2" /></td> </tr> <tr> <td>3rd</td> <td><?php echo $name3; ?><input type="hidden" name="name3" value="<?php echo $name3; ?>" /><input type="hidden" name="mail3" value="<?php echo $mail3; ?>" /></td> <td><input type="submit" name="submit" value="add3" /> <input type="submit" name="submit" value="del3" /></td> </tr> </table> <input type="hidden" name="mode" value="input" /> </form> 3. sub_input.html <form action="./index.php" method="post"> <input type="submit" name="submit" value="copy" /> <table width="100%"> <tr> <td>名前</td> <td><input type="text" name="name1" id="name1" value="<?php echo $name1 ?>" /></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="mail1" id="mail1" value="<?php echo $mail1 ?>" /></td> </tr> </table> <input type="submit" name="submit" value="save" /> <input type="hidden" name="mode" value="sub_input" /> <input type="hidden" name="name" id="name" value="<?php echo $name ?>" /> <input type="hidden" name="name2" id="name" value="<?php echo $name2 ?>" /> <input type="hidden" name="name3" id="name" value="<?php echo $name3 ?>" /> <input type="hidden" name="mail" id="mail" value="<?php echo $mail ?>" /> <input type="hidden" name="mail2" id="mail" value="<?php echo $mail2 ?>" /> <input type="hidden" name="mail3" id="mail" value="<?php echo $mail3 ?>" /> </form> 以上、宜しくお願いします。

  • PHPで問い合わせフォーム 受信すると文字化けする

    フォーム⇒ (1)確認  ⇒ (2)送信 と3つに分けて、phpファイルに書きました。 ためしに、送信してみると、成功はするものの、文字が化けてメールの内容が分かりません。 分からないので教えてください。 フォーム ↓ <form method="POST" action="kakunin.php"> <table border="0"> <tr> <td >お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="from" size="20"></td> </tr> <tr> <td>メールタイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value=" お問い合わせ内容を確認 "></td> </tr> </table> </form> (1) kakunin.php ↓ 入力フォームから情報を受け取り確認 <?php // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 値をチェックします。 $ErrFlg = 0; if ($name == "") { echo "<p>お名前を入力してください。"; $ErrFlg = 1; } if ($from == "") { echo "<p>メールアドレスを入力してください。"; $ErrFlg = 1; } if ($title == "") { echo "<p>メールタイトルを入力してください。"; $ErrFlg = 1; } if ($naiyou == "" ) { echo "<p>メッセージを入力してください。"; $ErrFlg = 1; } if ($ErrFlg) { exit(); } ?> 内容を確認して送信ボタンをクリックしてください <form method="POST" action="mail.php"> <table border="0"> <tr> <td width="100">お名前</td> <td width="300"><?php echo $name?></td> </tr> <tr> <td width="100">メールアドレス</td> <td width="300"><?php echo $from?></td> </tr> <tr> <td width="100">メールタイトル</td> <td width="300"><?php echo $title?></td> </tr> <tr> <td width="100">メッセージ</td> <td width="300"><?php echo nl2br($naiyou) ?></td> </tr> <tr> <td colspan="2"><input type="submit" value="送信"></td> </tr> </table> <input type="hidden" name="name" value="<?php echo $name ?>"> <input type="hidden" name="from" value="<?php echo $from ?>"> <input type="hidden" name="title" value="<?php echo $title ?>"> <input type="hidden" name="naiyou" value="<?php echo $naiyou ?>"> </form> (2) mail.php ↓のコード 送信 <?php // メール送信先を指定します。 $to = "xxxxxxxxxx■ gmail.com"; // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // メール本文を組み立てます。 $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mb_send_mail($to, $title, $naiyou, "From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } } ?>

    • ベストアンサー
    • PHP
  • 子画面から親画面に値を返す方法

    親画面で入力した内容をPOST後 子画面に表示して(表示のみ、モーダル状態)内容を確認して ボタンで【OK】か【キャンセル】を押下して親画面に何が押下されたか 戻したいです。 私なりに考えて見ましたが、子画面からの戻し方がよく わかりません。 よろしくお願いします。 親画面 【oya.php】 <? session_start(); if($_POST["CHK"]){ $_SESSION["item1"] = $_POST["item1"]; $_SESSION["item2"] = $_POST["item2"]; returnValue = showModalDialog("ko.php"); //子画面の戻り値が【OK】のときDBに登録処理をする //【OK】でないときはそのまま } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="oya.php" method="post"> <table width="70%" align = "center" cellspacing="0"> <tr> <td align="right">入力項目1</td> <td><input type="text" name="item1" size="10" maxlength="10" value = "<? echo $item1 ?>"></td> </tr> <tr> <td align="right">入力項目2</td> <td><input type="text" name="item2" size="10" maxlength="10" value = "<? echo $item2 ?>"></td> </tr> <tr> <td> <input type="submit" name="CHK" value="確認"> </td> </tr> </table> </form> </body> </html> 子画面 【ko.php】 <? session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>確認画面</title> <link rel="stylesheet" href="./css/style.css" type="text/css" /> </head> <body> 確認後「OK」OR「キャンセル」を押して下さい。 <table width="70%" align = "center" cellspacing="0"> <tr> <td align="right">入力項目1</td> <td><input type="text" name="item1" size="10" maxlength="10" value = "<? echo $_SESSION["item1"] ?>" readonly="readonly"></td> </tr> <tr> <td align="right">入力項目2</td> <td><input type="text" name="item2" size="10" maxlength="10" value = "<? echo $_SESSION["item2"] ?>" readonly="readonly"></td> </tr> </table> </body> </html>

    • ベストアンサー
    • PHP
  • メールフォームについて

    この中にどのようなHTMLを書けば自分のPCにメールが届く ようになりますか?よろしくお願いします。 <h2>■MAIL FORM</h2> <div class="text"> <form><table><tr><td width="100" align=right> NAME</td><td align=right><input type="text" name="Name" size="34"></td></tr><tr><td width="100" align=right> MAIL</td><td align=right><input type="text" name="Mail" size="34"></td></tr></table> <TEXTAREA NAME="Comments" ROWS="8" COLS="39" value="comments"></TEXTAREA> <br> <table><tr><td width="100" align=right> </td> </tr><tr> <td width="100" align=right> URL</td><td><input type="text" name="URL" value="http://" size="34"></td></tr><tr><td></td><td align="right"> <INPUT TYPE="reset" VALUE=" Reset "> <INPUT TYPE="submit" VALUE=" Send "></FORM> </td></tr></table><br></div>

    • ベストアンサー
    • HTML
  • 動的パラメータ値を渡しURLへ移動したいのですが

    クロネコヤマトのカード決済ページへリンクを張っています。 動的パラメータ値を渡し//カードのURLへ移動したいのですが、下記のようにソース単体では正常に移動します。 <?php //カードのURL define(PHP_CARD, 'https://*********.jp/'); //このスクリプト名 define(PHP_SELF, 'index.php'); <tr><th colspan="2">総合計</th></tr> <tr><td colspan="2" align="right">'.$goukei2.' 円</td></tr> (確認表示部分) echo"<form action=\"".PHP_CARD."\" method=\"post\" target=\"_blank\" accept-charset=\"Shift_JIS\"> <input type=\"hidden\" name=\"settle_price\" value=\"$goukei2\" /> <input type=\"submit\" value=\"お支払手続きへ\" name=\"card\" /></form> "; $card=$_POST["card"]; //お支払手続きへボタンが押された場合 ?> 下記のスクリプトにソースを貼り付けると、お支払手続きへのボタンをクリックしても//このスクリプト名(index.php)へ移動してしまいます。どうかご指導よろしくお願いします。 <?php //このスクリプト名 define(PHP_SELF, 'index.php'); //■お会計 function last($name,$mail,$yno,$ad,$tel,$way,$ps,$dm,$ad2,$time,$title2,$goukei,$goukei2,$dai2,$so){ global $lines,$cmdend; $data = '<table class="m"><tr><th colspan="2">商品情報</th></tr> '.$title2.' <tr><td>送料</td><td>'.$so.' 円</td></tr> <tr><td>手数料</td><td>'.$dai2.' 円</td></tr> <tr><th colspan="2">総合計</th></tr> <tr><td colspan="2" align="right">'.$goukei2.' 円</td></tr> <tr><th colspan="2">お客様情報</th></tr> <tr><td>お名前</td><td>'.$name.'</td></tr> <tr><td>メールアドレス</td><td>'.$mail.'</td></tr> <tr><td>郵便番号</td><td>'.$yno.'</td></tr> <tr><td>お届け先ご住所</td><td>'.$ad.'</td></tr> <tr><td>電話番号</td><td>'.$tel.'</td></tr> <tr><td>お支払い方法</td><td>'.$way.'</td></tr> <tr><td>連絡事項(配達希望日時等)</td><td>'.$ps.'</td></tr> <tr><td>お知らせ</td><td>'.$dm.'</td></tr> <tr><td>ご請求先ご住所</td><td>'.$ad2.'</td></tr> <tr><td>受注日時</td><td>'.$time.'</td></tr>'; if(!$_COOKIE['order']){ echo"<br />空です<br />"; }elseif($cmdend){ echo"<b class=\"stitle\">ご注文有難う御座いました。<br />このページを印刷して保存してください。メールも送信しております。</b>\n"; echo"$data\n"; echo"</td></tr></table>\n"; //カードのURL define(PHP_CARD, 'https://*********.jp/'); echo"<form action=\"".PHP_CARD."\" method=\"post\" target=\"_blank\" accept-charset=\"Shift_JIS\"> <input type=\"hidden\" name=\"TRS_MAP\" value=\"V_W02\" /> <input type=\"hidden\" name=\"trader_code\" value=\"900756001\" /> <input type=\"hidden\" name=\"order_no\" value=\"$time\" /> <input type=\"hidden\" name=\"goods_name\" value=\"$title2\" /> <input type=\"hidden\" name=\"settle_price\" value=\"$goukei2\" /> <input type=\"hidden\" name=\"buyer_name_kanji\" value=\"$name\" /> <input type=\"hidden\" name=\"buyer_tel\" value=\"$tel\" /> <input type=\"hidden\" name=\"buyer_email\" value=\"$mail\" /> <CENTER><FONT COLOR=\"#FF00FF\" SIZE=\"-2\">クレジットカードでお支払いされるお客様は<BR> 下記ボタンを押して手続きを行ってください。</FONT><BR> <BR><input type=\"submit\" value=\"お支払手続きへ\" name=\"card\" /></form> "; $card=$_POST["card"]; //お支払手続きへボタンが押された場合 echo"<br /><a href=\"".PHP_SELF."?\">トップへ戻る</a>\n"; }else{ echo"<b class=\"stitle\">お会計確認(ご確認後注文確定ボタンを押してください)</b><br />\n"; echo"$data\n"; echo"<tr><th colspan=\"2\"> </th>\n"; echo"<tr><td colspan=\"2\" align=\"center\"><a href=\"".PHP_SELF."?mode=reji\">戻る</a> \n"; echo"<input type=\"hidden\" name=\"cmdend\" value=\"cmdend\" />\n"; echo"<input type=\"submit\" value=\"注文確定\" name=\"cmdend\" onclick=\"DisableButton(this);\" /></td>"; echo"</td></tr></table>"; } } ?>

    • ベストアンサー
    • PHP