いつもお世話になっております。
今回はサイト利用者が管理者などに質問をメールするホームを作っております。
利用者は名前、メールアドレス、質問内容を入力し、送信ボタンを押すと、自動的に管理者のメールアドレスに送信される。そういった流れです。
プログラムそのものにはミスはないのですが、ひとつ問題があります。
質問メールをgoogleのGmailに送信できるようにしているのですが、Gmailをメールサーバーにする設定がよく分かりません。
いろいろサイトを調べて「php.ini」内にある
SMTP=localhostをsmtp.gmail.comに変更したのですが、メールを送信するとウイルス対策ソフトMcAfeeが出てきて
「プロトコルエラーのためメールが送信されませんでした」と出てしまいます。
どうすればgmailにちゃんと送信されるのでしょうか?
解決しなければいけない問題は3つだと思います。
1,Gmailの設定方法。
2,メールソフト(outlook,thunderbirdなど)の設定方法(現在この二つのメールソフトを使用しています)。
3、php.iniの設定
特に下記の部分。
[mail function]
; For Win32 only.
SMTP = smtp...
smtp_port = 25

; For Win32 only.
sendmail_from = :::::@example.jp
もしお分かりになる方がいらっしゃいましたら、もしくは参考になるサイトをご存知の方がいらっしゃいましたらよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

環境を推測します。


・自宅設置のWindowsをWebサーバーとして使っている
・そのWebサーバーにメール送信のPHPを設置している
・そのメールの送り先はgmail.comの特定アカウントに固定

この場合、php.iniでは、gmail.comのSMTPサーバーを使うのではなく、
その回線で使うべきSMTPサーバー(自宅設置ならプロバイダのSMTPサーバー)を指定します。
メールの送り先(Toアドレス)に合わせて、いちいちPHPが使うSMTPサーバーを切り替える必要はありません。

もし、自分のプロバイダのSMTPサーバーを使えない理由があり、どうしてもsmtp.gmail.comをSMTPとして使いたいというのなら、すでにご回答のある通り、mail()やmb_send_mail()でなくPEAR::Mailなどを使って
SSL+SMTP-AUTHで送るようする必要があります。

しかし、smtp.gmail.comを使ってメール送信するとFromアドレスを強制的にその認証アカウントのものに書き換えるので(SPAM踏み台防止のため)、
どちらにせよ、PHPでのメール送信で使うのには不向きです。
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまって大変申し訳ございません。
superside0さんのご指摘どおり、自分の使っているプロバイダーのSMTPを使ったらできました。
プロバイダーにSMTPについてメールで質問したのですが海外(オーストラリア)の業者はどこも、仕事が遅く、やっと先週SMTPについて教えてもらったもので、お礼が遅くなっていまった次第です。本当にありがとうございました。

お礼日時:2008/05/11 23:03

> 1,Gmailの設定方法。


> 2,メールソフト

1, をご覧になって 2, のメールソフトでは送信が出来ているのですよね?
1, の設定方法について何か疑問はありませんでしたか?
(ほかのメール設定異って SSL だったとか、ポートの番号が
違っていたとか)

> 「プロトコルエラーのためメールが送信されませんでした」

はい、そうなります、理由は後述します。

> 3、php.iniの設定
> 特に下記の部分。
(以下割愛)

Gmail は SSL 接続して SMTP-AUTH (認証)が必要なのでそのような
方法では送れません。
ご自身のお使いのプロバイダの SMTP(メール送信サーバ)を使うか、
別の方法(PEAR::Mailなど)を使って送ります。

# 別途 PEAR::Mail などのパッケージが必要なのです。
# コマンドプロンプトを使って php のディレクトリの go-pear.bat を
# 使ってインストールします。

gmail PEAR::Mail - Google 検索
http://www.google.co.jp/search?q=gmail+PEAR%3A%3 …

# 他にご質問がある時は急いで締め切らないで頂けると助かります。
    • good
    • 0
この回答へのお礼

x415f484fさん
ご解答ありがとうございます。まだご解答していただいたのはためしてはいないのですが、前回の質問の際に大変失礼なことをしてしまったのでまずそちらのお詫びをしたいと思い書き込みました。本当に前回の質問では大変申し訳ございませんでした。確かにまだ質問を書いたまま質問を締め切ってしまいました。こちらの方も解決はしていないのですが、まずメール送信・STMPサーバーの問題が解決しないとなにも始まらないので、今回の質問をさせていただいております。

GmailだけでなくほかのSMTP(プロバイダのなど)いろいろもっと調べてみます。PEAR::Mailなどについてもよく読ませていただきます。

前回の質問で失礼なことをしたにも関らずまたご解答していただきありがとうございました。まずはご解答していただいたことをためしてみてまた、質問があれば補足のところに書き込みますのでよろしくお願いいたします。

お礼日時:2008/04/18 00:41

そのサーバの動作環境はどういうのですか?


貴方のパソコンで動かしているなら、ウイルス検査サービスを停止する必要があります。

この回答への補足

ご解答ありがとうございます。ご指摘の通り、ウイルス検査を停止したのですが実行したら
というエラーが出てしまいました。
SMTP server response: 530 5.7.0 Must issue a STARTTLS command first. c20sm18273232rvf.3
ウイルス検査を通さないとこういったエラーが出てしまうのでしょうか?
動作環境ですが、
OS windows xp
Xampp 2.5
PHP 5.25
thunderbird 2.0.0.12
です。

補足日時:2008/04/17 23:41
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHPでメールを送信するには

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超初心者です。

参考本をもとに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には自分の別アドレスを記...続きを読む

Aベストアンサー

まだFromのところでつまづいてるみたいです。
下記の3点をチェックしてダメだったらお手上げかも。

1. php.iniはどこにおいてますか?
Windows上でphpを動かす場合、php.iniはC:\Windows以下になければphp.iniが有効にならない場合があります。
試しに、下記のようなファイルをどこかに作成してみてください。
<?php phpinfo(); ?>
この状態で、
php.iniの適当な設定を変更
→Apache再起動
→上記のファイルにアクセス(phpの設定情報が表示されます)
→php.iniの変更内容が反映されているか確認

この手順で、きちんと変更内容が反映されているか確認してみてください。
また、その際に「SMTP」と「send_mail_form」が設定されているかも確認しておくとよいです。

2. SMTPとsend_mail_fromの再確認
前項でも触れましたが
「php.iniで意図した内容に設定されているか。タイプミス等ないか」
「phpinfo()で確認した内容が、上記の設定と相違ないか」
もし、設定内容がphp.iniと異なる場合はphp.iniを設置するディレクトリをC:\Windows以下等にしてみてください。

3. $header変数にFrom行を加える
最悪、send_mail_fromが設定されていない場合でもSMTPサーバーが起動していれば
標準の設定でメールが送信されるはずです。

最初に提示して頂いたソースのうち、ヘッダ($header)を定義している部分を
昨日説明したように、下記の通り編集してみてください。

$header="Content-Type:text/plain;charset=iso-2022-jp";

$header = "Content-Type: text/plain; charset=iso-2022-jp\n";
$header .= "From: hoge@example.com";

「hoge@example.com」はあなたの自分のメールアドレスに変更してくださいね。
これをするだけで、少なくとも「Warning: mb_send_mail (略) on line 11」というエラーは発生しなくなるはずです。

まだFromのところでつまづいてるみたいです。
下記の3点をチェックしてダメだったらお手上げかも。

1. php.iniはどこにおいてますか?
Windows上でphpを動かす場合、php.iniはC:\Windows以下になければphp.iniが有効にならない場合があります。
試しに、下記のようなファイルをどこかに作成してみてください。
<?php phpinfo(); ?>
この状態で、
php.iniの適当な設定を変更
→Apache再起動
→上記のファイルにアクセス(phpの設定情報が表示されます)
→php.iniの変更内容が反映されているか確認

こ...続きを読む

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

Qローカル環境でのメール送信

PHP超初心者です。
ローカル環境でmb_send_mail関数をつかってメール送信をしたいのです
が、上手くいきません。

エラーメッセージは
Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first n44sm11126503pyh in C:\xampp\htdocs\○○○\○○.php on line 15
とでています。

文字コードはUTF-8で保存しており、

<?php
mb_language("ja");
mb_internal_encoding("UTF-8");
$mailto="○○○@○○○.jp";
$subject="タイトル";
$content="内容";
$mailfrom="From:".mb_encode_mimeheader("nicoko")."<○○○@フリーメールアドレス.com>";
mb_send_mail($mailto,$subject,$content,$mailfrom);
?>
です。
15行目はmb_send_mail($mailto,$subject,$content,$mailfrom);

色々調べたところ、
(1)SMTP = メールアドレス用のsmtpサーバの設定
(2)smtp_port = 25
(3)sendmail_from = メールアドレス
を設定しなおし、
C:\xampp\apache\bin\php.ini
C:\xampp\php\php.ini
C:\xampp\php\php5.ini
C:\xampp\php\php4\php.ini
全ての設定を変更しました。
またphpinfoで確認したところ(1)~(3)まで変更されていました。
(3)はOutlookのメールのアカウント→プロパティを見て
サーバー情報→送信メールに○○.○○○.jpと書いてあり、
それをうつしました。

宜しくお願いします。

PHP超初心者です。
ローカル環境でmb_send_mail関数をつかってメール送信をしたいのです
が、上手くいきません。

エラーメッセージは
Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first n44sm11126503pyh in C:\xampp\htdocs\○○○\○○.php on line 15
とでています。

文字コードはUTF-8で保存しており、

<?php
mb_language("ja");
mb_internal_encoding("UTF-8");
$mailto="○○○@○○○.jp";
$subject="タイトル";
$content="...続きを読む

Aベストアンサー

エラーメッセージに SMTP server response: 530
と出ていることから 何らかの理由でSMTPサーバからアクセスを拒否されています。
多くの場合、STMPサーバーの不正中継防止(SPAM中継)対策に引っかかっている可能性が高いです。他にサーバ側のパーミッション設定ミスなどが考えられますがoutlook等で送信できているのならそれは無いでしょう。
ユーザ側の設定不備の例を下記に示します。
・認証が必要なSMTPサーバーなのに、認証処理をしないで送信しようとした。
・FROM欄のドメインとしてSMTPサーバーが許可しているものを利用していない・
 多くのISPは、自社が管理しているドメイン名以外からの送信を許可していません。(FROM に使用されている@以降の文字列をチェック)

Qテーブル内の文字サイズを変更したい。

HTMLのテーブル内の文字サイズを変更したいのですが。
イマイチ上手くいかずに悩んでいます。
出来れば全体的に<TABLE></TABLE>のほうでいじれますか?
<TD>タグや<TR>タグのところでいじくるのですか?

Aベストアンサー

いろいろやり方はありますが
文字単位でサイズを変更するには
#2の方法ですね。

テーブルごとやセル(<TD>)ごとにサイズを変更するには
スタイルシート(CSS)を使用します。

テーブルごとにサイズを変更する場合
<TABLE style="font-size : 20px;">

セル(<TD>)ごとにサイズを変更する場合
<TD style="font-size : 20px;">あああ</TD>

#1の方法だとページ内の全てのセル(<TD>)に設定することになります。

スタイルシート(CSS)はこれら以外にも
いろいろな設定方法があります。

Qテキストボックス入力を半角英数字に制限する

よろしくお願いします。

テキストボックスに入力される文字を、
半角英数字(英語の場合は大文字のみ)以外入力できないように制限したいのですが可能でしょうか?

もしくは半角英数字以外が入力された場合アラートを出すようにしたいのですが。。。

また、文字数の制限も可能でしょうか?

第一希望)
12文字以内の半角英数大文字以外入力できないように入力制限する。

第二希望)
12文字以内の半角英数大文字以外入力の文字が入力されている状況でボタン(=CGI実行)を押すと警告のアラートが出る。

第三希望)
半角英数大文字以外入力できないように制限、もしくはアラート表示。

例)
AAAA-1234567 ○(ハイフンを含め12文字以内の半角英数字)
AAAA-123456789 ×(12文字以内でない)
aaaa-1234567 ×(小文字が含まれている)


webサーバー・・・HP-UX
web・・・IE6
開発端末・・・windows2000(Tera Term 使用)

情報をお持ちの方いらっしゃいましたら、
よろしくお願いいたします。

よろしくお願いします。

テキストボックスに入力される文字を、
半角英数字(英語の場合は大文字のみ)以外入力できないように制限したいのですが可能でしょうか?

もしくは半角英数字以外が入力された場合アラートを出すようにしたいのですが。。。

また、文字数の制限も可能でしょうか?

第一希望)
12文字以内の半角英数大文字以外入力できないように入力制限する。

第二希望)
12文字以内の半角英数大文字以外入力の文字が入力されている状況でボタン(=CGI実行)を押すと警告のアラートが...続きを読む

Aベストアンサー

第二希望の条件について。
前提としてチェックするテキストボックスのnameがtxtであった場合の説明をします。
まず、次のようにform開始タグにname="fm"とonsubmit="return checkForm()"を追加します。

<form name="fm" action="********.cgi" method="post" onsubmit="return checkForm()">


次に以下を<head>~</head>に貼り付けることで、JavaScriptによる送信前のチェックが可能です。

---------------------------------------
<script type="text/javascript">
<!--
function checkForm(){
var str = document.fm.txt.value;
if (str.match(/[^A-Z\d\-]/)) {
alert("半角英数字(大文字)しか入力できません");
return false;
}
else if (str.length > 12) {
alert("12文字以内で入力してください");
return false;
}
}
//-->
</script>
---------------------------------------

「ハイフンを含め」と書いているので、ハイフンを入れても有効なようにしました。
また、12文字以内としか書かれていないので0文字でも警告が出ないようになっています。
もし、何も入力されていない場合でも警告を出すならば、次のようにしてください。

---------------------------------------
if (!str) {
alert("何も入力されていません");
return false;
}
else if (str.match(/[^A-Z\d\-]/)) {
alert("半角英数字(大文字)しか入力できません");
return false;
}
else if (str.length > 12) {
alert("12文字以内で入力してください");
return false;
}
---------------------------------------

第二希望の条件について。
前提としてチェックするテキストボックスのnameがtxtであった場合の説明をします。
まず、次のようにform開始タグにname="fm"とonsubmit="return checkForm()"を追加します。

<form name="fm" action="********.cgi" method="post" onsubmit="return checkForm()">


次に以下を<head>~</head>に貼り付けることで、JavaScriptによる送信前のチェックが可能です。

---------------------------------------
<script type="text/javascript">
<!--
function checkForm(){
...続きを読む

QParse error: syntax error, unexpected T_STRING in・・・118と出るのですが

Parse error: syntax error, unexpected T_STRING in 。。。 on line 118
とでるのですが対処はどうすればよろしいでしょうか?

Aベストアンサー

118行目をみてみてください。
ダブルクォーテーションのなかでダブルクォーテーションを使ったり
してませんか?
基本的な文法ミスなので、自己解決できないと今後きびしいですよ。

Qphpでmb_send_mailを用いてメールの送信を試みておりますが、うまくいきません

phpでmb_send_mailを用いてメールの送信を試みておりますが、うまくいきません。
php.iniの現時点における設定は、以下の通りです。

[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from =

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "sendmail -t -i"

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
;mbstring.strict_encoding = Off

なお、phpのスクリプトでは、mb_send_mail関数を呼ぶ直前に、
 mb_language("ja");
 mb_internal_encoding("utf-8");
を実行しております。

また、html部では、<meta…タグにおいて、charset=UTF-8の宣言を行い、
このhtml部を含むphpファイルは、文字コードUTF-8にて格納し直しました。

原因をいろいろ探ったのですが、自力では無理のようです。
原因と考えられる点をどうか教えて頂くようにお願い致します。

phpでmb_send_mailを用いてメールの送信を試みておりますが、うまくいきません。
php.iniの現時点における設定は、以下の通りです。

[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from =

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "sendmail -t -i"

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = U...続きを読む

Aベストアンサー

25番のファイアーウォールのポートが開いてないとか?
プロバイダーがメールサーバーをたてれないように25ポートをブロックしているとか?

QPHPからのメールがこない

#! /usr/local/php4/bin/php<?
//各種初期設定
$from="info@demo.net";//送信元
$dest="info@demo.net";//宛先
$header="From: $from\nReply-To: $from";//ヘッダ
$subject="お問い合わせ";//件名


//エラーがない場合のみメール送信
if($result=="flash"){
// 文字コードの変換
mb_convert_variables("EUC-JP", "JIS, SJIS, UTF-8", &$SUBJECT, &$COMPANY, &$PERSON, &$EMAIL, &$URL, &$COMMENT);
//言語を日本語に設定
mb_language("Japanese");

$message="省略";

//メールを送信する
mb_send_mail($dest, $subject, $message, $header);
// FlashのAns = Sender.Answer; に'Complete' を返す
print "Content-type: text/plain\n\n";
print "Answer=Complete";
}
?>

というFlashと連動するPHPなのですが、
メール送信完了と表示されるのにメールがきません。

どなたかお分かりになるかた是非教えて下さい。

利用サーバー環境は
OS Linux (Fedora Core 3)
PHP PHP-4.3.11 (CGI版)
Perl Perl-5.8.5
です。よろしくお願いします。

#! /usr/local/php4/bin/php<?
//各種初期設定
$from="info@demo.net";//送信元
$dest="info@demo.net";//宛先
$header="From: $from\nReply-To: $from";//ヘッダ
$subject="お問い合わせ";//件名


//エラーがない場合のみメール送信
if($result=="flash"){
// 文字コードの変換
mb_convert_variables("EUC-JP", "JIS, SJIS, UTF-8", &$SUBJECT, &$COMPANY, &$PERSON, &$EMAIL, &$URL, &$COMMENT);
//言語を日本語に設定
mb_language("Japanese");

$message="省略";

//メールを送信する
...続きを読む

Aベストアンサー

たびたび。
> 帰宅する部活様のKメールフォーム(PHP)を設置して試行したところちゃんとメールがきました。

とりあえず、帰宅する部活のスクリプトはmb_send_mailではなく、mail関数で送信しているようですね(657行目)。パスの設定は不要です(デフォルト設定でOK)。

今まで分かっている事は、
1. mail関数はちゃんと動いてくれる(sendmailのパス等は問題ない)。
2. mb_send_mailでは返り値がtrueだけどメールが届かない。
サーバのメールログは見れないのですよね?

ひょっとしてmb_send_mailは文字コード関係でひっかかっているかも知れません(メールアドレスが抽出出来ていない)。
mb_convert_variablesのところの動作が怪しいですね。

ところで、今気がつきましたが、提示スクリプトではmb_convert_variables内の変数が全て大文字で書かれていますが、mb_send_mailでは全て小文字です。これでは適用されませんね。確認してみて下さい。

QProxyを利用しているかどうか確認する方法

自分のPCからネットに接続する際
Proxyサーバを経由しているかどうかを
確認する方法はありますか?

Aベストアンサー

ブラウザーがIEの場合として、
ツール→インターネットオプション→接続→LANの設定→LANにプロキシサーバを使用する ここにチェックがはいっていればProxyサーバ経由です。

Qセッションを使わずに遷移先画面に変数の値を渡すには?

<input type="hidden" value="myID">みたいな隠しフォームで
行く先々の画面に値をPOSTで渡してきました。

他方、 header("Location: mypage.php")
のように画面を遷移させる場合、遷移先の画面に
$_POST["myID"]のように値を渡すことはできませんか?

この場合session_start();を使って、$_SESSION["myID"]のように値を
渡す(保持する)のが王道なのでしょうか?
セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
できれば使いたくないのです。

具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。
入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、
問題なければmypage.phpにリダイレクトさせる枠組みですが、
header("Location: mypage.php");という風に遷移した場合は、
遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね
(値を受け取れませんよね)??

妙案あればご教示下さい。


<?php
if ($_POST["reg"] == "" ) $errFlg = true;
if (!$errFlg) {
    if (strlen($_POST["myName"]) > 30) {
      $errFlg = true;
      $errStr["myName"] = "30字以下";
    }
  $errMsg = "エラー!!";
}
if ($errFlg) {
?>
<html>
  <body>
    <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
      氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>
      <input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">
    </form>
    <input type="submit" name="reg" value="登録">
  </body>
</html>
<?php
} else {
    $sql = "update mytable set myID = 'xxxx'";
    $rst = mysql_query($sql, $con);
    header("Location: mypage.php");
}
?>

<input type="hidden" value="myID">みたいな隠しフォームで
行く先々の画面に値をPOSTで渡してきました。

他方、 header("Location: mypage.php")
のように画面を遷移させる場合、遷移先の画面に
$_POST["myID"]のように値を渡すことはできませんか?

この場合session_start();を使って、$_SESSION["myID"]のように値を
渡す(保持する)のが王道なのでしょうか?
セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
できれば使いたくないのです。

具体的に説明しますと、前にこ...続きを読む

Aベストアンサー

結局「sessionの真似事」を自前でするようなことになりそうです。

・ランダムなファイル名を作成して、そのファイルにアドレスを書き込む。
・GETでファイル名を渡す。
・ファイル名を元にそのファイルからアドレスを取り出す。
・ファイルを削除する

何らかのトラブルで残ってしまったファイルは「一定時間以上経過したファイルは定期的に削除」というGCの真似事までしないといけなくなりますけど。

hidden(POST)で持ち回るということからも「セキュリティ」はまったく考慮しなくていいシステムのようなので、そうであれば「復号可能な暗号化」という手もありかもしれません。



>セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
>できれば使いたくないのです。

普通に使いますけどねぇ・・。


人気Q&Aランキング

おすすめ情報