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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

4395閲覧

PHP if文の中でJSは実行できない?[追記あり]

quaser

総合スコア7

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/08/01 06:17

編集2019/08/01 07:36

前提・実現したいこと

PHP if文の中でJSを実行したい

発生している問題・エラーメッセージ

PHP文の中でJSは実行はできますが、if文の中で記載すると
読み込まれずスルーされます。
※追記 
⇒if文の中に原因がありそうだったので、if文中身を追加しました。
返答を元に確認したところHeader関数のリダイレクト処理が原因のようです。
この処理が入るとなぜJSが実行されないのでしょうか?
⇒Header関数の使い方に誤りがありました。

該当のソースコード

<?php echo "<script>alert('Hello')</script>" //実行される if($mode == "delete"){ echo "<script>alert('Hello')</script>" //実行されない  } ?>
//if文の中身を追記しました。 <?php echo "<script>alert('Hello')</script>" //実行される if($mode == "delete"){ echo "<script>alert('Hello')</script>" //実行されない   try { $db->beginTransaction(); $stmt = $db->prepare("DELETE FROM posts WHERE post_id = ?"); $stmt->execute(array($request["post_id"])); $db->commit(); } catch (PDOException $e) { // エラー発生時 $db->rollBack(); exit("クエリの実行に失敗しました"); } //header関数でリダイレクト header("Location: post_list.php"); //ここが原因 exit;  } ?>

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2019/08/01 07:03

コードはマークダウンのcode機能を利用してご提示ください。
m.ts10806

2019/08/01 07:12

回答がついた質問の編集は慎重におこなってください。 場合により既についた回答と整合性がとれなくなってしまうことがあります。 ここまで編集されるのでしたら元のコードを更新するのではなく、コードを追記したほうが良いでしょう。
quaser

2019/08/01 07:37

申し訳ございません。ご迷惑おかけしました。
m.ts10806

2019/08/01 07:41

hentaimanさんにフォローコメントしてあげてください。
guest

回答5

0

ベストアンサー

PHP if文の中でJSは実行できない?

この時点で認識が間違っています。
PHPの流れの中でJavaScriptが実行されるわけではありません。
PHPで様々な処理が行われ、echoなどで出力が行われますが、
その出力された情報をブラウザが読み取って実行されます。

なので、PHPで記述していてブラウザで実行したときにレイアウトがうまくいかないとか
CSSがきかないとかJavaScriptが動いていないとか
そういったときに見るのはPHPのコードよりもブラウザの「ソースを表示」して出力されるHTMLです。
そこに出力されていないものは当然ブラウザが読み取れませんから、動きません。

もしソース表示で見たときに該当箇所が出力されてないのでしたら、
$modeの内容が意図していた内容になっていないということになります。
ここで初めてphp側のデバッグになります。
$modeの内容を確認してください。

※あとPHP側でリダイレクトさせてますが、header()の前にはいかなる出力もしてはいけないのがPHPのルールです。
PHPの処理が先でechoした内容は実行されることはないですが、そこにechoを入れているのはルール的にNGです(通常ならエラーでると思いますが)

投稿2019/08/01 06:57

m.ts10806

総合スコア80861

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

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

0

削除

投稿2019/08/01 06:20

編集2019/08/01 07:00
hentaiman

総合スコア6426

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

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

quaser

2019/08/01 06:27 編集

ご回答ありがとうございます。 クオテーションが抜けていたので修正しました。 そんな事はないとのことで、もしかしたらこのif文の中でDB削除を入れているのですが それが原因でalertウィンドウが表示されないのかもしれません。(DB削除コマンドは実行されます。)
hentaiman

2019/08/01 06:28

ブラウザにレンダリングされた後のhtml確認した方が早いよ ブラウザ見てソース見ればきっと思ったのと違うスクリプトになってるはず、ファイヤバグとか見ればエラーも出るだろうし
quaser

2019/08/01 06:52

ありがとうございます。if文内部を見直したら原因が分かりました。
quaser

2019/08/01 07:50

hentaimanさん 大変有用なコメントをいただいたにもかかわらず、 勝手がわからず途中で質問内容を変更してしまいました。 ご迷惑おかけして申し訳ありません。
guest

0

これだけじゃ、当然実行されないよ~

PHP

1<?php 2echo "<script>alert('Hello')</script>" //実行される 3 4$mode = "test"; 5if($mode == "test"){ 6echo "<script>alert('Hello')</script>" //実行されない 7} 8?>

これなら、行けるけど。
実際に上記だけのコードを挿入して試してみたらどうでしょう。
もしそれでalertが実行されたなら、もともとのコードで判定式の中身がfalseだって事だと思います。

投稿2019/08/01 06:30

yukikp

総合スコア797

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

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

quaser

2019/08/01 06:51

ありがとうございます。if文内部を見直したら原因が分かりました。
yukikp

2019/08/01 07:15

おっけ~!原因分かってよかったですね。 その旨、質問を編集して頭部分に【追記】書いておくと後から見た人が困らないです。
guest

0

if文の条件を満たしていなかったりそれ以外が原因だと思います。

投稿2019/08/01 06:28

beginner_t

総合スコア716

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

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

quaser

2019/08/01 06:51

ありがとうございます。if文内部を見直したら原因が分かりました。
guest

0

たぶん $mode が null か、または test 以外の何かなんじゃないかと思います。

投稿2019/08/01 06:27

hideyuki.motoo

総合スコア72

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

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

quaser

2019/08/01 06:51

ありがとうございます。if文内部を見直したら原因が分かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問