私が持っています
index.php
<select id="year_list" name="year_list" onchange="check_year_event('year_list', 'event_list');" > . . . </select>
<select id="event_list" name="event_list" onchange="check_year_event('year_list', 'event_list');" > . . . </select>
.
.
.
<?php
function checkYearandEvent($year, $event) {
$year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'")
if (mysql_num_rows($year_event) > 0) {
// do this
}
}
?>
myscripts.js
function check_year_event(year_id, event_id) {
var year = document.getElementById(year_id).value;
var event = document.getElementById(event_id).value;
// call PHP function (but I don't know how): checkYearandEvent(year, event);
}
私の質問は、ユーザーがselect
要素の値を変更するたびにPHP関数を呼び出す方法です。
Ajaxを使用する必要があります。基本的な例があります:
myscripts.js
function AjaxCaller(){
var xmlhttp=false;
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){
xmlhttp = false;
}
}
if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function callPage(url, div){
ajax=AjaxCaller();
ajax.open("GET", url, true);
ajax.onreadystatechange=function(){
if(ajax.readyState==4){
if(ajax.status==200){
div.innerHTML = ajax.responseText;
}
}
}
ajax.send(null);
}
function check_year_event(year_id, event_id) {
var year = document.getElementById(year_id).value;
var event = document.getElementById(event_id).value;
callPage('file.php?year='+year+'&'+'event=+'+event,document.getElementById(targetId));
}
file.php
<?php
function checkYearandEvent($year, $event) {
$year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'")
if (mysql_num_rows($year_event) > 0) {
// do this
}
}
echo checkYearandEvent($_GET['year'], $_GET['event']);
?>
あなたが望んでいるような方法でこれを行うことはできません。 PHPは、ブラウザがHTMLを受信する前にサーバーで実行されます。一方、JavaScriptはブラウザで実行され、PHP(またはHTMLの作成に使用されるその他のサーバー側言語)。
Php関数を「呼び出す」には、サーバー(通常はAJAXと呼ばれます)にリクエストを発行する必要があります。たとえば、checkYear.php
イベントをチェックし、チェックが成功したかどうかを示すHTMLを返すスクリプト。 HTMLフラグメントがJavaScriptに戻ったら、それをページに挿入します。
お役に立てれば!
JavaScriptはクライアント側の言語、PHPはサーバー側の言語です。したがって、PHP関数をJavaScriptコードから直接呼び出すことはできません。ただし、 AJAXリクエストを送信し(PHPファイルをバックグラウンドで呼び出します)、それを使用してPHPコードを作成し、必要なデータをJavaScriptに返します。
基本的に、サーバー側(PHP)とクライアント側(JS)のスクリプトを混在させます。
しかし、それは可能です-例えば、ありがとう。 AJAXに。選択ボックスが変更された後に何をする必要があるかについて具体的には説明していなかったので、いくつかのリソースのみを示し、以下を提案します。
onchange
イベントが発生したときに実行していた関数内)の作成方法を学ぶ-例 。post() の使用= jQuery関数、json_encode()
を使用しますが、生のHTMLも使用できます)からデータを返し、JSで使用する方法を学びます。これには多くの方法があります。私が好むのは、MooTools
Request
オブジェクトを使用することです。
たとえば、ajaxCallable.php
という変数を介して$_REQUEST
変数を介していくつかのパラメーターを受け取るスクリプトがある場合は、次のようにします(JavaScript側で)。
function check_year_event(year_id, event_id) {
var year = document.getElementById(year_id).value;
var event = document.getElementById(event_id).value;
var myRequest = new Request({method: 'get', url: 'ajaxCallable.php'});
myRequest.send('yearVar=' + year + '&eventVar=' + event);
}
その後、ajaxCallable.php
は変数$_REQUEST['yearVar']
および$_REQUEST['eventVar']
にアクセスできるようになります。
私は今週プロジェクトに取り組んでいて、onclick()からPHPスクリプトを呼び出す簡単な方法を考え出しました。こんなふうになります。
この場合、「sidebarItem」というdivでonclick()呼び出しを定義しています…
<a><div class="sidebarItem" onclick="populate('#content', 'help', 'open')">Click me for new content</div></a>
次に、外部ファイルをターゲットコンテナーにロードする単純な小さなJS関数を作成しました…
function populate($container, $page, $item){
$($container).load('cyclorama/includes/populate.php?$page='+$page+'&$item='+$item);}
次に、$ pageと$ itemを取得し、データベースにクエリを実行して新しいコンテンツを返す小さなphpファイルを記述します。
<?php
$page = $_GET['$page'];
$item = $_GET['$item'];
$getContentQuery = "SELECT content FROM myTable WHERE page='".$page."' AND item='".$item."'";
$content = mysql_query($getContentQuery, $db);
$myContent = mysql_fetch_assoc($content);
echo $myContent['content'];?>
Phpスクリプトが新しいコンテンツをエコーし、コンテナにロードされます。これが役立つ場所はたくさんあると思います。これを行わない明らかな理由があるかどうかを知りたいと思います。 AJAX javascriptとphpを使用していませんが、高速で比較的簡単です。