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

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

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

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

Q&A

解決済

2回答

1150閲覧

PHP E_NOTICE対処方法

piyoon

総合スコア68

PHP

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

0グッド

0クリップ

投稿2016/02/16 23:36

phpでsessionページをincludeするとsessyon_start()が2回呼ばれてE_NOTICEがでてしまい、出さない対処法として以下の2つしか思いつかないのですが、後者のエラー無視は避けて前者で書くべきなのでしょうか?

php

1if(!isset($_SESSION)) session_start();

php

1@session_start();

状況としては検索フォームページから検索ページを呼び出し、結果を求めてその値を持ったまま元の検索フォームページをincludeするという感じです。

以下の場合もたとえ値が入っていなくてもintvalで0に変換されるのだからそのままのほうが見やすいと思うのですが、E_NOTICEを潰すためには後者の書き方しか思いつかず、なんか気持ち悪いのです。

php

1$x = intval($_POST['count']);

php

1$x = 0; 2if(isset($_POST['count'])){ 3 $x = intval($_POST['count']); 4}

もっとスマートな書き方があったりしないでしょうか?
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

@でエラーを止めるのも、「何をしているのかわかった上で」使うなら有効な手段です。たとえば、file_get_contentsに失敗した場合にもE_WARNINGを投げますが、これを避ける方法は@しかありません。

なお、後者のissetチェックですが、PHP 7以降では??という演算子が用意されています。

php

1//$_POST['count']がなくても何も起きない 2$x = intval($_POST['count'] ?? 0);

投稿2016/02/17 00:02

maisumakun

総合スコア145184

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

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

piyoon

2016/02/17 01:51

使用しているphpバージョンを書くべきでした。 現在5.6を使用しているのでShunsukeIzuiさんをベストアンサーにしました。 7を使うときには思い出して使おうと思います。 ありがとうございました。
guest

0

ベストアンサー

私なら次のようにするかと思います。

PHP

1$x = intval(filter_input(INPUT_POST, 'count'));

セッションのエラーに関しては後者でも特に問題はないかと思っています。

投稿2016/02/16 23:58

編集2016/02/16 23:59
orange0190

総合スコア1698

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

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

piyoon

2016/02/17 01:48

@使ってもいいんですね。 いろいろなサイトを回っていると@はバグの温床(これは自分も納得です)として基本NGスタンスの意見が多く見られたのですが、代わりになる書き方を見ることがなかったため悩んでしまいました。 ありがとうございました。
piyoon

2016/02/17 01:52

解決にはしたのですが、$_POST等ではなく普通の配列の場合issetでチェックするしか無いでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問