#Noticeエラー、IF文
form1.phpを以下のように編集する
<?php
echo "<pre>";
var_dump($_POST);
echo"</pre>";
$errors = array();
$name = $_POST['name'];
$email = $_POST['email'];
$subjct = $_POST['subject'];
$body = $_POST['body'];
if($name ===""){
$errors['name'] = "お名前が入力されていません";
}
if($email ===""){
$errors['email'] = "メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body'] = "お問い合わせ内容が入力されていません。";
}
echo"<pre>";
var_dump($errors);
echo"</pre>";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
</body>
</html>
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
すると以下のようなエラーメッセージが表示される。
・エラーの原因
値がセットされていない連想配列のキーを参照するとNoticeエラーがでます。最初にWebブラウザに表示された時点では、$_POSTはキーがないからの連想配列です
$_name = $_POST['name'];でこの段階ではまだ存在していないキーの値を参照して、$name変数に代入しようとしているのでNoticeエラーとなる
他の参照コードも同様で4つのNoticeエラーが表示される
#エラーの修正
1.「form1.php」を以下のようにコードを修正する
<?php
echo "<pre>";
var_dump($_POST);
echo"</pre>";
if(isset($_POST['submit'])){
$errors = array();
$name = $_POST['name'];
$email = $_POST['email'];
$subjct = $_POST['subject'];
$body = $_POST['body'];
if($name ===""){
$errors['name'] = "お名前が入力されていません";
}
if($email ===""){
$errors['email'] = "メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body'] = "お問い合わせ内容が入力されていません。";
}
}
echo"<pre>";
var_dump($errors);
echo"</pre>";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
</body>
</html>
今度はNoticeエラーは表示されません理由は
if(isset($_POST['submit'])){でisset関数を呼び出しています。ただ呼び出すだけではなく、$_POST['submit']のデータを関数に渡している
isset関数は、変数や連想配列がセットされており、値がNULLではないかを確認するので、if(isset($_POST['submit'])){で$_POSTのキーは存在しないのでfalseという値を返します。そのためif文のブロックの内側の処理はおこなわれません。
#空欄チェック
from1.phpを以下のように編集する
<?php
$errors = array();
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$subjct = $_POST['subject'];
$body = $_POST['body'];
if($name ===""){
$errors['name']="お名前が入力されていません。";
}
if($email ===""){
$errors['email'] ="メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body']="お問い合わせ内容が入力されていません";
}
}
echo"<pre>";
var_dump($errors);
echo"</pre>";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
<form action="form1.php" method="post">
<table>
<tr>
<th>お名前</th><td><input type="text" name="name"></td>
</tr>
<tr>
<th>メールアドレス</th><td><input type="text" name="email"></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td>
<select name="subject">
<option value="お仕事に関するお問い合わせ">お仕事に関するお問い合わせ</option>
<option value="その他のお問い合わせ">その他のお問い合わせ</option>
</select></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><textarea name="body" cols="40" rows="10"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="確認画面へ"></td>
</tr>
</table>
</form>
</body>
</html>
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスしその後確認ボタンを押下し以下の3つのフォームのデータが表示される
#連想配列のエラーメッセージを表示
foreaachで、連想配列のエラーメッセージを表示
form1.phpを以下のように編集する
<?php
$errors = array();
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$subjct = $_POST['subject'];
$body = $_POST['body'];
if($name ===""){
$errors['name']="お名前が入力されていません。";
}
if($email ===""){
$errors['email'] ="メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body']="お問い合わせ内容が入力されていません";
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
<?php
echo"<ul>";
foreach($errors as $value){
echo"<li>";
echo $value;
echo "</li>";
}
echo"</ul>";
?>
<form action="form1.php" method="post">
<table>
<tr>
<th>お名前</th><td><input type="text" name="name"></td>
</tr>
<tr>
<th>メールアドレス</th><td><input type="text" name="email"></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td>
<select name="subject">
<option value="お仕事に関するお問い合わせ">お仕事に関するお問い合わせ</option>
<option value="その他のお問い合わせ">その他のお問い合わせ</option>
</select></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><textarea name="body" cols="40" rows="10"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="確認画面へ"></td>
</tr>
</table>
</form>
</body>
</html>
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスしその後確認ボタンを押下しエラーメッセージのHTMLが出力される。
#入力値の保持
form1.phpを以下のように編集する
<?php
$errors = array();
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$body = $_POST['body'];
$name = htmlspecialchars($name,ENT_QUOTES);
$email = htmlspecialchars($email,ENT_QUOTES);
$subject = htmlspecialchars($subject,ENT_QUOTES);
$body = htmlspecialchars($body,ENT_QUOTES);
if($name ===""){
$errors['name']="お名前が入力されていません。";
}
if($email ===""){
$errors['email'] ="メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body']="お問い合わせ内容が入力されていません";
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
<?php
echo"<ul>";
foreach($errors as $value){
echo"<li>";
echo $value;
echo "</li>";
}
echo"</ul>";
?>
<form action="form1.php" method="post">
<table>
<tr>
<th>お名前</th><td><input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"></td>
</tr>
<tr>
<th>メールアドレス</th><td><input type="text" name="email" value="<?php if(isset($email)){echo $email;}?>"></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td>
<select name="subject">
<option value="お仕事に関するお問い合わせ">お仕事に関するお問い合わせ</option>
<option value="その他のお問い合わせ">その他のお問い合わせ</option>
</select></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><textarea name="body" cols="40" rows="10"><?php if(isset($body)){echo $body;}?></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="確認画面へ"></td>
</tr>
</table>
</form>
</body>
</html>
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスしその後どれでもいいので値を入力後確認ボタンを押下後入力した値が保持されていることを確認する。
#以上