送信時チェックが複数表示されません - PHPプロ!Q&A掲示板

4875

  • 募集中!! 0P

送信時チェックが複数表示されません

質問日時 / 2017年10月31日 20:31    回答数 / 1件

Questioner:  dorako  このエントリーをはてなブックマークに追加 

キーワード / チェックボックス    緊急   

こんばんは。
アンケートで、チェックボックスを使用したのですが、
送信画面で後のものが反映されてしまっています。

HTMLの知識はあるのですが、phpに関してはあまりありません。

php工房から落としたものを利用しています。

ーーHTMLーー
<p class="midashi2"><span>1:○○</span><br>
<input type="checkbox" name="○○" value="1-9">1-9 <input type="checkbox" name="○○" value="10-19">10-19 <input type="checkbox" name="cat○○" value="20-30">20-30</textarea><br>

ーーーー

ーーphp(工房からそのまま落としたもので、普段は編集してません)--

/ 以下の変更は知識のある方のみ自己責任でお願いします。

//----------------------------------------------------------------------
//  関数定義(START)
//----------------------------------------------------------------------
function checkMail($str){
$mailaddress_array = explode('@',$str);
if(preg_match("/^[\.!#%&\-_0-9a-zA-Z\?\/\+]+\@[!#%&\-_0-9a-z]+(\.[!#%&\-_0-9a-z]+)+$/", "$str") && count($mailaddress_array) ==2){
return true;
}
else{
return false;
}
}
function h($string) {
  return htmlspecialchars($string, ENT_QUOTES,'utf-8');
}
function sanitize($arr){
if(is_array($arr)){
return array_map('sanitize',$arr);
}
return str_replace("\0","",$arr);
}
if(isset($_GET)) $_GET = sanitize($_GET);//NULLバイト除去//
if(isset($_POST)) $_POST = sanitize($_POST);//NULLバイト除去//
if(isset($_COOKIE)) $_COOKIE = sanitize($_COOKIE);//NULLバイト除去//

//----------------------------------------------------------------------
//  関数定義(END)
//----------------------------------------------------------------------
$copyrights = '<a style="display:block;text-align:center;margin:15px 0;font-size:11px;color:#aaa;text-decoration:none" href="http://ever-effort.com/" target="_blank">株式会社Ever effort</a>';

if($Referer_check == 1 && !empty($Referer_check_domain)){
if(strpos($_SERVER['HTTP_REFERER'],$Referer_check_domain) === false){
echo '<p align="center">リファラチェックエラー。フォームページのドメインとこのファイルのドメインが一致しません</p>';exit();
}
}
$sendmail = 0;
$empty_flag = 0;
$post_mail = '';
$errm ='';
$header ='';
foreach($_POST as $key=>$val) {
  if($val == "confirm_submit") $sendmail = 1;
if($key == $Email && $mail_check == 1){
  if(!checkMail($val)){
          $errm .= "<p class=\"error_messe\">「".$key."」はメールアドレスの形式が正しくありません。</p>\n";
          $empty_flag = 1;
  }else{
  $post_mail = h($val);
  }
}
}

// 必須設定項目のチェック
if($esse == 1) {
  $length = count($eles) - 1;
  foreach($_POST as $key=>$val) {
    
    if($val == "confirm_submit") ;
    else {
      for($i=0; $i<=$length; $i++) {
        if($key == $eles[$i] && empty($val)) {
          $errm .= "<p class=\"error_messe\">「".$key."」は必須入力項目です。</p>\n";
          $empty_flag = 1;
        }
      }
    }
  }
  foreach($_POST as $key=>$val) {
    
    for($i=0; $i<=$length; $i++) {
      if($key == $eles[$i]) {
        $eles[$i] = "confirm_ok";
      }
    }
  }
  for($i=0; $i<=$length; $i++) {
    if($eles[$i] != "confirm_ok") {
      $errm .= "<p class=\"error_messe\">「".$eles[$i]."」が未選択です。</p>\n";
      $eles[$i] = "confirm_ok";
      $empty_flag = 1;
    }
  }
}
// 管理者宛に届くメールの編集
$body="「".$subject."」からメールが届きました\n\n";
$body.="===========================\n\n";
foreach($_POST as $key=>$val) {
  
  $out = '';
  if(is_array($val)){
  foreach($val as $item){ 
  $out .= $item . ','; 
  }
  if(substr($out,strlen($out) - 1,1) == ',') { 
  $out = substr($out, 0 ,strlen($out) - 1); 
  }
 }else { $out = $val;} //チェックボックス(配列)追記ここまで
  if(get_magic_quotes_gpc()) { $out = stripslashes($out); }
  if($out == "confirm_submit" or $key == "httpReferer") ;
  else $body.="【 ".$key." 】 ".$out."\n";
}
$body.="\n===========================\n";
$body.="送信された日時:".date( "Y/m/d (D) H:i:s", time() )."\n";
$body.="送信者のIPアドレス:".$_SERVER["REMOTE_ADDR"]."\n";
$body.="送信者のホスト名:".getHostByAddr(getenv('REMOTE_ADDR'))."\n";
$body.="問い合わせのページURL:".@$_POST['httpReferer']."\n";
if($mailFooterDsp == 1) $body.= $mailSignature;
//--- 管理者宛に届くメールの編集終了 --->


if($remail == 1) {
//--- 差出人への自動返信メールの編集
if(isset($_POST[$dsp_name])){ $rebody = h($_POST[$dsp_name]). " 様\n";}
$rebody.= $remail_text;
$rebody.="\n===========================\n\n";
foreach($_POST as $key=>$val) {
  
  $out = '';
  if(is_array($val)){
  foreach($val as $item){ 
  $out .= $item . ','; 
  }
  if(substr($out,strlen($out) - 1,1) == ',') { 
  $out = substr($out, 0 ,strlen($out) - 1); 
  }
 }else { $out = $val; }//チェックボックス(配列)追記ここまで
  if(get_magic_quotes_gpc()) { $out = stripslashes($out); }
  if($out == "confirm_submit" or $key == "httpReferer") ;
  else $rebody.="【 ".$key." 】 ".$out."\n";
}
$rebody.="\n===========================\n\n";
$rebody.="送信日時:".date( "Y/m/d (D) H:i:s", time() )."\n";
if($mailFooterDsp == 1) $rebody.= $mailSignature;
$reto = $post_mail;
$rebody=mb_convert_encoding($rebody,"JIS","utf-8");
$re_subject="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($re_subject,"JIS","utf-8"))."?=";

if(!empty($refrom_name)){

$default_internal_encode = mb_internal_encoding();
if($default_internal_encode != 'utf-8'){
  mb_internal_encoding('utf-8');
}
$reheader="From: ".mb_encode_mimeheader($refrom_name)." <".$to.">\nReply-To: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();

}else{
$reheader="From: $to\nReply-To: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
}
}
$body=mb_convert_encoding($body,"JIS","utf-8");
$subject="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,"JIS","utf-8"))."?=";

if($userMail == 1 && !empty($post_mail)) {
  $from = $post_mail;
  $header="From: $from\n";
  if($BccMail != '') {
$header.="Bcc: $BccMail\n";
  }
$header.="Reply-To: ".$from."\n";
}else {
  if($BccMail != '') {
$header="Bcc: $BccMail\n";
  }
$header.="Reply-To: ".$to."\n";
}
$header.="Content-Type:text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
  

if(($confirmDsp == 0 || $sendmail == 1) && $empty_flag != 1){
  mail($to,$subject,$body,$header);
  if($remail == 1) { mail($reto,$re_subject,$rebody,$reheader); }
}
else if($confirmDsp == 1){ 


/* ▼▼▼送信確認画面のレイアウト※編集可 オリジナルのデザインも適用可能▼▼▼ */
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/default.css"/>
<title>アンケート確認画面</title>
<style type="text/css">
body{
color:#666;
font-size:90%;
line-height:120%;
font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif;
font-size:14px;
background-image:url(images/back.png);
background-repeat:repeat;
text-align:center;
}
table {
margin: 0 auto;
padding:0 auto;
width:640px;
    border: #D4D4D4 solid;
    border-collapse: collapse;
    border-spacing: 0;

}

table tr {
height:50px;
    padding: 10px;
    border: #D4D4D4 solid;
    border-width: 0 0 1px 1px;
background:rgba(255,255,255,1.00);
    font-weight: bold;
    line-height: 120%;
text-align:left;
}
table td {
width:100px;
height:50px;
    padding: 10px;
    border: #D4D4D4 solid;
    border-width: 0 0 1px 1px;
text-align:left;
}

table tr {
width:20%;
}
p.error_messe{
margin:5px 0;
color:red;
}
</style>
</head>
<body>
  </div>
<!-- ▲ Headerやその他コンテンツなど ※編集可 ▲-->

<!-- ▼************ 送信内容表示部 ※編集は自己責任で ************ ▼-->
<?php if($empty_flag == 1){ ?>
<div align="center"><h3>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h3><?php echo $errm; ?><br><br><input type="button" value=" 前画面に戻る " onClick="history.back()"></div>
<?php
}else{
?>
<div align="center"><a href="http://www.ever-effort.com/" target="_blank"><img src="images/logo.png" width="167" height="76" alt=""/></a>
 以下の内容で間違いがなければ、「送信する」ボタンを押してください。</div><br><br>
<form action="<?php echo $file_name; ?>" method="POST">
<table id="table-01">
<?php
foreach($_POST as $key=>$val) {
  $out = '';
  if(is_array($val)){
  foreach($val as $item){ 
  $out .= $item . ','; 
  }
  if(substr($out,strlen($out) - 1,1) == ',') { 
  $out = substr($out, 0 ,strlen($out) - 1); 
  }
 }
  else { $out = $val; }//チェックボックス(配列)追記ここまで
  if(get_magic_quotes_gpc()) { $out = stripslashes($out); }
  $out = h($out);
  $out=nl2br($out);//※追記 改行コードを<br>タグに変換
  $key = h($key);
  print("<tr  ><td class=\"l_Cel\">".$key."</td><td>".$out);
  $out=str_replace("<br />","",$out);//※追記 メール送信時には<br>タグを削除
?>
<input type="hidden" name="<?php echo $key; ?>" value="<?php echo $out; ?>">
<?php
  print("</td></tr>\n");
}
?>
</table><br>
<div align="center"><input type="hidden" name="mail_set" value="confirm_submit">
<input type="hidden" name="httpReferer" value="<?php echo $_SERVER['HTTP_REFERER'] ;?>">
<input type="submit" value=" 送信する ">
<input type="button" value="前画面に戻る" onClick="history.back()">
</div>
</form>
<?php } ?>
<!-- ▲ *********** 送信内容確認部 ※編集は自己責任で ************ ▲-->

<!-- ▼ Footerその他コンテンツなど ※編集可 ▼-->
</body>
</html>

すみませんが、教えていただけますと幸いです。


ツリー一覧

┗A01shimixーーHTMLーー <p class="midashi2"><span>1:○○<

回答一覧

並び替え:

A01
answerershimix [11月1日 17:38]

ーーHTMLーー
<p class="midashi2"><span>1:○○</span><br>
<input type="checkbox" name="○○" value="1-9">1-9 <input type="checkbox" name="○○" value="10-19">10-19 <input type="checkbox" name="cat○○" value="20-30">20-30</textarea><br>

ーーーー

このとおりのHTMLなんでしょうか?name属性値が○○のものとcat○○のものが混在しているようですが・・・

#というか、いきなり</textarea>があるのが謎です(汗



checkboxのname属性値が同じであれば当然(選択した)最後のもので上書きされます。name属性値を変えるか配列にするかの二択です。

  1. <p class="midashi2">
  2. <span>1:○○</span><br>
  3. <input type="checkbox" name="○○1" value="1-9">1-9 
  4. <input type="checkbox" name="○○2" value="10-19">10-19 
  5. <input type="checkbox" name="○○3" value="20-30">20-30
  6. </p>
あるいは
  1. <p class="midashi2">
  2. <span>1:○○</span><br>
  3. <input type="checkbox" name="○○[]" value="1-9">1-9 
  4. <input type="checkbox" name="○○[]" value="10-19">10-19 
  5. <input type="checkbox" name="○○[]" value="20-30">20-30
  6. </p>

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)