質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

5949閲覧

確認ページでのphpの書き方

hosayuki

総合スコア16

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/09/28 11:54

以下はフォームと確認ページからなり、フォームの「原文」から単語数を獲得して確認ページに書き加えるというプログラムです。問題は確認ページでどのように「単語数の獲得」のプログラムを加えるかということです。
単語数獲得のPHP:str_word_count($str);

フォームは以下です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <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" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <style type="text/css"> #formWrap { width:700px; margin:0 auto; color:#555; line-height:120%; font-size:90%; } table.formTable{ width:100%; margin:0 auto; border-collapse:collapse; } table.formTable td,table.formTable th{ border:1px solid #ccc; padding:10px; } table.formTable th{ width:30%; font-weight:normal; background:#efefef; text-align:left; } </style> </head> <body> <div id="formWrap"> <h3>お問い合わせ</h3> <form name="namae" method="post" action="A.php"> <table class="formTable"> <tr> <th>Email</th> <td><input size="30" type="text" name="Email" requied/></td> <td><input size="30" type="hidden" name="単語数" /></td> </tr> <tr> <th>原文</th> <td><textarea name="原文" rows="4" cols="40"></textarea></td></tr>
</table> <p align="center"> <input type="submit" value="  確認  " /> <input type="reset" value="リセット" /> </p>
</form> </div> </body> </html>

以下は確認ページです(長くてすみません):

<?php header("Content-Type:text/html;charset=utf-8"); ?> <?php //error_reporting(E_ALL | E_STRICT); $to = ""; $Email = "Email"; $useToken = 1; $userMail = 1; $subject = "お問い合わせ"; $confirmDsp = 1; $jumpPage = 0; $thanksPage = ""; $requireCheck = 1; $remail = 0; $refrom_name = ""; $re_subject = ""; $dsp_name = ''; $mailFooterDsp = 0; $mail_check = 1; $hankaku = 0; $encode = "UTF-8";//このファイルの文字コード定義(変更不可) $sendmail = 0; $empty_flag = 0; $post_mail = ''; $errm =''; $header =''; if(empty($errm)){ foreach($_POST as $key=>$val) { if($val == "confirm_submit") $sendmail = 1; if($key == $Email) $post_mail = h($val); if($key == $Email && $mail_check == 1 && !empty($val)){ if(!checkMail($val)){ $errm .= "<p class=\"error_messe\">【".$key."】はメールアドレスの形式が正しくありません。</p>\n"; $empty_flag = 1; } } } } if(($confirmDsp == 0 || $sendmail == 1) && $empty_flag != 1){ //差出人に届くメールをセット if($remail == 1) { $userBody = mailToUser($_POST,$dsp_name,$remail_text,$mailFooterDsp,$mailSignature,$encode); $reheader = userHeader($refrom_name,$to,$encode); $re_subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($re_subject,"JIS",$encode))."?="; } $adminBody = mailToAdmin($_POST,$subject,$mailFooterDsp,$mailSignature,$encode,$confirmDsp); $header = adminHeader($userMail,$post_mail,$BccMail,$to); $subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,"JIS",$encode))."?="; mail($to,$subject,$adminBody,$header); if($remail == 1 && !empty($post_mail)) mail($post_mail,$re_subject,$userBody,$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" /> <title>確認画面</title> <style type="text/css"> #formWrap { width:700px; margin:0 auto; color:#555; line-height:90%; font-size:90%; } table.formTable{ width:90%; margin:0 auto; border-collapse:collapse; } table.formTable td,table.formTable th{ border:1px solid #ccc; padding:10px; } table.formTable th{ width:30%; font-weight:normal; background:#efefef; text-align:left; } p.error_messe{ margin:5px 0; color:red; } </style> </head> <body> <div id="formWrap"> <?php if($empty_flag == 1){ ?> <div align="center"> <h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4> <?php echo $errm; ?><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"> </div> <?php }else{ ?> <h3>確認画面</h3> <p align="center">以下の内容で間違いがなければ、「送信する」ボタンを押してください。</p> <form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="POST"> <table class="formTable"> <?php echo confirmOutput($_POST);//入力内容を表示?> </table> <p align="center"><input type="hidden" name="mail_set" value="confirm_submit"> <input type="hidden" name="httpReferer" value="<?php echo h($_SERVER['HTTP_REFERER']);?>"> <input type="submit" value=" 送信する "> <input type="button" value="前画面に戻る" onClick="history.back()"></p> </form> <?php } ?> </div><!-- /formWrap --> </body> </html> <?php } if(($jumpPage == 0 && $sendmail == 1) || ($jumpPage == 0 && ($confirmDsp == 0 && $sendmail == 0))) { ?> <!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" /> <title>完了画面</title> </head> <body> <div align="center"> <?php if($empty_flag == 1){ ?> <h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4> <div style="color:red"><?php echo $errm; ?></div> <br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"> </div> </body> </html> <?php }else{ ?> 送信ありがとうございました。<br /> 送信は正常に完了しました。<br /><br /> <a href="<?php echo $site_top ;?>">トップページへ戻る&raquo;</a> </div> <?php copyright(); ?> </body> </html> <?php } } else if(($jumpPage == 1 && $sendmail == 1) || $confirmDsp == 0) { if($empty_flag == 1){ ?> <div align="center"><h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4><div style="color:red"><?php echo $errm; ?></div><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"></div> <?php }else{ header("Location: ".$thanksPage); } } 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) { global $encode; return htmlspecialchars($string, ENT_QUOTES,$encode); } function sjisReplace($arr,$encode){ foreach($arr as $key => $val){ $key = str_replace('\','ー',$key); $resArray[$key] = $val; } return $resArray; } //送信メールにPOSTデータをセットする関数 function postToMail($arr){ global $hankaku,$hankaku_array; $resArray = ''; foreach($arr as $key => $val) { $out = ''; if(is_array($val)){ foreach($val as $key02 => $item){ //連結項目の処理 if(is_array($item)){ $out .= connect2val($item); }else{ $out .= $item . ', '; } } $out = rtrim($out,', '); }else{ $out = $val; }//チェックボックス(配列)追記ここまで if(get_magic_quotes_gpc()) { $out = stripslashes($out); } //全角→半角変換 if($hankaku == 1){ $out = zenkaku2hankaku($key,$out,$hankaku_array); } if($out != "confirm_submit" && $key != "httpReferer") { $resArray .= "【 ".h($key)." 】 ".h($out)."\n"; } } return $resArray; } //確認画面の入力内容出力用関数 function confirmOutput($arr){ global $hankaku,$hankaku_array; $html = ''; foreach($arr as $key => $val) { $out = ''; if(is_array($val)){
foreach($val as $key02 => $item){ //連結項目の処理 if(is_array($item)){ $out .= connect2val($item); }else{ $out .= $item . ', '; } } $out = rtrim($out,', '); }else{ $out = $val; }//チェックボックス(配列)追記ここまで if(get_magic_quotes_gpc()) { $out = stripslashes($out); } $out = nl2br(h($out));//※追記 改行コードを<br>タグに変換 $key = h($key); //全角→半角変換 if($hankaku == 1){ $out = zenkaku2hankaku($key,$out,$hankaku_array); } $html .= "<tr><th>".$key."</th><td>".$out; $html .= '<input type="hidden" name="'.$key.'" value="'.str_replace(array("<br />","<br>"),"",$out).'" />'; $html .= "</td></tr>\n"; } return $html;

}
//全角→半角変換
function zenkaku2hankaku($key,$out,$hankaku_array){
global $encode;
if(is_array($hankaku_array) && function_exists('mb_convert_kana')){
foreach($hankaku_array as $hankaku_array_val){
if($key == $hankaku_array_val){
$out = mb_convert_kana($out,'a',$encode);
}
}
}
return $out;
}
//配列連結の処理
function connect2val($arr){
$out = '';
foreach($arr as $key => $val){
if($key === 0 || $val == ''){//配列が未記入(0)、または内容が空のの場合には連結文字を付加しない(型まで調べる必要あり)
$key = '';
}elseif(strpos($key,"円") !== false && $val != '' && preg_match("/^[0-9]+$/",$val)){
$val = number_format($val);//金額の場合には3桁ごとにカンマを追加
}
$out .= $val . $key;
}
return $out;
}
//管理者宛送信メールヘッダ
function adminHeader($userMail,$post_mail,$BccMail,$to){
$header = '';
if($userMail == 1 && !empty($post_mail)) {
$header="From: $post_mail\n";
if($BccMail != '') {
$header.="Bcc: $BccMail\n";
}
$header.="Reply-To: ".$post_mail."\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();
return $header;
}
//管理者宛送信メールボディ
function mailToAdmin($arr,$subject,$mailFooterDsp,$mailSignature,$encode,$confirmDsp){
$adminBody="「".$subject."」からメールが届きました\n\n";
$adminBody .="===========================\n\n";
$adminBody.= postToMail($arr);//POSTデータを関数からセット
$adminBody.="\n===========================\n";
$adminBody.="送信された日時:".date( "Y/m/d (D) H:i:s", time() )."\n";
$adminBody.="送信者のIPアドレス:".@$_SERVER["REMOTE_ADDR"]."\n";
$adminBody.="送信者のホスト名:".getHostByAddr(getenv('REMOTE_ADDR'))."\n";
if($confirmDsp != 1){
$adminBody.="問い合わせのページURL:".@$_SERVER['HTTP_REFERER']."\n";
}else{
$adminBody.="問い合わせのページURL:".@$arr['httpReferer']."\n";
}
if($mailFooterDsp == 1) $adminBody.= $mailSignature;
return mb_convert_encoding($adminBody,"JIS",$encode);}
?>

php

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/09/28 11:57

なにがわからないのでしょうか?分かる部分はソースから削って、わからない部分を中心に質問してください
dice142

2018/09/28 12:00

コードはコードブロック(```)で囲んでください。
m.ts10806

2018/09/28 12:13

ただコードだけ提示されてもそれは質問にはなっていません。環境情報も必要ですし、他人が再現可能な情報を提示し、そのうえで現在何がどう問題なのか具体的に記載してください。
papinianus

2018/09/28 12:27

他の修整依頼に加えて、その関数では日本語の単語はカウントできませんよ
hosayuki

2018/09/28 12:42

日本語の単語ではなく英語の単語です
papinianus

2018/09/28 13:39

「入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。」というメッセージ、全角半角の処理、金額の項目名として"円"が出てくるなどからは入力される文字が英語であることは全く明らかではないと思います。あなたがこのコードを無から生んだとは思えないのですが、書いた人に聞いたらよいのではないでしょうか?
guest

回答1

0

必要な個所のみ書きます。
フォーム:

<table class="formTable"> <tr> <th>Email</th> <td><input size="30" type="text" name="Email" requied/></td> <td><input size="30" type="hidden" name="単語数" /></td> </tr> <tr> <th>原文</th> <td><textarea name="原文" rows="4" cols="40"></textarea></td></tr> </table> 確認ページ:以下を加える必要があると思いますがどのようにするのか分かりません。itemの意味と連結項目の目的が分かりません。

$str=$_POST("原文")
$count=str_word_count($str);
$count=$val[1]

<pre> <?php if(isset($POST['genbun']){ //確認画面の入力内容出力用関数 function confirmOutput($arr){ global $hankaku,$hankaku_array; $html = ''; ''' foreach($arr as $key => $val) { $out = ''; if(is_array($val)){ foreach($val as $key02 => $item){ //連結項目の処理 if(is_array($item)){ $out .= connect2val($item); }else{ $out .= $item . ', '; } } $out = rtrim($out,', '); }else{ $out = $val; }//チェックボックス(配列)追記ここまで if(get_magic_quotes_gpc()) { $out = stripslashes($out); } $out = nl2br(h($out));//※追記 改行コードを<br>タグに変換 $key = h($key); ''' ------

投稿2018/09/28 12:33

hosayuki

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/28 12:43

コードブロックはバッククオートですよ。
m.ts10806

2018/09/28 12:47

コード部分を選択してcodeボタンを押すのが確実です。 というか質問者さん本人ですか。 質問も回答も投稿者自身で編集できるので質問を編集して対応してください。 これは「回答」ではないですよね? 質問に過不足などがあったときのための追記修正依頼のコメント欄です。質問を編集して返すのが通常の使い方です
hosayuki

2018/09/28 13:07

このコラムでは初心者なので再度編集します。
papinianus

2018/09/28 13:42 編集

連結項目の処理は、コードが分かったり分からなかったりする以前に、仕様であり要件です。formから送信されたものをカンマ区切りで連結して表示するという要件にかかる部分です。一体全体どこからこのコードをパクってきたんですか?
papinianus

2018/09/28 13:45

confirmOutputの引数$arrは$_POSTが渡されるので、$keyはform上のname、$valは値。$valが配列のときに項目をカンマで連結するのが、連結項目の処理、の意味です。 そのようになるのは後のコメントにあるようにチェックボックスのときだと想定できます。つまり、チェックボックスの複数がチェックされていたときにそれらの値をカンマで連結して表示させる。 このとき、$itemはチェックボックス一つ一つを表現します。
papinianus

2018/09/28 13:59

引用元はメールフォームです。単語数の獲得という質問意図には全く合わないように思えます。なぜ数あるサイトからここを利用しようと思ったのか理解に苦しみます。 訳も分からない他人のコードを苦しんで理解する以前に、PHPの文法と自分がやりたいことを具体化する作業をなさったほうがよいと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問