web-dev-qa-db-fra.com

Comment appeler a PHP dans JavaScript?

J'ai

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);

}

Ma question est de savoir comment puis-je appeler le PHP fonction chaque fois que l'utilisateur modifie la valeur de l'un des éléments select.

14
Newbie Coder

Vous devez utiliser Ajax. Il y a un exemple de base:

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));
}

fichier.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']);
?>
8
Galled

Vous ne pourrez pas faire cela dans la façon dont vous pourriez être en expôture. =PHP est exécuté sur le serveur, avant que le navigateur ne reçoit le code HTML. D'autre part, JavaScript s'exécute dans le navigateur et n'a aucune connaissance du PHP ( ou tout autre langage côté serveur) utilisé pour créer le HTML.

Pour "appeler" une fonction PHP, vous devez émettre une demande sur le serveur (souvent appelée AJAX). Par exemple, vous pourriez avoir un checkYear.php script qui vérifie l'événement et renvoie certains HTML indiquant si le chèque a réussi. Lorsque le fragment HTML revenait au JavaScript, vous l'injectez dans la page.

J'espère que cela t'aides!

7
jimbo

JavaScript est une langue côté client, PHP= est une langue latérale du serveur. Par conséquent, vous ne pouvez pas appeler PHP Fonctions directement à partir du code JavaScript. Cependant, ce que vous pouvez FAIT EST POST AN AJAX Demande (cela appelle A PHP fichier dans les coulisses) et utilisez-le pour exécuter votre PHP= CODE et renvoyez toutes les données dont vous avez besoin dans le JavaScript.

2
RichW

Fondamentalement, vous mélangez des scripts du côté serveur (PHP) et du côté client (JS).

Il est cependant possible - merci par exemple. Ajax. Parce que vous n'êtes pas spécifique à propos de ce que vous avez exactement besoin d'être fait après que la boîte de sélection change, je ne peux que vous indiquer quelques ressources et proposer la suite:

  • apprendre et commencer à utiliser jQuery ( jquery.com ) - Cela vous aidera à démarrer et à maintenir la compatibilité entre navigateurs croisés,
  • apprenez à faire AJAX Demandes (par exemple, dans la fonction que vous tirez simplement lorsque onchange événement a été tiré) - par exemple. Utiliser . Post () = fonction jQuery,
  • apprenez à renvoyer les données de PHP (par exemple, à l'aide de json_encode() en PHP, mais HTML RAW est également correct) et utilisez-le dans JS,
1
Tadeck

Il peut y avoir plusieurs façons de faire cela. Celui que je préfère, utilise MooToolsRequest objet.

Par exemple, vous avez un script appelé ajaxCallable.php, qui reçoit à travers $_REQUEST variables certains paramètres, alors vous faites (au côté 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);
}

ensuite, votre ajaxCallable.php sera en mesure d'accéder aux variables: $_REQUEST['yearVar'] et $_REQUEST['eventVar'].

1
Nicolás Ozimica

Je travaillais sur un projet cette semaine et j'ai trouvé un moyen facile d'appeler un script PHP d'un onclick (). Ça va comme ça.

Je définis un appel onglick () appelé dans ce cas sur un div appelé "la facebaritem" ...

<a><div class="sidebarItem" onclick="populate('#content', 'help', 'open')">Click me for new content</div></a>

Ensuite, j'ai fait une simple fonction JS qui charge un fichier externe dans le conteneur cible ...

function populate($container, $page, $item){
$($container).load('cyclorama/includes/populate.php?$page='+$page+'&$item='+$item);}

Ensuite, j'écris un petit fichier PHP qui obtient l'article $ page et $, interroge la base de données et renvoie le nouveau contenu.

<?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'];?>

Le script php résonne le nouveau contenu et il est chargé dans le conteneur. Je pense qu'il y a beaucoup d'endroits que cela pourrait servir. Je serais intéressé à trouver s'il y a des raisons évidentes de ne pas le faire. Il n'utilise pas AJAX juste JavaScript et PHP mais il est rapide et relativement facile.

0
e.w. parris