確認ページでのphpの書き方
受付中
回答 1
投稿
- 評価
- クリップ 0
- VIEW 2,224
以下はフォームと確認ページからなり、フォームの「原文」から単語数を獲得して確認ページに書き加えるというプログラムです。問題は確認ページでどのように「単語数の獲得」のプログラムを加えるかということです。
単語数獲得の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 ;?>">トップページへ戻る»</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
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
-2
必要な個所のみ書きます。
フォーム:
<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);
'''
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.32%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
yambejp
2018/09/28 20:57
なにがわからないのでしょうか?分かる部分はソースから削って、わからない部分を中心に質問してください
dice142
2018/09/28 21:00
コードはコードブロック(```)で囲んでください。
m.ts10806
2018/09/28 21:13
ただコードだけ提示されてもそれは質問にはなっていません。環境情報も必要ですし、他人が再現可能な情報を提示し、そのうえで現在何がどう問題なのか具体的に記載してください。
papinianus
2018/09/28 21:27
他の修整依頼に加えて、その関数では日本語の単語はカウントできませんよ
hosayuki
2018/09/28 21:42
日本語の単語ではなく英語の単語です
papinianus
2018/09/28 22:39
「入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。」というメッセージ、全角半角の処理、金額の項目名として"円"が出てくるなどからは入力される文字が英語であることは全く明らかではないと思います。あなたがこのコードを無から生んだとは思えないのですが、書いた人に聞いたらよいのではないでしょうか?