回答編集履歴

4 バグ修正

退会済みユーザー

退会済みユーザー

2015/04/16 17:20  投稿

少し考え方を変えてみるのはどうでしょうか?
1.未入力かどうかのチェックをする
2.未入力があった場合、入力フォームのページへリダイレクト ←ここ
3.未入力項目の上に「○○を記入してください」と表示する
> 2番を、「入力に“不備が無かった場合”にリダイレクトする」
にしてみましょう。
そうすると
```
<form action="send.php" method="POST">
```
```
<form action="check.php" method="POST">
```
のように自分自身向けになります。
あなたが書いたプログラムの場合、
$errormsgが空ならエラーが無かったということなので、
```
if(count($errormsg)){
if(count($errormsg) === 0){
   header('location: send.php');
   exit();
}
```
といった感じでリダイレクトできます。 
つまり、お問い合わせ入力画面(form)→確認画面(check)を一つの画面でまかなうわけです。
この場合、
```
<input name="name" value="<?php if(isset($name)){ echo $name; } ?>" >
```
といったように、初回表示時に未定義変数へのアクセスを抑止する必要があります。
こうすると、入力値にエラーがあった場合にエラーを表示させ、そのまま入力された値を元のフォームの入力欄に表示でき、またコードも少なくて済みます。
ところが、リダイレクト先ではPOSTされた情報はわからなくなってしまいますね。
GETパラメターで渡す方法もありますが、これは経由するサーバーに情報が残ってしまうのであまりよろしくありません。
そこで、簡単な方法としてはPHPのSESSIONを利用します。
check.phpの最初に、
```
<?php
   session_start();
```
としておくと、接続に対してsession_idが発行され、sessionが利用できるようになります。
sessionが利用できるようになっていますので、$_SESSIONに値をセットします。
```
if(count($errormsg)){
if(count($errormsg) === 0){
   $_SESSION["posted"] = array(
                            "name" => $name,
                            "phone" => $phone,
                            "mail" => $mail,
                            "message" => $message
                         );
   header('location: send.php');
   exit();
}
```
リダイレクトしたsend.phpの方でこのsessionの値を利用するので、やはりsession_start()で始めます。
```
<?php
   session_start();
   echo $_SESSION["posted"]["name"];
   print_r($_SESSION["posted"]);
```
ご記載頂いたコードのおかしい点やセキュリティなどを考慮するといろいろありますが、
考え方としてはこんな感じで良いのではないでしょうか。
3 補足

退会済みユーザー

退会済みユーザー

2015/04/16 11:07  投稿

少し考え方を変えてみるのはどうでしょうか?
1.未入力かどうかのチェックをする
2.未入力があった場合、入力フォームのページへリダイレクト ←ここ
3.未入力項目の上に「○○を記入してください」と表示する
> 2番を、「入力に“不備が無かった場合”にリダイレクトする」
にしてみましょう。
そうすると
```
<form action="send.php" method="POST">
```
```
<form action="check.php" method="POST">
```
のように自分自身向けになります。
あなたが書いたプログラムの場合、
$errormsgが空ならエラーが無かったということなので、
```
if(count($errormsg)){
   header('location: send.php');
   exit();
}
```
といった感じでリダイレクトできます。 
つまり、お問い合わせ入力画面(form)→確認画面(check)を一つの画面でまかなうわけです。
この場合、
```
<input name="name" value="<?php if(isset($name)){ echo $name; } ?>" >
```
といったように、初回表示時に未定義変数へのアクセスを抑止する必要があります。
こうすると、入力値にエラーがあった場合にそのまま入力された値を元のフォームの入力欄に表示でき、またコードも少なくて済みます。
こうすると、入力値にエラーがあった場合にエラーを表示させ、そのまま入力された値を元のフォームの入力欄に表示でき、またコードも少なくて済みます。
ところが、リダイレクト先ではPOSTされた情報はわからなくなってしまいますね。
GETパラメターで渡す方法もありますが、これは経由するサーバーに情報が残ってしまうのであまりよろしくありません。
そこで、簡単な方法としてはPHPのSESSIONを利用します。
check.phpの最初に、
```
<?php
   session_start();
```
としておくと、接続に対してsession_idが発行され、sessionが利用できるようになります。
sessionが利用できるようになっていますので、$_SESSIONに値をセットします。
```
if(count($errormsg)){
   $_SESSION["posted"] = array(
                            "name" => $name,
                            "phone" => $phone,
                            "mail" => $mail,
                            "message" => $message
                         );
   header('location: send.php');
   exit();
}
```
リダイレクトしたsend.phpの方でこのsessionの値を利用するので、やはりsession_start()で始めます。
```
<?php
   session_start();
   echo $_SESSION["posted"]["name"];
   print_r($_SESSION["posted"]);
```
ご記載頂いたコードのおかしい点やセキュリティなどを考慮するといろいろありますが、
考え方としてはこんな感じで良いのではないでしょうか。
2 コードくくり修正

退会済みユーザー

退会済みユーザー

2015/04/16 11:06  投稿

少し考え方を変えてみるのはどうでしょうか?
1.未入力かどうかのチェックをする
2.未入力があった場合、入力フォームのページへリダイレクト ←ここ
3.未入力項目の上に「○○を記入してください」と表示する
> 2番を、「入力に“不備が無かった場合”にリダイレクトする」
にしてみましょう。
そうすると
```
<form action="send.php" method="POST">
```
```
<form action="check.php" method="POST">
```
のように自分自身向けになります。
あなたが書いたプログラムの場合、
$errormsgが空ならエラーが無かったということなので、
```
if(count($errormsg)){
   header('location: send.php');
   exit();
}
```
といった感じでリダイレクトできます。 
つまり、お問い合わせ入力画面(form)→確認画面(check)を一つの画面でまかなうわけです。
この場合、
 
```
<input name="name" value="<?php if(isset($name)){ echo $name; } ?>" >
``
```
といったように、初回表示時に未定義変数へのアクセスを抑止する必要があります。
こうすると、入力値にエラーがあった場合にそのまま入力された値を元のフォームの入力欄に表示でき、またコードも少なくて済みます。
ところが、リダイレクト先ではPOSTされた情報はわからなくなってしまいますね。
GETパラメターで渡す方法もありますが、これは経由するサーバーに情報が残ってしまうのであまりよろしくありません。
そこで、簡単な方法としてはPHPのSESSIONを利用します。
check.phpの最初に、
```
<?php
   session_start();
```
としておくと、接続に対してsession_idが発行され、sessionが利用できるようになります。
sessionが利用できるようになっていますので、$_SESSIONに値をセットします。
```
if(count($errormsg)){
   $_SESSION["posted"] = array(
                            "name" => $name,
                            "phone" => $phone,
                            "mail" => $mail,
                            "message" => $message
                         );
   header('location: send.php');
   exit();
}
```
リダイレクトしたsend.phpの方でこのsessionの値を利用するので、やはりsession_start()で始めます。
```
<?php
   session_start();
   echo $_SESSION["posted"]["name"]. "<br>n";
   print_r($_SESSION["posted"];
   echo $_SESSION["posted"]["name"];
   print_r($_SESSION["posted"]);
```
 
ご記載頂いたコードのおかしい点やセキュリティなどを考慮するといろいろありますが、
考え方としてはこんな感じで良いのではないでしょうか。
1 補足

退会済みユーザー

退会済みユーザー

2015/04/16 11:02  投稿

少し考え方を変えてみるのはどうでしょうか?
1.未入力かどうかのチェックをする
2.未入力があった場合、入力フォームのページへリダイレクト ←ここ
3.未入力項目の上に「○○を記入してください」と表示する
> 2番を、「入力に“不備が無かった場合”にリダイレクトする」
にしてみましょう。
そうすると
```
<form action="send.php" method="POST">
```
```
<form action="check.php" method="POST">
```
のように自分自身向けになります。
あなたが書いたプログラムの場合、
$errormsgが空ならエラーが無かったということなので、
```
if(count($errormsg)){
   header('location: send.php');
   exit();
}
```
といった感じでリダイレクトできます。 
つまり、お問い合わせ入力画面(form)→確認画面(check)を一つの画面でまかなうわけです。
この場合、  
```  
<input name="name" value="<?php if(isset($name)){ echo $name; } ?>" >  
``  
といったように、初回表示時に未定義変数へのアクセスを抑止する必要があります。  
こうすると、入力値にエラーがあった場合にそのまま入力された値を元のフォームの入力欄に表示でき、またコードも少なくて済みます。
ところが、リダイレクト先ではPOSTされた情報はわからなくなってしまいますね。
GETパラメターで渡す方法もありますが、これは経由するサーバーに情報が残ってしまうのであまりよろしくありません。
そこで、簡単な方法としてはPHPのSESSIONを利用します。
check.phpの最初に、
```
<?php
   session_start();
```
としておくと、接続に対してsession_idが発行され、sessionが利用できるようになります。
sessionが利用できるようになっていますので、$_SESSIONに値をセットします。
```
if(count($errormsg)){
   $_SESSION["posted"] = array(
                            "name" => $name,
                            "phone" => $phone,
                            "mail" => $mail,
                            "message" => $message
                         );
   header('location: send.php');
   exit();
}
```
リダイレクトしたsend.phpの方でこのsessionの値を利用するので、やはりsession_start()で始めます。
```
<?php
   session_start();
   echo $_SESSION["posted"]["name"]. "<br>n";
   print_r($_SESSION["posted"];
```
ご記載頂いたコードのおかしい点やセキュリティなどを考慮するといろいろありますが、
考え方としてはこんな感じで良いのではないでしょうか。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る