- ベストアンサー
メールフォームが動いてくれない。
初心者ながら以下のようなメールフォームを書いたのですがうまく動いてくれません。どうしてなのでしょうか? ----hoge.php---- <?php $mail = $_POST['mail']; $address = $_POST['add']; if(empty($mail)){ $1 = "入力してください。"; }elseif(empty($address)){ $2 = "入力してください。"; }else{ //メール送信 echo("送信しました。"); exit; } ?> <form action="hoge.php" method="post"> E-mail <inputtype="text" name="add"><?=$1?> Message <input type="text" name="mail"><?=$2?> <input type="submit" value="send!!"> </form> ----- 一応、メールアドレスや本文が未入力の場合、エラーメッセージを出すようにしています。 どうぞよろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
このコードが作りかけの状態なのは分かりますが、現時点でどのような動作になることを期待しているのかが正直さっぱり分かりません。 「本来ならばこうなってほしいところが、こうなってしまう」というのを具体的に説明しないとアドバイスもできません。 …が、とりあえず目に付いたところをいくつか。 1.「elseif(empty($address))」でなく、「if(empty($address))」とすべきだと思います。なぜなら、このままだと$mailが空のときに評価されないからです。 2.PHPコードでチェックしている項目と、下のHTMLで$1と$2を表示する部分が逆になっているように見えます。 3.「echo("送信しました。")」はどこに表示されるのでしょうか? ちゃんとしかるべき場所に表示するようにすべきです。 4.「$1」と「$2」はPHPでは無効な変数です。 #2さんでリンクを出していますが、「有効な変数名は文字またはアンダースコアから始まり、任意の数の文字、 数字、アンダースコアが続きます。」とあります。 #2さんの「基礎から学習したほうがいい」というのは、そういうことです。 私としては、少々回り道になりますが、もう少し簡単なサンプルから練習を始めてみることをおすすめいたします。
その他の回答 (4)
- YUTAKUN007
- ベストアンサー率66% (35/53)
エチケットの話になりますが 具体的にどのようなエラーメッセージが出たのか、実行環境などを しっかりと掲載していただかないと解決に繋がりませんよ。 今回はソースの内容からある程度予測できましたが 万が一予測もできないソースを載せられて 具体的なエラー内容を書かずに「動きません」だけでは助けようがありません。 ちょっと筋がずれていますが 正規表現などでメールアドレスの入力値チェックなんかも 行った方がいいですよ。 なにかしら悪用される確率が高くなります。 心配なら公開されているライブラリを引っ張ってくるほうが 安全にスクリプトを組めるかと思います。 この手のライブラリは探せばいくらでも出てくると思いますから。
- moon_night
- ベストアンサー率32% (598/1831)
変数の最初の文字は数字だとNGです。 変数の最初の文字を英字またはアンダーバー(_)にしてください。
お礼
回答ありがとうございます。 なるほど、変数にははじめから数字を使用することができないのですね。ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
変数名のつけ方など基礎から学習したほうが 良いと思います。 PHPマニュアルを1度通読なさってください http://www.php.net/manual/ja/language.variables.php
お礼
いやいや、「基礎から勉強しなさい」といわれましてもそれを聞きにご質問させていただいているわけではありませんので。 何がだめなのか、どこをどのように直したらいいのかお教えください。
- yambejp
- ベストアンサー率51% (3827/7415)
少なくともこのスクリプトにはメールを送信する仕組みは 組み込まれていないようですから、どう「うまく動かない」 のか書かないと回答しようがないですね。 おかしいと思うところは$1とか$2とかexitとかです。 ちなみにemptyは「0」を空だとみなすらしいので 気をつけて使ったほうがよいです。
お礼
回答ありがとうございました。 メール送信はmd_send_mail()を使用して送信する予定です。 $1と$2ですが、例えばメール本文が入力されていなければ$1に「入力されていません」というエラーメッセージを代入し<?=$1?>で表示しようとしています。ですが、うまくいきません。 どうぞよろしくお願いいたします。
お礼
回答ありがとうございました。 #2さんの意味はそういうことでしたか。馬鹿にされているのかと勘違いしてしまいました。すいませんでした。