ここから本文です

各項目が未入力の際にエラーが出るようにしたいのですがここからどうしたらいいの...

アバター

ID非公開さん

2019/5/712:32:39

各項目が未入力の際にエラーが出るようにしたいのですがここからどうしたらいいのかわかりません。名前が未入力の際、「名前が未入力です」と表示させるにはどうしたらいいのでしょうか?

<?php

//POSTの受け取りは$_POST["input名"];
$name=$_POST["name"];
$mail=$_POST["mail"];
$tell=$_POST["tell"];
$address=$_POST["address"];


if($name== ""){
$err.="名前が未入力です<br>";
}
if($mail== ""){
$err.="Emailが未入力です<br>";
}
if($tell== ""){
$err.="TELが未入力です<br>";
}
if($address== ""){
$err.="住所が未入力です<br>";
}


$file = fopen("data/data.txt","a");
fputs($file,$name.",".$mail.",".$tell.",".$address."\r\n");
fclose($file);

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>POST</title>
</head>
<body>
<p>お名前:<?=$name?></p>
<p>MAIL:<?=$mail?></p>
<p>TELL:<?=$tell?></p>
<p>住所:<?=$address?></p>
</body>





<?php

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>POST</title>
</head>
<body>
<form method="post" action="form_post2.php">
<p>お名前:<input type="text" name="name" size="20" /></p>
<p>MAIL:<input type="text" name="mail" size="20" /></p>
<p>TEL:<input type="text" name="tell" size="20" /></p>
<p>住所:<input type="text" name="address" size="20" /></p>
<p><input type="submit" value="送信" /></p>
</form>
</body>
</html>

閲覧数:
39
回答数:
5
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shi********さん

2019/5/713:16:58

どの位置に表示したいのか(各項目別に表示するのか、まとめて表示するのか)で作り方が違ってくるだろうとは思います。

個別表示ならこんな感じですかねぇ・・・

<?php
$name = isset($_POST['name']) ? $_POST['name'] : '';
$mail = isset($_POST['mail']) ? $_POST['mail'] : '';
$tell = isset($_POST['tell']) ? $_POST['tell'] : '';
$address = isset($_POST['name']) ? $_POST["name"] : '';

$err = [];
if($name === '') { $err['name'] = '<span style="color:red">名前が未入力です</span>'; }
if($mail === '') { $err['mail'] = '<span style="color:red">EMailが未入力です</span>'; }
if($tell === '') { $err['tell'] = '<span style="color:red">TELが未入力です</span>'; }
if($address === '') { $err['address'] = '<span style="color:red">住所が未入力です</span>'; }

if (count($err) === 0) {
// $name, $mail $tel, $address を記録する
$msg = '以上の内容を記録しました';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>POST</title>
</head>
<body>
<p>お名前:<?= isset($err['name']) ? $err['name'] : $name?></p>
<p>MAIL:<?= isset($err['mail']) ? $err['mail'] : $mail?></p>
<p>TELL:<?= isset($err['tell']) ? $err['tell'] : $tell?></p>
<p>住所:<?= isset($err['address']) ? $err['address'] : $address?></p>
<?= isset($msg) ? $msg : "" ?>
</body>

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

qo_********さん

2019/5/912:19:29

・各処理が一続きになっているが、
様々な処理の流れを考慮した作りになっていない。

・form_post2.phpで再読込をすると、
同じデータが追記されるので、完了画面が必要。

・エラーがあると前の画面に戻らないといけなく、
また再入力する必要がある。
エラー表示はフォーム画面に出し、
入力された状態を維持したい。

・エラー表示と関連して、入力値チェックも、
ajaxを使いフォーム画面のまま行えると理想。

・データにIDが振られていないので、
データを参照する際に困る。

私は、捨てても構わないコードだと思うので、
これに手を加えるより、設計からやり直すべきだと思う。

プロフィール画像

カテゴリマスター

leg********さん

2019/5/807:13:53

サンプルを試作してみました。

[form_post1.php] 入力と未入力チェックを行う

<?php
$name="";
$mail="";
$tell="";
$address="";
$err="";
$uri="";

if (isset($_POST['btn_submit'])){
$name=$_POST["name"];
$mail=$_POST["mail"];
$tell=$_POST["tell"];
$address=$_POST["address"];

if($name== ""){
$err.="<li>名前が未入力です</li>";
}
if($mail== ""){
$err.="<li>Emailが未入力です</li>";
}
if($tell== ""){
$err.="<li>TELが未入力です</li>";
}
if($address== ""){
$err.="<li>住所が未入力です</li>";
}

if ($err == ""){
$err = "これでよければ送信してください";
$uri="form_post2.php";
}else{
$err = "<ul style='color:red'>".$err."</ul>";
}

}

echo<<<EOD
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP POST SAMPLE</title>
</head>
<body>
<h3>送信フォーム</h3>

<form action="{$uri}" method="post">
<p>お名前:<input type="text" name="name" value="{$name}"></p>
<p>MAIL:<input type="text" name="mail" value="{$mail}"></p>
<p>TEL:<input type="text" name="tell" value="{$tell}"></p>
<p>住所:<input type="text" name="address" value="{$address}"></p>

<p>{$err}</p>

<p><input type="submit" name="btn_submit" value="送信"></p>
</form>
</body>
</html>
EOD;
?>


[form_post2.php] 受信情報の表示とデータベースに保存を行う

<?php
$name=$_POST["name"];
$mail=$_POST["mail"];
$tell=$_POST["tell"];
$address=$_POST["address"];

$file = fopen("data/data.txt","a");
fputs($file,$name.",".$mail.",".$tell.",".$address."\r\n");
fclose($file);

echo<<<EOD
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP POST SAMPLE</title>
</head>
<body>
<h3>受信インフォメーション</h3>

<p>お名前: {$name}</p>
<p>MAIL: {$mail}</p>
<p>TELL: {$tell}</p>
<p>住所: {$address}</p>

<p>データベースに保存しました。</p>

</body>
</html>
EOD;
?>

どうぞ、おためしになってみてください。

プロフィール画像

カテゴリマスター

ama********さん

2019/5/806:45:19

クライアント側で出来ものは、クライアント側で処理したほうが、サーバーに無駄にアクセスせずにすみます(JavaScriptで可)。

leg********さん

2019/5/712:55:31

未入力項目を表示するなら、[form_post2.php]のどこかに
<?=$err?>
を入れればいいんじゃないかな?

送信前に入力チェックを入れるならJQを使って。
こんなかんじかしら。

[jquery]

$(function(){
$("#send").on('click',function(){
if ($("input[name='name']").val() == '') {
ERR.="名前がありません\r\n":
}

if ($("input[name='mail']").val() == '') {
ERR.="メールアドレスがありません\r\n":
}

if ($("input[name='tell']").val() == '') {
ERR.="電話番号がありません\r\n":
}

if ($("input[name='address']").val() == '') {
ERR.="住所がありません\r\n":
}

if (ERR == '') {
$("#form").submit();
} else {
alert(ERR);
return false;
}
});
});


[html]

<html>
<head>
<meta charset="utf-8">
<title>POST</title>
</head>
<body>
<form id="form" method="post" action="form_post2.php">
<p>お名前:<input type="text" name="name" size="20" /></p>
<p>MAIL:<input type="text" name="mail" size="20" /></p>
<p>TEL:<input type="text" name="tell" size="20" /></p>
<p>住所:<input type="text" name="address" size="20" /></p>
<p><button id="send" type="button">送信</button></p>
</form>
</body>
</html>

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる