[初心者]メールフォームを作成したが、サーバー移行後に文字が反映されない

このQ&Aのポイント
  • PHP初心者がメールフォームを作成しましたが、サーバー移行後に入力した文字が反映されません。
  • フォームの階層の違いが原因で文字が反映されない可能性があります。
  • 2つのPHPファイルを使用しているため、どちらを修正すればいいか分かりません。
回答を見る
  • ベストアンサー

[初心者]メールフォーム

PHP初心者です。 メールフォームをPHPで作りました(貰いものでカスタマイズした感じ)。 FTPでサーバーの[httpdocs]の直下に置き、 誤作動はなく動いていたのですが、 今回サーバーを移行した関係で、 [www]→[htdocs]に同じものを入れたら、 htmlで入力した文字などが反映されなくなりました。 これはやはり階層の違いによるもの何のでしょうか? 現在、入力確認用とsend用に2つのphpを使用していますが、 どれを修正したらいいのか分かりません。 記入したものが反映されないので 以下の箇所が怪しいかと思いますが、どうでしょうか? <?php  //フォームの値を取得  if($_SERVER["REQUEST_METHOD"] == "POST"){   foreach($_POST as $k => $v){    //「magic_quotes_gpc = On」のときはエスケープ解除    if(get_magic_quotes_gpc()){    $v = stripslashes($v);    }    $v = htmlspecialchars($v);    $$k = $v;   }  }else{    exit();  } よろしくお願いします。

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

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

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

階層(パス)に依存するスクリプト部は無いようなので 多分、別の部分に問題があるでしょう 例 1.送信側が正しくPOSTできていない 2.表示側で間違いがある 3.サーバー設定の違いによりデフォルトの文字コードが変わった など。3が怪しいですが開示情報だけでは断定はできません P.S.老婆心ながら、公開サーバでなければ構いませんが    $$k = $v; フィルターをかけずにこの処理をしては、プログラム内の任意の変数 を改竄可能になります。踏み台に利用される恐れは有りませんか?

santamo
質問者

お礼

ありがとう御座います! すべてのご回答を参考にし、 再度やってみます。

関連するQ&A

  • エスケープ解除

    以下のようなPHP構文の時に、 magic_quotes_gpcがOnであっっとしたら、 どのようにエスケープを解除すればいいのでしょうか? // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k = $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); }

    • 締切済み
    • PHP
  • foreachの代入時 $$を使う理由

    フォームからPOSTで値を受け取り、変数に代入する方法ですが、最後の$$kの意味がわかりません。 $k=$v;では、キチンと動作されず理解に困っています。 なぜ$$k=$v;で動作が正常なのでしょうか? プログラム自体はPHPによる スーパーサンプルという本に書いてあったのですが、説明もなく釈然としません。 if($_SERVER["REQUEST_METHOD"]=="POST"){ foreach($_POST as $k=>$v){ if(get_magic_quotes_gpc()){ $v=stripslashes($v); } $v=htmlspecialchars($v); $$k=$v; } } ググっても$$自体の検索がかけれず、色々なサイトで探したのですが、結局わからなかったので、分かる方がいたらよろしくお願いします。

    • 締切済み
    • PHP
  • POSTされた値の\問題

    はじめて質問させていただきます。最近PHPをはじめたばかりの初心者の私です。お願いいたします。 お問い合わせフォームを作っているのですがPOSTされた値の\問題を取り除く下の文なのですが、これを$_POST全部にあてはめることは可能でしょうか?一括でということです。ご回答お願いいたします。 if(get_magic_quotes_gpc()){ $name = stripslashes($name); $age = stripslashes($age); ・ ・ ・ ↑私はこれをなんと12個書いています(恥) ちなみに $name = htmlspecialchars ($name); も同様に・・・・。 ・}

    • ベストアンサー
    • PHP
  • バックスラッシュの対策について

    formでデータを送信するとバックスラッシュが入ってしまうので、stripslashes()で処理しています。 POSTでデータを送信しているのですが、 $prmarray_post = $_POST; $data1 = stripslashes($prmarray_post["data1"]); というような処理だと大丈夫なのですが、受け取るデータがいくつもあるので function cnv_formstr($array) { foreach($array as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v, ENT_QUOTES); $$k = $v; } return $array; } $prmarray_post = cnv_formstr($_POST); $data1 = $prmarray_post["data1"]; という感じでやりたいのですが、これだとうまくいきません。 どのようにすればよいのでしょうか。 よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • メールフォーム セキュリティについての質問

    メールフォーム セキュリティについての質問 はじめまして。 現在PHPを勉強中で、とりあえずメールフォームを サンプル本を参考にして作ろうとしているのですが、 不明なところが出てきたので質問させていただきました。 セキュリティのために入力された文字を htmlspecialchars を使って エスケープをするのですが、それをメールで受信するときには 正常に戻した状態(デコード?)で表示したいと思い 送信するためのスクリプトの前で html_entity_decode を使って再変換しようと 考えているのですが、これはセキュリティ上良くないのでしょうか? 以下は入力画面から確認画面で送信ボタンを 押した後に読み込む送信用のPHPファイルです。 環境はPHP 5.2となります。 <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 文字化け対応 mb_language("Japanese"); mb_internal_encoding("UTF-8"); $to = "xx@xx.ne.jp"; $contact = "お名前:$name\nメールアドレス:$from\nタイトル:$title\n内容:$naiyou\n"; $contact = html_entity_decode($contact); if (mb_send_mail($to,$title,$contact,"From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } ?> 以上 初心者のため質問に不備があるかもしれず 申し訳ありませんが、宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPメールフォームの、記入内容のチェック方法を教えてください>-<

    PHPの初心者です。 問い合わせフォームを作成していたのですが、 間違いの無いように メールアドレスを2回入力してもらって その2つが合ってるかどうかをチェックする という仕組みを作りたいのですが、 どのように記述すれば良いのか教えて頂けませんでしょうか。 フォームチェックの部分はこのように記述しています。 <? // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 値をチェックします。 $ErrFlg = 0; if ($name == "") { echo "<div style='width: 500px; padding:5px 5px 5px 5px; font-size:12px;'>入力に誤りがあります。必要事項をお確かめの上「入力フォームに戻る」ボタンでお戻りください。</div>"; $ErrFlg = 1; } echo "<table width='93%' border='0' cellpadding='5' cellspacing='1' bgcolor='#c7c2af'>"; if ($name == "") { echo "<tr>"; echo "<td bgcolor='#FFFFFF'>「お名前」が入力されておりません。</td>"; echo "</tr>"; $ErrFlg = 1; } if ($ErrFlg == 1) { echo "</table>"; echo "<br>"; echo "<div id='submit' style='width: 450px; padding:5px 5px 5px 5px; font-size:12px; text-align:center;'>"; echo "<a href='javascript:javascript:history.go(-1);'>戻る</a>"; echo "</div>"; } if (!$ErrFlg) { ?>

    • ベストアンサー
    • PHP
  • PHPのフォームの複数選択で。。。

    すいません当方PHPかなりの初心者で。。。。 入力→確認→送信のような流れのフォームを作成しているのですが。。。 メールフォームで複数選択が可能な場合フォームの受け取り側のPHPはどのように記載すればいいのでしょうか? □A □B □C □D □E □F ↑のようなフォームを作りチェックされたものを 【フォーム側】 <input type="checkbox" value="A" name="is[]">A <input type="checkbox" value="B" name="is[]">B <input type="checkbox" value="C" name="is[]">C <input type="checkbox" value="D" name="is[]">D <input type="checkbox" value="E" name="is[]">E <input type="checkbox" value="F" name="is[]">F 【確認画面のPHP】 // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } //中略// // 確認画面表示箇所 <? $is_value = $_POST["is"]; foreach($is_value as $v){ echo $v ." <br> "; } ?> //中略// // 送信PHPへの受け渡し場所 <input type="hidden" name="service" value="<?= $is_value ?>"> ↑この部分の記載の仕方がわかりません。。。 確認画面で表示させたものを関数に格納して送信PHPの方に受け渡ししたいのですが。。。 どのようにどのあたりに記載したらいいのでしょうか? わかりにくい質問かもしれません。。。 なにとぞなにかお気づきの点がありましたらご教授ねがえると助かります。。。 よろしくお願いします。

    • 締切済み
    • PHP
  • メールフォームが文字化けします、、、、

    メールフォームが文字化けします、、、。 「申します」→「垂オます」 とかなってしまいます。 また、「(1)」とかは「?」になってしまいます。 いろいろ調べてみたんですがこの辺かなぁとは思います。 ちなみにプログラミングなどド素人です。 ____________________________ if(get_magic_quotes_gpc()){$str = stripslashes($str);} //¥除去 return $str; } ____________________________ アドバイスお願い出来ましたら幸いです。><;

    • ベストアンサー
    • PHP
  • PHPで問い合わせフォーム 受信すると文字化けする

    フォーム⇒ (1)確認  ⇒ (2)送信 と3つに分けて、phpファイルに書きました。 ためしに、送信してみると、成功はするものの、文字が化けてメールの内容が分かりません。 分からないので教えてください。 フォーム ↓ <form method="POST" action="kakunin.php"> <table border="0"> <tr> <td >お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="from" size="20"></td> </tr> <tr> <td>メールタイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value=" お問い合わせ内容を確認 "></td> </tr> </table> </form> (1) kakunin.php ↓ 入力フォームから情報を受け取り確認 <?php // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 値をチェックします。 $ErrFlg = 0; if ($name == "") { echo "<p>お名前を入力してください。"; $ErrFlg = 1; } if ($from == "") { echo "<p>メールアドレスを入力してください。"; $ErrFlg = 1; } if ($title == "") { echo "<p>メールタイトルを入力してください。"; $ErrFlg = 1; } if ($naiyou == "" ) { echo "<p>メッセージを入力してください。"; $ErrFlg = 1; } if ($ErrFlg) { exit(); } ?> 内容を確認して送信ボタンをクリックしてください <form method="POST" action="mail.php"> <table border="0"> <tr> <td width="100">お名前</td> <td width="300"><?php echo $name?></td> </tr> <tr> <td width="100">メールアドレス</td> <td width="300"><?php echo $from?></td> </tr> <tr> <td width="100">メールタイトル</td> <td width="300"><?php echo $title?></td> </tr> <tr> <td width="100">メッセージ</td> <td width="300"><?php echo nl2br($naiyou) ?></td> </tr> <tr> <td colspan="2"><input type="submit" value="送信"></td> </tr> </table> <input type="hidden" name="name" value="<?php echo $name ?>"> <input type="hidden" name="from" value="<?php echo $from ?>"> <input type="hidden" name="title" value="<?php echo $title ?>"> <input type="hidden" name="naiyou" value="<?php echo $naiyou ?>"> </form> (2) mail.php ↓のコード 送信 <?php // メール送信先を指定します。 $to = "xxxxxxxxxx■ gmail.com"; // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // メール本文を組み立てます。 $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mb_send_mail($to, $title, $naiyou, "From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } } ?>

    • ベストアンサー
    • PHP
  • フォームのデータを受け取りについて

    http://phpnet.blog91.fc2.com/blog-entry-6.html こちらのページを参考しているのですが下記のコードが エラーになってしまいます。 ・エラー内容 extract() [function.extract]: First argument should be an array ・エラー箇所 extract($array); function($array) { hogehoge } のようにfunctionを実行しても定義していないから?とも 思ったのですが応用の方法がわかりません。 現在は以下のようなソースです。 if (!$_POST{"submit"}) { foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); ~いろんな処理~ } どのようにすればいいものでしょうか? アドバイスなど頂けますと幸いです。宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう