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

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

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

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

Q&A

解決済

2回答

905閲覧

issetで確認しないと、PHP Noticeが出てしまうので条件に加えました。でも、長ったらしいIF文になるので、関数を使って簡略なコードにしたい。

haln

総合スコア13

PHP

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

0グッド

0クリップ

投稿2019/05/13 15:26

編集2019/05/13 15:32

#前提
issetで確認しないと、PHP Noticeが出てしまうので条件に加えました。でも、長ったらしいIF文になるので、関数を使って簡略なコードにしたいです。
こちら、MySQLとPHPの2週間程度の知識しか持ち合わせていません。
まだ、開発を一度も完成させたことがありません。

#修正したいコード

if(isset($_POST['hoge']) ? $_POST['hoge'] : NULL or isset($_POST['piyo']) ? $_POST['piyo'] : NULL) { updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); }

#執筆者の考え(実現したいこと)
IF文の中に関数を入れてやればよいと考えました。

function foo($str) { $a = isset($str) ? $str : NULL; return $a; } if( foo($_POST['hoge']) or foo($_POST['piyo']) ) { updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); }

出力結果
Notice: Undefined index: hoge in C:+++++++++++++++++++++++++++.php on line 6
Notice: Undefined index: hoge in C:+++++++++++++++++++++++++++.php on line 6

#試したこと
①関数が読み込まれてない可能性を疑い、関数名を変更してみました。
同じエラーが出力されたら、関数の置き方が違うかもしれない。
→エラー文が異なっていたので、関数の置き方は正しいと判断しました。

function bar($str) { $a = isset($str) ? $str : NULL; return $a; } if( foo($_POST['hoge']) or foo($_POST['piyo']) ) { updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); }

出力結果
Fatal error: Uncaught Error: Call to undefined function foo() in C:+++++++++++++++++++++++++++.php:6 Stack trace: #0 {main} thrown in C:+++++++++++++++++++++++++++.php:6 on line 6


②IF文の中に関数を入れるのが不適切だと考え、外に出しました。

function foo($str) { $a = isset($str) ? $str : NULL; return $a; } $a = foo($_POST['hoge']); $b = foo($_POST['piyo']); if( $a or $b ){ updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); }

出力結果
Notice: Undefined index: hoge in C:+++++++++++++++++++++++++++.php on line 1
Notice: Undefined index: piyo in C:+++++++++++++++++++++++++++.php on line 2

#補足情報
・開発環境

nameversion
EclipseVersion 2019-03 (4.11)
A5M2SQL Mk-2 Version:1.14.1(x64 edition)
XAMPPWindows 7.3.4
PHPPHP 7.3.4
ApacheApache/2.4.39 (Win64)

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

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

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

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

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

guest

回答2

0

ベストアンサー

変数が存在しない場合の警告を回避出来るのは empty() isset() といったものがあります。

$_POST['hoge']などに何かしら値がある場合、を判定するのであれば、下記で良いと思います。

PHP

1if(! empty($_POST['hoge']) or ! empty($_POST['piyo'])) { 2 updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); 3}

あるいは、 filter_input() を使っても良さそうです。

PHP

1$hoge = filter_input(INPUT_POST, 'hoge'); 2$piyo = filter_input(INPUT_POST, 'piyo'); 3if($hoge or $piyo){ 4 updated_spamham_info($_POST['id'], $hoge, $piyo); 5}

追記

最初に回答した際、下記の様に記載しておりました。

PHP

1if(isset($_POST['hoge']) or isset($_POST['piyo'])) { 2 updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); 3}

これはこれで同じような動作になるのですが、
$_POST['hoge']$_POST['piyo'] 両方に空文字列('') が入った場合、
trueと判定され、結果として関数が実行されます。 (isset関数はnull以外はtrueを返すため)
これは元のロジックと異なる動作となるので、! empty を利用した書き方に修正させていただきました。

投稿2019/05/13 15:45

編集2019/05/14 11:25
Eggpan

総合スコア2727

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

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

haln

2019/05/13 17:09 編集

Eggpan様、回答ありがとうございます。 一つ目のPHPを見て、ふと思ったのですが……。 ◆修正したいコード $_POST['hoge'] = 'ほげ'; $_POST['piyo'] = 'ぴよ';が入ってるとします。 if(isset('ほげ') ? 'ほげ' : NULL or isset('ぴよ') ? $_POST['ぴよ'] : NULL) { updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); } if('ほげ' or 'ぴよ') { updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); } if(1) { updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); } というようにに実行されると思うので……参考演算子が要らないですね。 ◆当問題の解決策 if(isset($_POST['hoge']) or isset($_POST['piyo'])) { updated_spamham_info($_POST['id'], $_POST['hoge'], $_POST['piyo']); } https://qiita.com/shinichi-takii/items/00aed26f96cf6bb3fe62 ※上記のサイトで、isset以外にも、値があるかどうかの判定があるのを確認し、動き的にはissetがよいので、この形としました。 何とも言いがたい誤りに気づけました。 この程度のIF文の長さならば、当問題の長文を解消できそうです。 感謝致します。
haln

2019/05/13 16:58 編集

http://web-engine.hatenadiary.com/entry/20160521/1463823327 こちらのサイトを確認しますと、二つ目のPHPのようにするのが一番スマートな気がしてきました。 後は自分で考え、どちらが好ましいか考えていこうと思います。回答感謝致します。
Eggpan

2019/05/14 00:54

元コードが空文字列だとfalse判定なので、初めに書いたものが同様の動作になりそうですね。 2つのパターン回答をだしておきながら動作が変わっている、というのは適切ではないので、 後ほど3パターンとも併記するように修正させていただきたいとおもいます。 私自身が間違えました通り、フォームの空文字列の判定は混乱しがちな部分です…。
haln

2019/05/15 11:26 編集

修正、感謝いたします……。改めて拝読します。
guest

0

画面の造りが分からないので概念的な表記になりますが…

if (submitされたか?) { // $_POST の入力チェック // $_POST を使った処理 }

のようにすれば、そんなに長ったらしくはならないと思います。

投稿2019/05/13 16:43

takasima20

総合スコア7458

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

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

haln

2019/05/13 17:08

takasima20様、回答ありがとうございます。 次は分かりやすい質問をあげれるように努めます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問