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

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

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

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

JavaScript

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

HTML

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

Q&A

解決済

2回答

485閲覧

javascriptとPHPで同じ文字列なら関数を実行しないようにしたい

nguyenseiji

総合スコア156

PHP

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

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2020/08/24 03:09

編集2020/08/24 05:56

PHPでmysqlにあるデーターを取得します

mysqlの中身(5つのレコードがあります)
果物
ゲーム
果物
ゲーム
ゲーム

PHPのforeachですべて取得する後その個数分だけhtmlのselectのoption属性を増やしたいのですが
その際に同じ文字列(ゲームならゲーム)をの時だけoptionを増やしたくないです

その為if文で文字列が一緒なら実行しないにしているのですが文字列が一緒じゃなくてもoptionが追加されません
そもそもPHP内で<<<EOMを使ってjavascriptのIF文は使えないのでしょうか...

html

1 <select name="type1" id="type1" class="type1" onchange="categoliOption()"> 2 <option value="not">選択してください</option 3 </select>

php

1 <?php 2 3ini_set('display_errors', "On"); 4 5$stmt = $dbh->prepare('SELECT * FROM type WHERE id=?'); 6$stmt->bindValue(1,$id,PDO::PARAM_INT); 7$stmt->execute(); 8 9foreach($stmt as $rec){ 10 11$type1 = $rec["type1"]; 12$type1 = json_encode($type1); 13 14 15$stt = <<<EOT 16 17<script type="text/javascript"> 18 19var type1 = $type1; 20 21 22 23if(type1 == lastType1 ){ 24 25 26 27}else{ 28 29 function addOption1() { 30 var select = document.getElementById("type1"); 31 var option = document.createElement("option"); 32 option.text = type1; 33 option.value = type1; 34 select.appendChild(option); 35 36 var lastType1 = type1; <------lastType1変数にoptionを追加した時のtype1を入れて次回のforeachのif文で使用する 37 addOption1(); 38 39 40} 41 42 43} 44 45</script> 46 47EOT; 48 49echo $stt; 50} 51 52?>

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

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

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

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

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

KoichiSugiyama

2020/08/24 03:20

HTML部分はphpのファイル内に書かれていないのでしょうか?
nguyenseiji

2020/08/24 03:34

はい PHP領域の外になります
m.ts10806

2020/08/24 03:43

>javaacriptとPHPで同 「javaacript」というものはありません。 そういうところを雑にしてしまうとまともに動くプログラムは出来ませんよ。本当に。
thyda.eiqau

2020/08/24 03:43

ご提示のHTML (<select>部分) とPHPは別ファイルという意味ですよね。HTMLファイルはどのようにPHPファイルを読み込んでいるのですか?
m.ts10806

2020/08/24 03:44

<option>も正しく閉じれていませんし、まともなHTML作れない状態では動くはずがないです。
nguyenseiji

2020/08/24 03:45

ご指揮的ありがとうございます スペルミスが多いのは自覚しています... 気お付けます
m.ts10806

2020/08/24 03:49

「スペル」という認識だからでは? あくまで「そういう文字列の羅列」ですよ。 間違いない手順が癖づかないままでは同じ間違いをおかしつづけます。 「気を付ける」では改善は見込めません(これまでの質問の傾向から、一切それが見られない)
m.ts10806

2020/08/24 03:51

指摘うけてなお、修正されないので、「気を付ける」というのも言葉だけなのかなと。
m.ts10806

2020/08/24 05:57 編集

タグからコピペすれば確実と思いませんか。まぁそれでいいと思うならそのやり方続けたらいいです。手でやることが増えれば増えるほど不具合は増えるものです。
guest

回答2

0

解決されたようですが、要点はそれでいいとしても提示された範囲のコードを見るかぎり (JavaScriptの実装内容も含めて) 本当にそれで大丈夫か?と思わなくもないので、その範囲をカバーするコードを提示しておきます。

php

1<?php 2$pdo = new PDO('sqlite::memory:', '', '', [ 3 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 4]); 5$pdo->exec(" 6 CREATE TABLE type(id INTEGER, type1 TEXT); 7 INSERT INTO type values(1, '果物'); 8 INSERT INTO type values(1, 'ゲーム'); 9 INSERT INTO type values(1, '果物'); 10 INSERT INTO type values(1, 'ゲーム'); 11 INSERT INTO type values(1, 'ゲーム'); 12"); 13$stmt = $pdo->prepare('SELECT DISTINCT type1 FROM type WHERE id=?'); 14$stmt->bindValue(1, 1, PDO::PARAM_INT); 15$stmt->execute(); 16// ここまで検証用コード 17 18// ここから実装部分 19$rows = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); // この 0 は実際の環境によって違う 20$json = json_encode($rows); 21 22$stt = <<<EOT 23<script> 24 25JSON.parse(`{$json}`).forEach(val => { 26 let option = document.createElement('option'); 27 option.text = val; 28 option.value = val; 29 document.getElementById('type1').appendChild(option); 30}); 31 32</script> 33EOT; 34echo $stt; 35 36?>

ただ、デザインとしては、HTMLとPHPが別れているのであれば、PHPはたんにAPIとして実装して、HTMLファイル側からAjaxで取得するようにしたほうが綺麗だと思います。

html

1<select name="type1" id="type1" class="type1" onchange="categoliOption()"> 2 <option value="not">選択してください</option> 3</select> 4<script> 5fetch(`getType1.php?id=${id}`).then(res => res.json()).then(json => { 6 json.forEach(val => { 7 let option = document.createElement('option'); 8 option.text = val; 9 option.value = val; 10 document.getElementById('type1').appendChild(option); 11 }); 12}); 13</script>

php

1<?php 2// getType1.php 3header('Content-Type: application/json'); 4 5$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT); 6if($id === false) { 7 http_response_code(400); 8 exit(json_encode([ 9 'message' => '`id` is not found in query or invalid format.', 10 ])); 11} 12 13$pdo = new PDO('sqlite::memory:', '', '', [ 14 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 15]); 16$pdo->exec(" 17 CREATE TABLE type(id INTEGER, type1 TEXT); 18 INSERT INTO type values(1, '果物'); 19 INSERT INTO type values(1, 'ゲーム'); 20 INSERT INTO type values(1, '果物'); 21 INSERT INTO type values(1, 'ゲーム'); 22 INSERT INTO type values(1, 'ゲーム'); 23"); 24$stmt = $pdo->prepare('SELECT DISTINCT type1 FROM type WHERE id=?'); 25$stmt->bindValue(1, 1, PDO::PARAM_INT); 26$stmt->execute(); 27// ここまで検証用コード 28 29// ここから実装部分 30$rows = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); // この 0 は実際の環境によって違う 31echo json_encode($rows);

投稿2020/08/24 04:20

編集2020/08/24 04:22
thyda.eiqau

総合スコア2982

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

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

0

ベストアンサー

よくわからないけど
SELECT DISTINCT type1 FROM type WHERE id=?

投稿2020/08/24 03:30

yambejp

総合スコア114843

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

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

nguyenseiji

2020/08/24 03:42

DISTINCT で解決しました ありがとうございます! また EOT; echo $stt; をforeachループの外に記載していました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問