もはやアプリ化しているホームページですが、プログラム部分で使われる基本的な言語が『PHP』と『JavaScript』かと思います。
それぞれに得意とする部分がありますので、その得意とする部分で言語を分けて書いて行くと異言語間の変数の共有が必要になってくると思います。
今回、PHPとJavaScriptでの変数の受け渡しについてお教えします。
※[××××××.php]ファイルでの記述方法になります。
【PHPからJavaScriptへ 基本 変数編】
PHPで使っている変数の内容をJavaScriptへ渡しjQueryなんかで処理したい事が多いかもしれません。
JavaScript記述内で
1 |
var $aa = "<? php echo $bb; ?>;"; |
とするだけで変数 $bbの内容が$aaへ代入する事ができます。
【PHPからJavaScriptへ 配列変数編】
まず、基本的にJavaScriptが多次元配列に対応していないため、通常の配列の受け渡しについて説明します。
[PHP側での準備] $ab = implode(“,”,$aa);
『implode』をつかって配列をカンマ区切りの文字列情報へ組み替えます。
JavaScript内で
1 2 |
var $bb_csv = "<?php echo $ab; ?>"; // 変数受け渡し。 $bc = bb_csv.split(",", -1); // bb_csvをsplit()でカンマ区切り配列に再編成。 |
こうすることで、PHPでデーベースなどの処理を行ない、表示部分ではJavaScriptでjQueryなどを使った柔軟な表示がおこなえます。
ありがとうございました。
3か月程度の初心者なのですが、
phpでmariadbから取得した値をJavascriptに渡してJqueryでWEB画面の表示を変えたいのですが、ここ3週間ほどここをブレイクスルー出来ずに困ってます。教えていただけないでしょうか。
//10月3日の予約の件数をmariadbから取得
$sql = ‘select count(*) as cnt from reserveday where month = ? AND day = ? order by timetable’;
$stmt = $dbh->prepare($sql);
$stmt->execute(array(10, 3));
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result[‘cnt’] > 0){
print “A。”;
}else{
print “B。”;
}
//if以下は、値を取得できたか確認のため画面に出力したところ「2」と表示されここまでは値を取得できています。
この$result[‘cnt’]に入っていると思われる「2」(変数)をjavascriptファイルに渡して条件分岐したく、ネットで検索した方法をいろいろ試しているのですが、どうもうまく行きません。
お時間のある時で結構ですのでよろしくお願い申し上げます。
はじめまして、こんにちは。
デバッグの作業になるかと思いますが、IF文で使用する変数に予想した内容が入っているか確認する事から行なってみてはいかがでしょうか。
PHPであれば、var_dump([ここに中身を確認したい変数]);
Javascriptであれば、私は alert(); を使って
想定した内容が入っているかを確認しています。
ここでは、$sql、$stmtになるかと思います。
まずは、ステップ毎に変数の内容確認を行なってみてください。
『$stmt->execute(array(10, 3));』この部分、格納するための変数が設定されていませんがエラーは出ていませんか?
『$〇〇 = $stmt->execute(array(10, 3));』といった感じ。
ご丁寧にお付き合いいただき本当にありがとうございます。
ネットにある質問サイトはホスピタリティが希薄で・・・!
感謝感激でございます。
エラーはでていないようなんですが・・・。
var_dump($result[‘cnt’]);
var_dump($aql);
var_dump($stmt);
var_dump($result);
を追記して出力されたのが下記になります。
・・・・・・・・・・・・・
「string(1) “2”」
「Notice: Undefined variable: aql in C:\xampp\htdocs\script\test.php on line 32」
「NULL object(PDOStatement)#3 (1) { [“queryString”]=> string(85) “select count(*) as cnt from reserveday where month = ? AND day = ? order by timetable” } 」
「array(1) { [“cnt”]=> string(1) “2” }」
・・・・・・・・・・・・・
となりました。
素人でよくわからないのですが、$result[‘cnt’]には「string(1) “2”」が入っているのでしょうか。
この「2」をjavascriptファイルの渡せれば成功なのですが。
ネットで拾った下記のようなコードではどうも渡ってないようで。
javascriptファイル側
var sample=JSON.parse(”);
手取り足取り御指南頂けれと幸いでございます。
var_dump($result[‘cnt’]); の結果が string(1) “2” となっているので
配列を持つ変数 $result の cnt には、文字扱いで1文字入っていて、その文字は 2 と言う内容です。
と言う事で、$result[‘cnt’]には 2 が入っています。文字扱いですが…
恐らく、渡せていない原因は$resultが配列変数だったからだと思います。
一旦、$result[‘cnt’]を別な変数に入れて渡してみてはいかがでしょうか
大前提で、PHPファイル内での書き方になりますが
で受け渡しできるかと思います。
ちなみに、var_dump($result); のdumpが array(1) { [“cnt”]=> string(1) “2” } と出ているのは
array()が付いた時点で、配列変数 確定です。
{ [“cnt”]=> string(1) “2” } は配列の中身です。
[“cnt”]の中に string(1)文字で1文字 “2”が入っている
と言うないようになります。
私は、我流で片っ端から検索しまくって覚えていったので
確認方法や表示されるメッセージなど、検索や翻訳をして解読していくと良いですよ。
こんなに古い記事をみに来て頂いて、ありがとうございます。
少しでもお役にたてたのでしたら光栄です。
コメントの返信については、業務の関係もあり必ず返信できる訳ではございませんので予めご理解とご容赦頂ければと思います。
今後とも宜しくお願います!!
ご多忙の中わかりやすくご説明いただき誠にありがとうございます。
涙、ちょちょ切れでございます。
var_dump(),alert()の使い方など大変参考になりました。
「デバッグの方法も知らんで質問せんで」と怒られそうですが・・・。
$cntnmb = (int) $result[‘cnt’];
var_dump($cntnmb);
↓
「int(2)」と表示されましたので数値化も大丈夫だと思います。
この「$cntnmb」をPHPファイルからjavascriptファイルに渡すPHP側のコード、受け取るjavascript側のコードを最後に教えていただけると感謝感激でございます。
ここ数週間検索しまくっているのでがどうしても渡せなくて!
ファイル間で渡すとなれば、グローバル変数を利用する必要があるかと思います。
私はファイル間での受け渡しはフォーム程度なので、保証はできませんが
PHPでグローバル変数に数値を入れたら、取り出す方も一旦PHPで受け取る必要があるかと思いますので
javascriptが書かれている物でも、受け取る時にPHPを使うのでコチラもPHPファイルになるかと思います。
[PHPが書かれたPHPファイル] → [javascriptが書かれたPHPファイル]
こんな感じになるかと思います。
PHPとJavascriptのグローバル変数については、調べて見てください。
頑張って!!
ありがとうございます。
phpファイル、jsファイル間の渡しはまだできていないのですが、phpファイルのhtml内に
var cntnmb = ”;
if( cntnmb > 0 ){
$(‘#times9’).text(‘ 9:00~予約済み’);
}
if( cntnmb == 0 ){
$(‘#time9’).prop(‘disabled’,false);
}
にしたら、なんかの拍子にちゃんと代入されて初期の目的の動きを出来るようになりました。(このやりかたも試したと思うんだけど・・・。
デバッグで「ここまでは来てる」「ここまでは来てる」と確認を教えて頂いたからだと思います。)
これで8割方完成です。
やさしくご指導いただきまして本当にありがとうございました。
また、詰まったらお願いを乞うかもしれません。
その時はまたかとおっしゃらずよろしくお願い申し上げます。