wordpressの中で、PHPmailerで組んでいるフォームがあるのですが、基本的に問題なく送信されるのですが、ある端末(galaxy 10s)で送信したところ、送信完了ページで以下のエラーがでてしまうという報告を受けまして。
Warning: implode(): Invalid arguments passed in /〇〇/〇〇/〇〇/mailto.php
それ以外での端末ではちゃんとメールは送信されていて、エラーは今把握できるのでこの1件だけです。
上記エラーは3箇所で、mailto.phpの29行目、31行目、87行目
どれもimplode()で配列の中身を展開したい場所です。
フォームから送信すると、確認画面→送信完了画面と行きますが、エラーは送信完了画面で出ます。
以下、諸々phpコードです。
▼mailto.php
長いので後半は削っていますが、29行目、31行目、87行目のimplode()を注目して頂けると。
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; session_start(); require_once( dirname( __FILE__ ) . '/wp-load.php' ); get_header(); ?> <main class="Contact"> <div class="Top_main"> <img src="<?php echo esc_url(get_template_directory_uri()); ?>/img/Top-main.png" alt="Take out <?php echo $_area['kanji']; ?>"> </div> <div class="Top_catch"> <p class="Top_catch_phrase"><strong>ご注文完了!</strong></p> <p class="Top_catch_sub"><span>以上で注文は完了致しました。<br>後ほど確認のメールを送信致します。</span></p> </div> <div class="Search_keyword"> <h2 class="Search_title">ご質問・ご意見</h2> <p class="txt">当サイトは公式<span style="color:#1dcd00;">LINE</span>アカウントより、お客様のご質問・ご意見、またはご要望等を受け付けております。<br> また再度ご利用いただいた際、ご注文の完了通知を<span style="color:#1dcd00;">LINE</span>の方で行いたいと思います。ぜひお友達登録をよろしくお願い致します。<br> <a href="https://lin.ee/2tcP67SLL"><img src="https://scdn.line-apps.com/n/line_add_friends/btn/ja.png" alt="友だち追加" height="36" border="0"></a> </p> </div> <div class="Contact complete"> <div class="Contact_phpReport"> <?php $subject = "ご注文が入りました"; $sessions = $_SESSION['menu']; $bodyhead = implode("\n",$sessions); $body = '[注文店舗名]'."\n".$_SESSION['shopname']."\n\n" .'[注文内容]'."\n".implode("\n",$sessions)."\n\n" .'[お名前]'."\n".$_SESSION['name']."\n\n" .'[メールアドレス]'."\n".$_SESSION['mail']."\n\n" .'[電話番号]'."\n".$_SESSION['tel']."\n\n" .'[配達先住所]'."\n".$_SESSION['zip']." ".$_SESSION['address']." ".$_SESSION['address2']."\n\n" .'[希望日時]'."\n".$_SESSION['date']." ".$_SESSION['timehour']."時 ".$_SESSION['timeminits']."分頃\n\n" .'[備考]'."\n".$_SESSION['text']."\n\n\n\n" .'このメールはホームページのお問い合わせフォームから送信されました。'; $fromname = $_SESSION['name']; $userAddress = $_SESSION['mail']; $fromaddress = '〇〇〇〇'; $smtp_user = "〇〇〇〇"; $smtp_password = "RKbIznuX1"; require_once("phpmailer/vendor/autoload.php"); require 'phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php'; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 0; // debugging: 1 = errors and messages, 2 = messages only $mail->SMTPAuth = true; $mail->CharSet = 'utf-8'; $mail->SMTPSecure = 'ssl'; $mail->Host = "sv10113.xserver.jp"; $mail->Port = 465; $mail->IsHTML(false); $mail->Username = $smtp_user; $mail->Password = $smtp_password; $mail->SetFrom($smtp_user); $mail->From = $fromaddress; $mail->Subject = $subject; $mail->Body = $body; $mail->addReplyTo($userAddress, $fromname); $address = array('〇〇〇〇','〇〇〇〇'); foreach($address as $value){ $mail->addBCC($value); } $main_address = $_SESSION['shopmail']; $to = $main_address; $mail->addAddress($to); if( !$mail -> Send() ){ $message = "Message was not sent<br/ >"; $message .= "Mailer Error: " . $mailer->ErrorInfo; } else { $message = "お問い合わせありがとうございました。以下の内容で送信されました。"; $mail->ClearAddresses(); //送信先をリセット $mail->addAddress($fromaddress); $sub2 = 'ご注文ありがとうございました。'; $body2 ='[注文店舗名]'."\n".$_SESSION['shopname']."\n\n" .'[注文内容]'."\n".implode("\n",$sessions)."\n\n" .'[お名前]'."\n".$_SESSION['name']."\n\n" .'[メールアドレス]'."\n".$_SESSION['mail']."\n\n" .'[電話番号]'."\n".$_SESSION['tel']."\n\n" .'[受取方法]'."\n".$_SESSION['receive']."\n\n" .'[配達先住所]'."\n".$_SESSION['zip']." ".$_SESSION['address']." ".$_SESSION['address2']."\n\n" .'[希望日時]'."\n".$_SESSION['date']." ".$_SESSION['timehour']."時 ".$_SESSION['timeminits']."分頃\n\n" .'[備考]'."\n".$_SESSION['text']."\n\n\n\n" .'このメールはEat Home Kagaのお問い合わせフォームから送信されました。'; $mail->Subject = $sub2; $mail->Body = $body2; $mail->send(); } ?> </div> </div> </main> <?php get_footer(); ?>
▼フォーム
<?php $MenuGroup = get_field('group'); $i = 0; foreach($MenuGroup as $child): $manu_name = $child['group-menu-name']; $manu_price = $child['group-menu-price']; if($manu_name && $manu_price): $i++;?> <div class="Contact_menu"> <label for="menunum<?php echo $i; ?>"><?php echo $manu_name. ' ¥'.$manu_price; ?></label> <input type="hidden" name="menu<?php echo $i; ?>" value="<?php echo $manu_name. '¥'.$manu_price; ?>"> <input type="hidden" name="price<?php echo $i; ?>" value="<?php echo $manu_price; ?>"> <select class="Contact_menu_btn btn_num<?php echo $i; ?>" name="menunum<?php echo $i; ?>" value="" required> <?php for($inum = 0;$inum<31;$inum++): ?> <option value="<?php echo $inum; ?>"><?php echo $inum; ?></option> <?php endfor; ?> </select> <!-- <input type="number" class="Contact_menu_btn btn_num<?php echo $i; ?>" name="menunum<?php echo $i; ?>" value="0" min="0" max="100" onChange="keisan()"> --> <span class="Contact_menu_unit">個</span> </div> <?php endif; endforeach; ?><br>
▼確認画面
ここで、$_SESSION['menu']の配列を作っています。
このページで$_SESSION['menu']をforeach文で展開している箇所は正常に動いています。
送信を押した後の「送信完了ページ」ではinplode()を使っていて、そこでエラーが出ます。
<?php require_once( dirname( __FILE__ ) . '/wp-load.php' ); session_start(); //ここで$_SESSION['menu']の配列を作っています $_SESSION['menu'] = array(); for($i = 1;$i < 11;$i++){ if($_POST["menunum${i}"] == 0){ $_SESSION["menunum${i}"] = 0; }else{ $menuname = $_POST["menu${i}"]; $menunumber = $_POST["menunum${i}"]; $meta = $menuname.' *'.$menunumber; $_SESSION['menu']["menu${i}"] = $meta; $_SESSION["menunum${i}"] = $menunumber; } } //ここまで $_SESSION['shopname'] = $_POST['shopname']; $_SESSION['dir'] = $_POST['dir']; $_SESSION['postid'] = $_POST['postid']; $_SESSION['shopmail'] = $_POST['shopmail']; $_SESSION['name'] = $_POST['name']; $_SESSION['tel'] = $_POST['tel']; $_SESSION['mail'] = $_POST['mail']; $_SESSION['receive'] = $_POST['receive']; $_SESSION['zip'] = $_POST['zip']; $_SESSION['address'] = $_POST['address']; $_SESSION['address2'] = $_POST['address2']; $_SESSION['date'] = $_POST['date']; $_SESSION['timehour'] = $_POST['timehour']; $_SESSION['timeminits'] = $_POST['timeminits']; $_SESSION['text'] = $_POST['text']; get_header(); ?> <main class="Contact"> <h3 class="Single_order_title">ご注文内容の確認</h3> <section class="Contact_comfirm"> <p class="Contact_comfirm_txt" id="txt_imp">以下の内容をご確認いただき、注文のお間違えがなければ「注文確定」ボタンを押してください。<br>その後、管理センターより確定メールが送信されます。</p> <div class="Contact_comfirm_shipping top"> <p><strong>【配達(デリバリー)について】</strong><br> <対応地域と時間帯><br> 加賀市内限定<br> ・ランチタイム 11:30〜14:00 ※当日10:00迄に予約<br> ・ディナータイム 16:00〜22:00<br> <br> <条件><br> 配達は注文合計金額が2,000円以上のときに可能となります。<br> (2,000円未満の場合の配達は2,000円に満たない差額分を支払えば可能)</p> </div> <table class="Contact_comfirm_table"> <tr class="Contact_comfirm_table_item"> <th>注文店舗名:</th> <td><?php echo $_SESSION['shopname']; ?></td> </tr> <tr class="Contact_comfirm_table_item"> <th>注文内容:</th> <td> <div class=""> <!-- ここのforeach()だと正常に吐き出されます。次の送信完了画面でinplodeを使っていて、そこでエラーが出ます --> <?php $sessions = $_SESSION['menu']; foreach($sessions as $sessionmenu): ?> <span><?php echo $sessionmenu; ?></span><br> <?php endforeach; ?> </div> </td> </tr> </table> <form action="./edit.php" method="post"> <input class="Contact_comfirm_submit back" type="submit" value="内容を修正する"> </form> <form action="./mailto.php" method="post"> <input class="Contact_comfirm_submit" type="submit" value="注文確定"> </form> </section> </main> <?php get_footer(); ?>
以上になります。
原因と対処方法が分かる方いましたら、どうかご教授いただけると嬉しいです。
できればimplode()を使った方法な上で、対処方法を学びたいという気持ちです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/03 08:30
退会済みユーザー
2020/06/03 08:39
2020/06/03 12:41
2020/06/04 00:44