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

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

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

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

Q&A

解決済

3回答

1041閲覧

参考サイトの条件分岐の意味がわからない

hatao

総合スコア8

PHP

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

0グッド

0クリップ

投稿2018/09/03 12:24

設定時刻を過ぎたら表示コンテンツが切り替わる機能を実装したいので参考サイトを見つけたのですが
とある条件分岐について必要なのか必要でないのかがわからず気になって仕方がなく悩んでいます。

質問

if ($_GET[nt] != "") { $now_time = $_GET[nt]; }else{ $now_time = date('YmdHi'); } if ($_GET[ct] != "") { $change_time = $_GET[ct]; }else{ $change_time = "201809032027"; }

上記の条件分岐なのですが「$_GET[nt]」「$_GET[ct]」で条件分岐する必要があるのでしょうか?
下記のように書いてはいけないのでしょうか?

$now_time = date('YmdHi'); $change_time = "201809032027";

参考サイトではわざわざ条件分岐しているという事は必要なのだと思うのですが理由がわかりません
教えて頂けると幸いです。

以下に参考のソースコードを乗せてます

ソースコード

PHP

1<?php 2//data関数だけだと9時間のズレが生じる場合があるので 3date_default_timezone_set('Asia/Tokyo'); 4//現在時間を取得 5if ($_GET[nt] != "") { 6 $now_time = $_GET[nt]; 7}else{ 8 $now_time = date('YmdHi'); 9} 10//タイマー設定 11if ($_GET[ct] != "") { 12 $change_time = $_GET[ct]; 13}else{ 14 $change_time = "201809032027"; 15} 16//echo "now_time:" . $now_time . "<br />"; 17//echo "change_time:" . $change_time . "<br />"; 18 ?> 19 20<?php 21if ($now_time <= $change_time) { 22//タイマー時刻を過ぎる前 23 ?> 24 25 ここに今表示してるものを入れる。 26 27<?php } else { 28//タイマー時刻を過ぎた後 29 ?> 30 31 ここにタイマー時間を過ぎてか表示するものを入れる。 32 33<?php } ?> 34

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

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

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

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

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

m.ts10806

2018/09/03 12:33

ntとctがいったい何者なのか提示内容だけではわかりませんので答えようがないです。参考のサイトを提示するか、ご自身で説明文を書かれるかどちらかで質問文に追記してください。
退会済みユーザー

退会済みユーザー

2018/09/03 13:14

このページの更新日時、2017年11月30日 16:12:46と新しそうに見えて、書いてある内容がややヘボいな。
guest

回答3

0

設定時刻を過ぎたら表示コンテンツが切り替わる機能を実装したいので参考サイトを見つけたのですが

とある条件分岐について必要なのか必要でないのかがわからず気になって仕方がなく悩んでいます。

参考サイトは見てないですけど、以下のとおり、この短いコードの中に突っ込みどころが。。。
・そもそも配列の添字が変
・なぜか日付の比較を文字列で比較している
・クライアント側で作成された時刻(?)を使用しようとしている
・比較が緩やか
・入力値の検証が行われていない

要件実現のためには、普通にサーバ内の現在時刻と表示変更時刻を比較するだけで良いです。
php では日付をオブジェクトとして比較できるので、
php.net 例2 DateTime オブジェクトの比較 あたりを参考にしてください。

投稿2018/09/03 13:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

maisumakun

2018/09/03 13:34

文書内で例として挙げられたURLの表記を見る限り、元のコードは2012年頃に書かれたもののようです。PHPであることを考えれば、古すぎますね。
退会済みユーザー

退会済みユーザー

2018/09/03 13:38

そんな古いコードだったんですね。 困ったことだ^^;
guest

0

ベストアンサー

下記のように書いてはいけないのでしょうか?

はい、全く動作が違います。ifの中の条件が成立する場合、elseの中は実行されません

投稿2018/09/03 12:32

maisumakun

総合スコア145183

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

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

maisumakun

2018/09/03 12:36

なお、本題ではありませんが、「$_GET[nt]」での「nt」のように、定義せずに定数扱いとして使う用法は、PHP 7.2以上ではE_WARNINGとなり、次のメジャーバージョンでは例外を投げるようになる、とのことです。
hatao

2018/09/03 12:43

回答ありがとうございます。 「定義せずに定数扱いとして使う用法」がよくないとの事ですが、そうなると今回の件はどのように書き直すのが良いのでしょうか
maisumakun

2018/09/03 12:48

$_GET['nt']のように文字列であることを明示します。
hatao

2018/09/03 12:56

文字列にすると先ほど仰っていただいた「定義せずに定数扱いとして使う用法」を回避できるということですね ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/09/03 13:33

なんか会話がずれてる気がします。 そもそも提示されたコードがおかしすぎるので、質問がぶれまくりですけど。
guest

0

「書いてはいけない」ということではありません。

書き方によっては 事前にテストができる ということです。

date('YmdHi') はサーバの時刻を取得します。
例えば、今、2018年10月31日00:00になったら "HAPPY HALLOWEEN!"という表示をしたいとしましょう。
date('YmdHi')が2018/10/31 00:00になるのは、サーバが実際にその時刻になってからです。これではその時刻になるまで挙動を確認することができませんね?

そこで、URLに ~?nt=201810310000 のようにクエリ文字列をつけてテストをする、という訳です。

投稿2018/09/03 13:16

takepan1973

総合スコア821

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

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

退会済みユーザー

退会済みユーザー

2018/09/03 13:34

get が空だと、notice 出るコードだから、そんな意図は無い気がします。
takepan1973

2018/09/03 13:46

noticeが出るとは限らないと思うんですけどね…… E_ALL & ~E_NOTICE で出なくなりますよ。(良いことかどうかは別にして)
退会済みユーザー

退会済みユーザー

2018/09/03 13:52 編集

まぁ、本番環境では出ないでしょうね。。。 理解されている通り、【本質的に】notice の出るコード使わないでしょ。って意味でコメントしました。 まぁ、それ以外にも問題箇所が多すぎるので、些事ですね^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問