質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

844閲覧

PHPにて年月日制限

ryusan_012

総合スコア59

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/05/31 01:42

編集2018/05/31 03:06

PHPだけで入力制限をしようと思います。
前の画面でにゅうりょくしたNO、氏名、所属、生年月日を入力してこの画面で入力内容を確認します。
確認画面では入力された内容がエラーではないかを表示するんですが、下のコードではなぜか生年月日に存在する日付を入力してもtrueの値しか返ってきません。
正しい日付だとelseの処理が動いてほしいです。
特にエラーもでてませんし、URLで値も取れてきていることが確認できています。
条件とかがまちがっているのでしょうか?

regi_re.phpは登録するためのファイル、register.phpは入力するためのファイルです。
register.php→rei_ch.php→regi_re.phpの順番で処理が動きます。

php

1<!DOCTYPE html> 2<html lang="ja"> 3 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>register_check</title> 7 </head> 8 9 <body> 10 <h2>登録情報確認</h2> 11 12 <?php 13 try{ 14 $n_number=$_GET['n_number']; 15 $n_name=htmlspecialchars($_GET['n_name'], ENT_QUOTES,'UTF-8'); 16 $n_class=htmlspecialchars($_GET['n_class'], ENT_QUOTES,'UTF-8'); 17 //$n_birth=$_GET['n_birth']; 18 $year=$_GET['year']; 19 $month=$_GET['month']; 20 $day=$_GET['day']; 21 22 //PDO生成 23 $dbh=new PDO('mysql:dbname=staff_manager;host=localhost;charset=utf8', 'uesr', 'passward'); 24 $stmt=$dbh->prepare("select count(*) from staff_master where ID = :s_number"); 25 $stmt->bindValue(':s_number', $n_number, PDO::PARAM_INT); 26 $stmt->execute(); 27 $count=$stmt->fetchColumn(); 28 29 //入力チェック 30 if (empty($n_number) || empty($n_name) || empty($n_class) || empty($year) || empty($month) || empty($day)) { 31 echo "<p>未入力項目があります。</p>"; 32 }elseif ((trim($n_number) == false) || (trim($n_name) == false) || (trim($n_class) == false)) { 33 echo "<p>空白が入力されています。</p>"; 34 }elseif ($count!=0) { 35 echo "<p>社員NOが重複しています。</p>"; 36 }elseif(checkdate($month,$day,$year)){ 37 echo "<p>指定した日付は無効です。</p>"; 38 }else { 39 //登録情報確認 40 echo '<form method="get" action="regi_re.php">'; 41 echo '<table>'; 42 echo '<tr><td>社員NO</td><td>:'.$n_number.'</td></tr>'; 43 echo '<tr><td>氏名</td><td>:'.$n_name.'</td></tr>'; 44 echo '<tr><td>所属</td><td>:'.$n_class.'</td></tr>'; 45 echo '<tr><td>生年月日</td><td>:'.$year.'年'.$month.'月'.$day.'日</td></tr>'; 46 echo '</table>'; 47 echo '<input type="submit" value="登録" />'; 48 49 echo "<input type='hidden' name='s_number' value='$n_number' />"; 50 echo "<input type='hidden' name='s_name' value='$n_name' />"; 51 echo "<input type='hidden' name='s_class' value='$n_class' />"; 52 echo "<input type='hidden' name='s_year' value='$year' />"; 53 echo "<input type='hidden' name='s_month' value='$month' />"; 54 echo "<input type='hidden' name='s_day' value='$day' />"; 55 echo '</form>'; 56 } 57 }catch(PDOException $e){ 58 echo "登録に失敗しました。"; 59 echo "エラー", $e->getMessage(); 60 } 61 62 $dbh = null; 63 ?> 64 65 <input type="submit" onClick="location.href='register.php'" value="キャンセル" /> 66 </body> 67 68</html> 69

register.php

<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>register</title> </head> <body> <h2>新規登録</h2> <form action="regi_ch.php" method="get" style="display: inline"> <table> <tr><td>社員NO</td><td><input type="number" name="n_number" value="" /></td></tr> <tr><td>氏名</td><td><input type="text" name="n_name" value="" /></td></tr> <tr><td>所属</td><td><input type="text" name="n_class" value="" /></td></tr> <tr><td>生年月日</td><td> <?php // 年のプルダウン echo "<select name='year'>"; for ($y=1900;$y<date(Y)+1;$y++) { echo "<option value=" . $y . " >" . $y . "</option>\n"; } echo "</select>年"; // 月のプルダウン $a=array("1", "2", "3", "4", "5", "6","7", "8", "9", "10", "11", "12"); echo "<select name='month'>"; foreach ($a as $key => $value) { $b=$key + 1; echo "<option value=" . $b . " >" . $b . "</option>\n"; } echo "</select>月"; //日のプルダウン echo "<select name='day'>"; for ($m=1; $m<=31 ; $m++) { echo "<option value=" . $m . " >" . $m . "</OPTION>\n"; } echo "</select>日"; ?> </td></tr> </table> <input type="submit" value="確認" /> <input type="button" onClick="location.href='master.php'" value="キャンセル" /> </form> </body> </html>

regi_re.php

<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>register_resulte</title> </head> <body> <h2>登録結果表示</h2> <?php try{ $pdo=new PDO('mysql:dbname=staff_manager;host=localhost;charset=utf8', 'uesr', 'passward'); $n_number=$_GET["s_number"]; $n_name=$_GET["s_name"]; $n_class=$_GET["s_class"]; $n_birth=$_GET["s_year"].sprintf( '%02d', $_GET["s_month"]).sprintf( '%02d', $_GET["s_day"]); echo $n_birth; if($pdo==null){ echo "データベースの接続に失敗しました。"; }else{ $stmt=$pdo->prepare("insert into staff_master (ID,name,class,birth,delete_flag) value (:s_number,:s_name,:s_class,:s_birth,0)"); $stmt->bindValue(':s_number', $n_number, PDO::PARAM_INT); $stmt->bindParam(':s_class', $n_class, PDO::PARAM_STR); $stmt->bindParam(':s_name', $n_name, PDO::PARAM_STR); $stmt->bindParam(':s_birth', $n_birth, PDO::PARAM_STR); $stmt->execute(); echo ("登録が完了しました。"); } }catch(PDOException $e){ echo "登録に失敗しました。"; echo $e->getMessage(); } $pdo=null; ?> <a href="master.php">戻る</a> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/31 02:10

regi_re.php , register.php はそれぞれどのような関係性でしょうか。提示コードのファイル名は?
ryusan_012

2018/05/31 02:14

あすいませんregi_re.phpは登録するためのファイル、register.phpは入力するためのファイルです。 現在のページはregi_ch.phpです。 register.php→rei_ch.php→regi_re.phpの順番で処理が動きます
m.ts10806

2018/05/31 02:22

その旨、質問に追記してください。提示コードのファイル名 あとできればその他のファイルも提示可能な範囲で結構ですので追記してください。
退会済みユーザー

退会済みユーザー

2018/05/31 03:02

志村ぁ、DBパスワード、DBパスワード!
ryusan_012

2018/05/31 08:08 編集

ありがとうございます、忘れてました!
guest

回答2

0

既に回答があるので補足(ほぼ答え)となってしまいますが、
「日付が正しくないときにエラー」とするならこう。

php

1}elseif(!checkdate($month,$day,$year)){ 2 echo "<p>指定した日付は無効です。</p>"; 3}else {

!とすることで実行結果がfalse(つまり日付として正しくない状態)を判定できます。

投稿2018/05/31 02:25

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

質問のタグ間違ってますので、他の方の為にも直してくださいね^^

✕ phpMyAdmin → 〇 php


なぜか生年月日に入力してもtrueの値しか返ってきません

は、
【どのような値を入れた】時に、【どのような返り値】を期待されているのかが不明ですが

checkdate は日付の妥当性を判断するものです。

日付として正しければtrue、おかしければfalseが返って来ます。

なので、

php

1if(checkdate($month,$day,$year)){ 2 echo "<p>指定した日付は無効です。</p>"; 3}else{///以下略

は、
日付が正しい場合に、エラーメッセージが表示され、
日付がおかしい場合に、elseの処理に入ってしまいます。

リファレンスも確認してみてください。
php: checkdate

投稿2018/05/31 02:04

mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryusan_012

2018/06/01 00:04

そもそも私が勘違いしてたんですね、解説ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問