PHP初心者のためのメール送信フォーム作成

このQ&Aのポイント
  • mb_language関数でエラーが発生し、不明な関数として扱われる
  • mb_language関数は文字コードの設定に使用される関数で、PHPの拡張モジュールによって提供される
  • エラーが発生する原因は、mbstringモジュールがインストールされていないか、正しく設定されていないことが考えられる
回答を見る
  • ベストアンサー

mb_language("Japanese");でエラーが出ます

PHP初心者です。 少し訂正があるため、それを書き直しました。 回答を頂く方には大変面倒をおかけする事になり、誠に申し訳ありませんが、2つのファイルのソースコードをまず見てもらえますか。 test.php <?php session_start(); ?> <html> <head> <title>test</title> </head> <body> <h2>メールの送信</h2> <?php if ($_SESSION["address"]=="NG") { unset($_SESSION["address"]); print("E-Mailは必須入力です。"."<br>"); } if ($_SESSION["subject"]=="NG") { unset($_SESSION["subject"]); print("タイトルは必須入力です。"."<br>"); } if ($_SESSION["message"]=="NG") { unset($_SESSION["message"]); print("コメントは必須に入力です。"."<br>"); } ?> <form action="./test1.php" method="post"> E-Mail:<br><input type="text" name="address" <?php print("value='".$_SESSION["address"]."'")?> size="50"><br> タイトル:<br><input type="text" name="subject" <?php print("value='".$_SESSION["subject"]."'")?> size="50"><br> コメント:<br><textarea name="message" rows="5" cols="35"> <?php print($_SESSION["message"])?></textarea><br><br> <input type="submit" value="送信"> </form> </body> </html> このページを表示させてどこかを空欄のままにしますが、エラー表示は出ません。 ↑の部分はソースコード抜けや誤字で正常に表示できるようになりました。 では、全ての欄に入力してtest1.phpに移ります。 test1.php <?php session_start(); if(strlen($_POST["address"])==0){ $_SESSION["address"] = "NG"; }else{ $_SESSION["address"] = $_POST["address"]; } if(strlen($_POST["subject"])==0){ $_SESSION["subject"] = "NG"; }else{ $_SESSION["subject"] = $_POST["subject"]; } if(strlen($_POST["message"])==0){ $_SESSION["message"] = "NG"; }else{ $_SESSION["message"] = $_POST["message"]; } if($_SESSION["address"]=="NG" or $_SESSION["subject"]=="NG" or $_SESSION["message"]=="NG"){ header("Location: test.php?".SID); exit; } ?> <html> <head><title>test1.php</title></head> <body> <?php $address=$_POST["address"]; $subject=$_POST["subject"]; $message=$_POST["message"]; $header="From:xxx@xxxxx.xxx\nContent-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address,$subject ,mb_convert_encoding($message,"JIS","SJIS"),$header)){ print("送信完了!"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> 問題はここです。 移動前にmb_language("Japanese");の部分でエラー表示されます。 この構文がどうしてもエラーになります。 エラー文をここで書きます。 Fatal error: Call to undefined function mb_language() in C:\Apache2\htdocs\sample18_1.php on line 42 それで、構文をググって見ましたが、こういうサイトを見つけました。 http://lib.stwing.jp/archives/2005/12/phpmb_language.html​ ここにも書かれているので構文自体にエラーが出るのはおかしいはずなんですけど。 どこに問題があるのでしょうか。 このソースコードが何故上手く通らないのか教えて頂けると大変助かります。 どうか宜しくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

よく見たら C:\Apache2 と書いてありますね Windowsでしたらphp.iniで ;extension=php_mbstring.dll と書いてあるところの先頭のセミコロンを削除してApacheを再起動したら使えるようになります。

persona
質問者

お礼

再度アドバイスありがとうございます。 php504さんの言われるとおりにやったら上手くいきました。 でも、どうすればphp.iniの;extension=php_mbstring.dllって分かるのですかね。 あまりに凄くてただただ驚くばかりです。 ただ、今度は別のエラーが出ました。 補足欄に書きますので、もし余裕があればそれも解決してくれませんか。 厚かましいとは承知でお願いします。

persona
質問者

補足

今回のエラーはメールアドレスにあるようです。 エラーコードを書きます。 Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 550 Can not speak with you in C:\Apache2\htdocs\tes1.php on line 44 確かにここではxxx@xxxxx.xxxなので送信されません。 なので、自分のOutlook Expressのメールアドレスを書き込みました。 でも上記のエラーが出ました。 勿論、php.iniのSMTPの部分もlocalhostからそのメールアドレスに変更しています。 何がダメなのでしょうか。 後、test1.phpは正常に『エラー:送信に失敗しました』の表示はされていました。 余裕があれば、どうぞ宜しくお願い致します。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

php.iniのSMTPにはメールアドレスではなくインターネット契約しているプロバイダのSMTPサーバを書きます ただSMTP認証を行っているプロバイダでは使えません

persona
質問者

お礼

わざわざ答えて頂き、感謝します。 >php.iniのSMTPにはメールアドレスではなくインターネット契約しているプロバイダのSMTPサーバを書きます そうですね。自分もそういう設定をしてました。 でも、それに気付いたときには残念ながらphp504さんと行き違いになってしまいました。 ダメだったという事は、私のプロバイダであるBiglobeはSMTP認証を行っているプロバイダという事になるのですかね。 すいません、また質問になってしまいました。 php504さんのおかげで、最初のエラーはなくなりました。 それだけでも十分な回答を頂いたと言うべきですね。 3度にわたり、適切な回答を頂き、どうもありがとうございました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

PHPは設定条件により使える関数と使えない関数があります お使いの環境では multibyte 関連の関数が使えない設定になっているようです レンタルサーバであれば管理者に連絡を 自分のパソコンにインストールしてあるならOS等の詳細を補足してください

関連するQ&A

  • 上手くエラー表示がされないのと計算ができない

    PHP初心者です。 開発環境 apache2.0.59 PHP5.2.9 Eclipse3.3 以下のソースコードを見て下さい。 <?php session_start(); ?> <html> <head> <title>test3_2.php</title> </head> <body> <?php //kadai3_3.phpにて、氏名、商品それぞれに未入力の場合はセッション変数に「NG」が設定されます if ($_SESSION["name"]=="NG") { unset($_SESSION["name"]); print("氏名を入力して下さい。"."<br>"); } if ($_SESSION["shohin"]=="NG") { unset($_SESSION["shohin"]); print("商品の何れかをチェックして下さい。"."<br>"); } ?> <form action="./test3_3.php" method=post> 氏名:<input type="text" name="name" <?php print("value='".$_SESSION["name"]."'")?>> <br><br> 商品一覧<br> <!-- 全てのcheckboxの名称をshohin[商品名]として連想配列化する事により test3_3.phpではcheckboxが扱いやすくなります --> <input type="checkbox" name="shohin[A]" <?php print($_SESSION["shohin"]["A"]=="on" ? "checked":"") ?> >A商品  \\1,000<br> <input type="checkbox" name="shohin[B]" <?php print($_SESSION["shohin"]["B"]=="on" ? "checked":"") ?> >B商品 \\2,000<br> <input type="checkbox" name="shohin[C]" <?php print($_SESSION["shohin"]["C"]=="on" ? "checked":"") ?> >C商品 \\3,000<br> <input type="checkbox" name="shohin[D]" <?php print($_SESSION["shohin"]["D"]=="on" ? "checked":"")?> >D商品 \\4,000<br> <input type="checkbox" name="shohin[E]" <?php print($_SESSION["shohin"]["E"]=="on" ? "checked":"")?> >E商品 \\5,000<br><br> <input type="submit" value="送信"> </form> </body> </html> で次のtest3_3.phpのソースコードです。 <?php session_start(); /* * 氏名にデータが入っていない場合はセッション変数を「NG」を入っていた場合はセッション変数に氏名をセットする */ if (strlen($_POST["name"]==0)) { $_SESSION["name"] = "NG"; }else{ $_SESSION["name"] = $_POST["name"]; } if (isset($_POST["shohin"])) { $_SESSION["shohin"]=$_POST["shohin"]; }else{ $_SESSION["shohin"]="NG"; } /* * 氏名か商品の何れかが未入力(未チェック)の場合はtest3_2.phpに遷移します。 */ if ($_SESSION["name"]=="NG" or $_SESSION["shohin"]=="NG") { header("Location: test3_2.php?".SID); exit; } ?> <html> <head> <title>test3_3.php</title> </head> <body> <?php $fp = fopen("C:\Apache2\htdocs\test3_1.txt", "r"); while (!feof($fp)) { $buffer = fgets($fp); $ans = explode(",", $buffer); $shohin[$ans[0]] = $ans[1]; } fclose($fp); $sum = 0; while(list($key, $val)=each($shohin)) { if ($_POST[$key]=="on") { print($key."商品:\\".number_format($val)."<br>"); $sum += $val; $shohizei = $sum * 0.05; $goukei = $sum + $shohizei; } } print("---------------------------<br>"); print("合計金額:\\".number_format($sum)."<br>"); print("消費税  :\\".number_format($shohizei)."<br>"); print("税込金額:\\".number_format($goukei)); ?> </body> </html> 分からないのは氏名欄に何も書かない場合もしくは商品を1つも選択しない場合、それぞれエラー表示されるのですが、何故か氏名欄にはMGと言う値が入力されてリダイレクトされます。 なので、まずはその原因を探しているのですが、いくら見ても分かりません。 なので、氏名欄が空白のときにエラー表示されるのかどうかも分かりません。 もう1つは商品購入の際の計算式が表示されない事です。 その前に連想配列$_SESSION["shohin"]["A"]についても疑問点があります。 これは2次元連想配列と解釈するのでしょうか。 ちなみにtest3_1.txtには以下のような文章が書かれています。 A,1000 B,2000 C,3000 D,4000 E,5000 何か延々とソースコードを書き連ねただけみたいに見えますね。 読み辛いようでしたら、本当に申し訳ありません。 以上の疑問について回答を頂きたいと思い書き込みました。 どうぞ宜しくお願い致します。

    • 締切済み
    • PHP
  • mb_send_mail()関数のタイトルで特定の文字が入ると送信できません。

    環境:WinXP+Apache2+PHP5 mb_send_mail()でタイトルに ”時間は何時でもokです。” を入力すると、送信に失敗します。 コードは以下の通りです。よろしくお願いします。 <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address,$subject,mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました"); }else{ print("エラー:送信に失敗しました"); } ?> ($subject="時間は何時でもokです。"にするとエラーになります。)

    • 締切済み
    • PHP
  • メール送信

    現在独学でPHPの勉強をしており、行き詰まってしまいここで質問をさせて頂きました。 行き詰まった内容ですがphpでメール送信のスクリプトを書いたのですが エラーが出てしまい送れません。 こちらが私が書いたスクリプトになります。 <html> <head><title>mail.php</title></head> <body> <?php $address = $_POST["address"]; $subject = $_POST["subject"]; $message = $_POST["message"]; $header = "Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message, "JIS", "EUC-JP"), $header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> エラーの内容ですが、 Fatal error: Call to undefined function mb_language() in C:~となっております。mb_languageが使えないとの表示が出てくるのですが、 色々な本などを調べてもこれを使ってる所もありなにが問題なのか分かりません。 php.iniでの設定(mbstring.internal_encoding = EUC-JP、extension=php_mbstring.dll)の ; などは外してみたりしてるのですが どうにも分かりません。 どなたかお分かりになるかたがいましたら是非教えて頂けないでしょうか。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <link rel="stylesheet" href="style.css" type="text/css"> <BASE target="_top"> </head> <body> <div align=center> <? /*送信ボタンが押されたとき */ if ($_POST{action} == "sendmail") { $ng = 0; /* 入力のチェック */ if (!$_POST{name}) { print("<BR>氏名が入力されていません。<BR>\n"); $ng++; } if (!$_POST{mail}) { print("<BR>メールアドレスが入力されていません。<BR>\n"); $ng++; } if (!$_POST{comment}) { print("<BR>お問い合わせ内容が入力されていません。<BR>\n"); $ng++; } if ($ng) { print ("<BR>お問い合わせに失敗しました。<BR>\n"); print ('<input type="button" value="前の画面に戻る" onClick="JavaScript:history.back(-1);">'); print ("</body></html>\n"); exit; } $currentdate = date("Y/m/d H:i"); $ordernum = date("Ymd"); $message = "ホームページからお問い合わせがありました。\n\n"; $message .= "■ 送信者は以下の通りです。\n"; $message .= "--------------------------------------------------\n"; $message .= "送信日時 :".$currentdate."\n"; $message .= "氏名:".$_POST{name}."\n"; $message .= "メールアドレス:".$_POST{mail}."\n"; $message .= "お問い合わせ内容:".$_POST{comment}."\n"; $message .= "--------------------------------------------------\n\n"; mb_language("ja"); $from = mb_convert_kana($_POST{mail},"KVrna"); $to = "メールアドレス"; $subject = "ホームページからお問い合わせがありました"; $subject = '=?ISO-2022-JP?B?' . base64_encode(mb_convert_encoding($subject, 'ISO-2022-JP', 'AUTO')) . '?='; $message = stripslashes($message); mail($to,$subject,$message,"From:$from"); print ("<BR><BR>\n"); print ("御要望を承りました。<BR>近日中にご返信させていただきます。<BR><BR>\n"); print ('<A HREF="ホームページアドレス"> >> トップページに戻る</A> <BR>'); print ("</body></html>\n"); exit; } ?> </div> </body> </html> <ここまで> phpの問合わせフォームです。内容を書き込むテーブルタグを画像で添付していますが、これを「UTF-8」に変換したいのですが、今ひとつやり方がわかりません。どうしたら、これらを変換できますか?なるべく具体的に御指導お願いしたいです。

  • PHPでメールを送信するには

    PHP超初心者です。 参考本をもとにPHPでメールを送信するということにチャレンジしているのですが、次のような文章が出ます。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11 エラー:送信に失敗しました 参考本に書いてあるとおり、 php.iniのSMTP=localhost を自分が使っているoooooo@ocn.ne.jpに書き換え、sendmailには自分の別アドレスを記述したのですが。 11行目のエラーも何を指しているのかわかりません。 ご回答よろしくお願いします。 【mail.php】 <html> <head><title>mail.php</title></head> <body> <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type:text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> 【mail_form.html】 <html> <head><title>メールの送信</title></head> <body> <h2>メールの送信</h2> <form action="mail.php" method="post"> 宛先:<input type="text" name="address"><br /> 件名:<input type="text" name="subject"><br /> 本文:<br /><textarea name="message" rows="5" cols="30"></textarea><br /> <input type="submit" value="送信"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • $_SESSION['submit']の自動生成

    <form>タグの中にあるsubmitボタンをクリックすると、post先の.phpに、$_SESSION['submit']変数が自動生成されると聞いたので、テストプログラムを作ってみましたが、自動生成されません。 具体的には、test02.phpのprint_r($_SESSION);において、何も表示されません。 つまり、$_SESSION['submit']が作られていません。 詳しい方、ご教授をおねがいします。 test01.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test01</title> </head> <body> <?php print <<< EOH1 <form action="test02.php" method="post" name="form1"> <table> <tr> <td>会社名</td> <td> <input type="text" name="company" size="30" value="東京電気株式会社"> </td> </tr> </table> <br> <input type="submit" value="登録" name="submit">&nbsp;<input type="reset"> </form> EOH1; ?> </body> </html> test02.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test02</title> </head> <body> <?php print_r($_SESSION); if(isset($_SESSION['submit'])) { dispRequest(); } if(isset($_SESSION['submit'])) { unset($_SESSION['submit']); session_unset(); session_write_close(); } function dispRequest() { if (isset($_REQUEST['company'])) { echo "会社名:", $_REQUEST['company'], "<br>\n"; } else { echo "companyが未定義<br>\n"; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • なぜエラーが出るのか分からない(PHP)

    ●質問の主旨 check.phpファイルの最終行(</html>のところ)で Parse error: syntax error, unexpected end of file としてエラーが表示されます。 なぜエラー表示されるのでしょうか?ご存知の方ご教示願います。 (eclipseでもエラー表示されているのは分かりますが、 何がエラーなのか分かりません) ●状況 1.index.htmlのフォームに入力し、送信ボタンを押す (添付画像) 2.check.phpに飛ばす 3.飛ばすとエラーが表示される ●環境 windows8 xammp1.8.1 ●コード (index.html) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPの基礎</title> </head> <body> <form method="post" action="check.php"> ニックネームを入力してください<br/> <input name="nickname" type="text" style="width:100px"><br/> メールアドレスを入力してください<br/> <input name="email" type="text" style="width:200px"><br/> ご意見を入力してください<br/> <input name="goiken" type="text" style="width:300px"><br/> <br/> <input type="submit" value="送信"> </form> </body> </html> (check.php) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPの基礎</title> </head> <body> <?php $nickname = $_POST['nickname']; $email = $_POST['email']; $goiken = $_POST['goiken']; if($nickname =='') { print'ニックネームが入力されてません'; } else { print'ようこそ!'; print $nickname; print'様'; print'<br/>'; } if($email =='') { print'emailが入力されてません'; } else { print'ようこそ!'; print $email; print'<br/>'; if($goiken =='') { print'ご意見が入力されてません'; } else { print'ご意見'; print $goiken; print'』<br/>'; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHP初心者です。何処がエラーなのかさっぱり解りません。

    超初心者です。 PHPの勉強を始めたばかりで、いきなりつまずいています。 下記の表示になりエラーになっているのですが、何処がエラーなのか意味が解りません。 Parse error: syntax error, unexpected $end in C:\xampp\htdocs\phplesson\03\login.php on line 31 どなたか教えてください。 よろしくお願いします。 ----------------- <?php session_start(); $error_message = ""; //ログインボタンが押されたかを判定 if (isset($_POST["login"])) { if ($_POST["member_name"] == "php" && $_POST["password"] == "password") { //ログインが成功した証拠をセッションに保持 $_SESSION["login_name"] = $_POST["member_name"]; //管理者専用画面へWebブラウザをリダイレクトさせる $login_url = "http://{$_SERVER["HTTP_HOST"]}/phplesson/03/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message ="メンバー名かパスワードを間違えています。"; } ?> <html> <body> <?php if ($error_message) { print '<font color="red">' .$error_message. '</font>'; } ?> <form action="/phplesson/03/login.php" method="post"> メンバー名:<input type="text" name="member_name" value="" /><br /> パスワード:<input type="password" name="password" value="" /><br /> <input type="submit" name="login" value="ログイン" /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • phpを挑戦している中でのエラーメッセージについて

    初期の学び中の者です。 Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\check.php on line 51 とでるのですが、何回みなおしてもエラーを見つけることができません。 line 51、というのは下記のです。(50行に余分の「’」が入っていたのですが、それを修正しましたが、51にあるメッセージです)。 print'<input type="button" onclick="history.back()" value="戻る">'; よろしくお願いいたします。 -------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $nickname=$_POST['nickname']; $email=$_POST['email']; $goiken=$_POST['goiken']; if($nickname=='') { print'ニックネームが入力されていません。<br />'; } else { print'ようこそ'; print $nickname; print'様'; print'<br />'; } if($email=='') { print'メールアドレスが入力されていません。<br />'; } else { print'メールアドレス'; print $email; print'<br />'; } if($goiken=='') { print'ご意見がが入力されていません。<br />'; } else { print'ご意見'; print $goiken; print'<br />'; } if($nickname==" || $email==" || $goiken==") { print'<form>'; print'<input type="button" onclick="history.back()" value="戻る">'; print'</form>'; } else { print'<form method="post" action="thanks.php">'; print'<input type="button" onclick="history.back()" value="戻る">'; print'<input type="submit" value="OK">'; print'</form>'; } ?> </body> </html> --------

  • syntax error, unexpected '}' というエラーの対処法

    PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33 というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか? ・game.php <html> <head> <title>数当てゲーム</title> </head> <body> <h1 style="background:#cccccc">数当てゲーム</h1> <form method="POST" action="game.php"> 1~100までの数を入力してください <input type="text" name="answer" size="5" maxlength="3" /> <input type="sbumit" value=回答" /> </form> <hr /> <?php session_start(); if(is_null($_SESSION['answer'])){ mt_stand(microtime()*1000000); $_SESSION['answer']=mt_rand(1,100); $_SESSION['game_cnt']=0; } if($_POST['answer']!=""){ $_SESSION['game_cnt']++; if($_session['answer']==$_POST['answer']){ print("おめでとうございます". $_SESSION['game_cnt']."回で正解しました!"); session_destroy(); }else{ if($_SESSION['answer']>$_POST['answer']){ print("もう少し大きいです。"); }else print("もう少し小さいです。"); } } } ?> </body> </html> それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

    • ベストアンサー
    • PHP