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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

5940閲覧

phpの実行の順番を変えたい

toss

総合スコア56

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/06/17 02:01

phpの処理の順番を変更したいです。

<body> 内でインサートしたものを<header>内で取り出したいです。 どのようにすれば実現できるでしょうか? php、もしくはjqueryでも良いので、最適な解決方法を教えていただきたいです。 よろしくお願いいたします。 以下簡単なイメージコードです。

header.php


<header> <?php DBでデータ取り出し; echo データ; ?> </header> __________________________

test.phpの中身


<?php require('header.php'); ?> <body> insert データ; ?> </body> __________________________

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

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

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

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

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

guest

回答2

0

ベストアンサー

ob_start ob_get_clean などの関数をフル活用すれば一応実現不可能ではないです.が,後々「なんでこんなコード書いてしまったんだろう」と後悔すること必至なので,今のうちに設計をあらためてください.

特に今回ひっかかるのは**「テンプレートとロジックは分けろ」**というところです.HTMLの中にロジックを埋め込むのは間違っています.頭ですべてロジックを完結させて,HTMLで動的な内容が必要であれば変数をあらかじめ準備しておき,HTMLを書き始めたらそれだけに徹する,この書き方が鉄則です.

ここで紹介しているコードの一部を記します.

html

1<?php 2 3function h($str) { 4 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 5} 6 7session_start(); // 1 8 9$name = (string)filter_input(INPUT_POST, 'name'); 10$text = (string)filter_input(INPUT_POST, 'text'); 11$token = (string)filter_input(INPUT_POST, 'token'); // 3 12 13$fp = fopen('data.csv', 'a+b'); 14if ($_SERVER['REQUEST_METHOD'] === 'POST' && sha1(session_id()) === $token) { // 3 15 flock($fp, LOCK_EX); 16 fputcsv($fp, [$name, $text]); 17 rewind($fp); 18} 19flock($fp, LOCK_SH); 20while ($row = fgetcsv($fp)) { 21 $rows[] = $row; 22} 23flock($fp, LOCK_UN); 24fclose($fp); 25 26?> 27<!DOCTYPE html> 28<meta charset="UTF-8"> 29<title>掲示板</title> 30<h1>掲示板</h1> 31<section> 32 <h2>新規投稿</h2> 33 <form action="" method="post"> 34 名前: <input type="text" name="name" value=""><br> 35 本文: <input type="text" name="text" value=""><br> 36 <input type="submit" value="投稿"> 37 <input type="hidden" name="token" value="<?=h(sha1(session_id())) /*2*/ ?>"> 38 </form> 39</section> 40<section> 41 <h2>投稿一覧</h2> 42<?php if (!empty($rows)): ?> 43 <ul> 44<?php foreach ($rows as $row): ?> 45 <li><?=h($row[1])?> (<?=h($row[0])?>)</li> 46<?php endforeach; ?> 47 </ul> 48<?php else: ?> 49 <p>投稿はまだありません</p> 50<?php endif; ?> 51</section>

「テンプレートとロジックを分ける」という意味,ご理解いただけましたでしょうか.

投稿2016/06/17 04:05

編集2016/06/17 05:14
mpyw

総合スコア5223

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

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

0

test.phpをこうすればいいのでは。

PHP

1<?php 2insert データ; 3?> 4<?php require('header.php'); ?> 5<body> 6</body>

投稿2016/06/17 02:15

ttyp03

総合スコア16998

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

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

toss

2016/06/17 02:21

回答ありがとうございます。説明不足ですみません。 実際の記述では、insertデータの前後が、htmlタグやphpなどいろいろと絡み合って複雑なので、 できればそれを分離して〜など面倒なことはやりたくないのです。 なので、phpの実行の順番を変更する方法が知りたいです。 「bが実行されたらaが実行される」みたいな感じです。 よろしくお願いいたします。
ttyp03

2016/06/17 02:23

それは無理じゃないかと…。 insertの部分を関数化して、それを先頭で呼ぶようにするとかが現実的ではないでしょうか。
yambejp

2016/06/17 03:04

そもそもheaderタグ内に書くものってなんでしょう? 最悪insert後にjavascript的な処理でheaderにappendすることは 可能かと思いますが。
toss

2016/06/17 03:21

回答ありがとうございます。関数でできるか試してみます。 header.phpの中身は以下になります。(省略しています。) javascriptでもいいので、できたらいいなと思っています。 <!--header.phpの中身--> <?php ///ここから未読数取得システム /*~~~~~ 省略 ~~~~~~*/ $stmt=$db->prepare('SELECT count(*) AS count FROM chat_flag WHERE user_id =:user_id'); $stmt->bindValue(':user_id',$userId); $stmt->execute(); $row=$stmt->fetch(PDO::FETCH_ASSOC); $countKidoku = $row['count'];//全体既読数 $AllMidoku = $countChatAll-$countKidoku;//すべての未読数 //ここまで未読数取得 ?> <a href="http://test.com"> <p class="btn-primary btn">相談を見る <?php if($AllMidoku >0){ echo "<span class='Midoku'>".$AllMidoku."</span>"; }?> </p> </a> <?php /*~~~~~ 省略 ~~~~~~*/ ?> <!--header.phpの中身-->
toss

2016/06/17 03:33

少し付け加えますと、ページを開いたときに、ボディ内でDBのテーブル「chat_flag」にインサートしていまして、その処理を終えた後に上記header.phpの中の処理を行いたいと思っております。
yambejp

2016/06/17 03:47

正確には把握していませんが 結局header.phpで得た変数の値でbody内を分岐させてますね headerタグに吐き出させるテキストを変えるならともかく その後のプログラム分岐をあとから書くことは不可能 いまのままの方針では時間をさかのぼらない限り無理でしょう やはり根本的な書き方を変える以外ないと思います
toss

2016/06/17 04:03

そうですね。やはり手間はかかりますが、根本から変えていくことにしました。 回答してくださった方、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問