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

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

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

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

Q&A

解決済

2回答

412閲覧

php出力時にデータが重複する問題について

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2017/08/12 02:36

参照元ファイルのデータを出力したいと思っています。
ところが。
下記のファイル構成では、出力結果がこうなってしまうのです。

【出力結果】
一部表示するときだけのやつその1
一部表示するときだけのやつその1
一部表示するときだけのやつその2

上のような「一部表示するときだけのやつその1」の重複をなくしたいのですが、下記のファイル構成では何がいけないか…ご指摘頂けませんでしょうか?

【参照元ファイル】

php

1<?php if ($class_zenbu == 'zenbu'): ?> 2<span class="zenbu"> 3全部表示するときだけのやつその1 4</span> 5<?php endif; ?> 6 7<?php if ($class_ichibu1 == 'ichibu1'): ?> 8<span class="ichibu"> 9一部表示するときだけのやつその1 10</span> 11<?php endif; ?> 12 13<?php if ($class_zenbu == 'zenbu'): ?> 14<span class="zenbu"> 15全部表示するときだけのやつその2 16</span> 17<?php endif; ?> 18 19<?php if ($class_ichibu2 == 'ichibu2'): ?> 20<span class="ichibu"> 21一部表示するときだけのやつその2 22</span> 23<?php endif; ?> 24 25<?php if ($class_zenbu == 'zenbu'): ?> 26<span class="zenbu"> 27全部表示するときだけのやつその3 28</span> 29<?php endif; ?>

【出力ファイル】

php

1<?php 2$class_ichibu1 = 'ichibu1'; 3include('nakami.php'); 4?> 5 6<?php 7$class_ichibu2 = 'ichibu2'; 8include('nakami.php'); 9?>

よろしくお願い致します。<(_ _)>

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

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

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

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

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

guest

回答2

0

同じPHPスクリプト: nakami.php を2回インクルード(=2回実行)してるんですから、2回出力されるのは当たり前だと思うのですが・・・?

シチュエーションがわからないのですが、1回だけ include するのはだめなんでしょうか?

php

1$class_ichibu1 = 'ichibu1'; 2$class_ichibu2 = 'ichibu2'; 3include('nakami.php');

またいただいたコードをを実行すると大量の Notice エラーが出ています。開発環境では php.ini を編集して必ずエラーをすべて表示する設定にしましょう。

PHPエラー出力レベルを php.iniに設定する - Qiita

もしくはPHPコード内で error_reporting() を実行し、一時的にエラーを表示させることも可能です。

php

1<?php 2error_reporting(-1); 3$class_ichibu1 = 'ichibu1'; 4$class_ichibu2 = 'ichibu2'; 5include('nakami.php');

投稿2017/08/12 02:48

miyahan

総合スコア3095

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

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

退会済みユーザー

退会済みユーザー

2017/08/12 02:54

ありがとうございます。 >1回だけ include するのはだめなんでしょうか? 実は出力ファイルにはすでにテーブルがあり、そのtdの中にたまに「一部表示するときだけのやつその1」などを表示したいのです。なので、1回にまとめることができなそうでして。。 >2回出力されるのは当たり前 そうなのですね。笑 初期化という処理が必要だと別の方からご教示いただいたので、今そのやり方を調べています。 >大量の Notice エラー おお、なんということでしょう。。 これは初期化とやらをすれば解決できるのでしょうか? ま、なんにせよ、初期化というのにチャレンジしてみますね(^_-)-☆
退会済みユーザー

退会済みユーザー

2017/08/12 03:04

下記のように【出力ファイル(初期化版)】によって質問は解決できました!! ところで、ご提示のエラー出力がされないようなのですが、どちらを見ればいいのでしょうか? 開発ツールを見てもわかりませんでした。 尚、Qiitaの方は難しくてやっておりません。 【出力ファイル(初期化版)】 <?php error_reporting(-1); $class_ichibu1 = 'ichibu1'; include('nakami.php'); $class_ichibu1 = array(); ?> <?php error_reporting(-1); $class_ichibu2 = 'ichibu2'; include('nakami.php'); $class_ichibu2 = array(); ?>
miyahan

2017/08/12 03:16

> tdの中にたまに「一部表示するときだけのやつその1」などを表示したい なるほど。そういうときは、やりたいことそのもの(例:条件に応じてメッセージを表示させる処理を共通化したい)を書いて質問したほうが「こうした方がいいんじゃない?」という回答がつきやすいと思います。 > これは初期化とやらをすれば解決できるのでしょうか? はい。変数は必ず初期化(宣言)するようにしてください。常時 notice エラーが出ないように作っておけば、もしスペルミス等をしてしまったときにエラーが出てバグにいち早く気づくことが出来ます。 > ご提示のエラー出力がされない "PHP Notice: Undefined variable: class_zenbu " みたいなエラーが表示されませんか??
退会済みユーザー

退会済みユーザー

2017/08/12 03:26

仰るとおりですね。素人が下手にポイントを切り取って質問しちゃダメですね。笑 スペルミスに気づけるのは心強いです!いつもそれで数時間経っています。変数の初期化とともに覚えておきます。ありがとうございます。 エラーはやはり表示されないようですね。出力されたHTMLと、開発ツールのコンソールとを見てみましたが、Noticeという文字は検索できませんでした。(・・? まぁ、そういうこともあります、、かね。笑
miyahan

2017/08/12 03:35

じゃあもう一行追加してみてくれますか? error_reporting(-1); ini_set("display_errors", 1); ただこれを全部のPHPファイルに書くのは大変ですし、本番環境ではOFFにする必要がある(エラーが他人に見えてしまうといろいろとマズい)ので、できれば php.ini を編集する方法を検討してみてください。
退会済みユーザー

退会済みユーザー

2017/08/12 03:42

むう、特に変わった様子はないですね?不思議です。 念のためぜんぶ書いておきます。 ■参照元ファイル(初期化版) <?php if ($class_zenbu == 'zenbu'): ?> <span class="zenbu"> 全部表示するときだけのやつその1 </span> <?php endif; ?> <?php if ($class_ichibu1 == 'ichibu1'): ?> <span class="ichibu"> 一部表示するときだけのやつその1 </span> <?php $class_ichibu1=''; ?> <?php endif; ?> <?php if ($class_zenbu == 'zenbu'): ?> <span class="zenbu"> 全部表示するときだけのやつその2 </span> <?php endif; ?> <?php if ($class_ichibu2 == 'ichibu2'): ?> <span class="ichibu"> 一部表示するときだけのやつその2 </span> <?php $class_ichibu2=''; ?> <?php endif; ?> <?php if ($class_zenbu == 'zenbu'): ?> <span class="zenbu"> 全部表示するときだけのやつその3 </span> <?php endif; ?> ■出力ファイル(エラー版) <?php error_reporting(-1); ini_set("display_errors", 1); $class_ichibu1 = 'ichibu1'; include('nakami.php'); ?> <?php error_reporting(-1); ini_set("display_errors", 1); $class_ichibu2 = 'ichibu2'; include('nakami.php'); ?>
退会済みユーザー

退会済みユーザー

2017/08/12 03:56 編集

ちなみにwordpressです。まぁなんとかなったので、あまりお気になさらずです☆たびたびのご返信、ありがとうございます! 今回は直接的な解決に結びついた「初期化せよ」とご指摘頂いたmotuoさんをベストアンサーにさせて頂きます。(いろいろ改善案くださったのにスミマセン!)
guest

0

ベストアンサー

$class_ichibu1に'ichibu1'という値が入ったまま、

PHP

1<?php 2$class_ichibu2 = 'ichibu2'; 3include('nakami.php'); 4?>

が呼ばれているのが原因です。

例えば、nakami.phpの最後の処理で変数内を初期化するなどの対応をしましょう。

投稿2017/08/12 02:44

motuo

総合スコア3027

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

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

退会済みユーザー

退会済みユーザー

2017/08/12 02:54

ありがとうございます。チャレンジしてみます♪
退会済みユーザー

退会済みユーザー

2017/08/12 03:01

できました♪♪ こうですね! <?php $class_ichibu1 = 'ichibu1'; include('nakami.php'); $class_ichibu1 = array(); ?> <?php $class_ichibu2 = 'ichibu2'; include('nakami.php'); $class_ichibu2 = array(); ?> 初期化、おぼえておきます。<(_ _)>
motuo

2017/08/12 03:11

悪くはないのですが…$class_ichibu1がStringに見えるので$class_ichibu1=''が良いのでは? 個人的にはnakama.phpでまとめて後処理した方が、あちこちにロジックが分散しないので良いと思います。 あと、miyahanさんが指摘している通り、このままでは$class_zenbuが定義されていない場合(いきなりifで)、 Undefined variableとしてNoticeが出ます。 そもそも、この作りが良いのかどうかは分かりませんが、issetを使うなどしてその値が存在しているかどうかnakama.php側でチェックした方が良いかもしれません。
退会済みユーザー

退会済みユーザー

2017/08/12 03:34

おお、そうなのですね!ありがとうございます。 どれどれ… …なるほど。nakami.phpでこのように↓書いても、重複は起きませんでした。こちらにまとめておくようにします。 <?php if ($class_ichibu1 == 'ichibu1'): ?> <span class="ichibu"> 一部表示するときだけのやつその1 </span> <?php $class_ichibu1=''; ?> <?php endif; ?> あれま。ifってこういう使い方じゃないのですね。うーん(*´Д`) 調べてみます!
motuo

2017/08/12 03:38

いや、ifの使い方は合っています。ただ、$class_zenbuが設定されていない場合($class_zenbu=''とかの初期化が、一切されて無い)、Undefined variableとしてNoticeが出ます。というだけのお話しです。
退会済みユーザー

退会済みユーザー

2017/08/12 03:46

あ、なるほど。5つ全て初期化しないといけないのですね! miyahanさんへのコメントでは「一部のやつ」の2つしか初期化していなかったので、「全部のやつ」の3つもやっておきます。 何度もお付き合いいただきありがとうございます!!<(_ _)>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問