2010-09-13 5 views
0

Je pratique sur ajax. Je ne sais pas quoi, ou comment le faire. C'est la première fois que je fais ça. Voici mon code.AJAX question sauvegarde automatique

<?php 
function save() { 
    // mysql connection 

    $text = $_POST['name']; 

    // insert query 
} 
?> 

<input type="text" name="name" onchange="<?php save() ?>" value="default"> 

Ce que j'essaye de faire est comme ceci. Le texte du type d'entrée contient un texte par défaut. Ensuite, si je change ça, ça va automatiquement sauvegarder. Comment puis je faire ça?

Répondre

0

Je ne sais pas si vous devriez économiser comme ça.

Vous voulez probablement l'événement onblur(), ou mieux, ajoutez l'événement via JavaScript, n'utilisez pas l'attribut inline.

Mais le plus gros problème est que vous essayez d'appeler une fonction PHP à partir de JavaScript. JavaScript ne peut pas interagir avec PHP comme ça. Pensez à la relation client/serveur et à l'endroit où le code est exécuté.

Vous aurez besoin d'appeler une fonction JavaScript qui envoie les value de l'entrée que PHP peut ensuite utiliser pour écrire dans votre base de données.

4

Réponse courte: Vous ne pouvez pas appeler une fonction PHP à partir de JavaScript, donc la façon dont vous l'avez essayé ne fonctionne pas.

Réponse longue: Vous devrez trouver une introduction à AJAX et l'apprendre. Afin de faire ce que vous décrivez, vous devez:

  • instancier un objet XMLHttpRequest dans le JavaScript
  • lui dire de contacter le serveur à un URL où le serveur appellera votre script PHP
  • tell pour envoyer toutes les informations nécessaires (en particulier. le texte que l'utilisateur a tapé dans) via POST
  • écrire le script PHP de telle manière qu'il sauvera le texte et retourner quelque chose comme true/false pour indiquer le succès/échec
  • retour en JavaScript, gérer la réponse quand elle arrive, par ex. en affichant un message disant "message sauvegardé" ou "message ne peut pas être sauvegardé: (message d'erreur)", selon qu'il a réussi ou non.
0

Je pense que vous devez d'abord comprendre le concept d'AJAX.

Essayez ceci. http://www.w3schools.com/ajax/ajax_intro.asp

Pour vous donner une idée simple; Imaginez qu'il y ait un <FORM> tag imaginaire où il a une méthode, une action et des données à soumettre. Dans votre cas, l'événement onchange de l'entrée déclenche le "SUBMIT" de ce <FORM> en supposant que vous avez déjà défini les valeurs des données à soumettre. Lorsque cela se produit, la page ne s'actualise pas ou ne redirige pas. Au lieu de cela, javascript crée un "fil de processus séparé" tout comme le <FORM> a été soumis dans une "fenêtre" différente. Ainsi, le terme "asynchrone".

AJAX est plus une chose Javascript.

0

Il existe plusieurs façons de créer un appel AJAX. Le plus simple est d'utiliser Javascript Framework comme Mootools ou JQuery. Ajax est simple de cette façon.Vérifiez http://demos111.mootools.net/Ajax.Form pour les démos Mootools et jquery ici http://docs.jquery.com/Tutorials.

La logique est assez simple. Ajouter un événement à la zone de texte pour enregistrer la boîte une fois que la valeur change. Votre fonction d'événement va générer une requête Ajax et l'envoyer au serveur, recevoir une réponse que vous pouvez utiliser pour informer l'utilisateur de l'état de l'événement save, si vous le souhaitez.

Voici une petite chose que j'ai écrite pour vous, qui pourrait m'aider à comprendre. Devra inclure la bibliothèque Mootools. Pourrait avoir des bugs, mais le concept de l'appel Ajax est là. page = index.php

<?php 
// PHP before anything else... 
// 
// Check to see if task is specified and need to save changes 
if (isset($_POST['task']) && $_POST['task'] == 'save') { 
    // mysql connection 
    $text = $_POST['name']; 
    // insert query 
    $isSuccess = 'Status of SAVING CHANGES'; 

    // Output... output will be used by 'update' to set value of <div id="log">...</div> 
    // so user knows what is happening 
    echo $isSuccess ? 'Successfully Saved' : 'Failed to Save'; 
    exit(); 
} 
?> 
<html> 
    <head> 
     <!-- NEED TO INCLUDE MOOTOOLS LIBRARY --> 
     <script type="text/javascript"> 
      window.addEvent('domready', function(){ 
       $('name').addEvent('blur', saveChanges); 

       /** 
       * Generates request and saves changes 
       */ 
       function saveChanges(){ 

        // URL which will be called 
        var url = "index.php"; 

        // New Ajex request. Note that it will be sent because of .request() at the end 
        new Ajax(url, { 
         // Method : post/get 
         method: 'post', 

         // Data to be passed 
         data :{ 
          name : $('name').value, 
          task : 'save' 
         }, 

         // Output of the AJAX will be set to this element 
         update: $('log') 

        }).request(); 
       } 
      }); 
     </script> 

    </head> 
    <body> 
     <form action="index.php" onsubmit="return false"> 
      <div id="log"></div> 
      <!-- SOME CONTENT ... --> 
      <input type="text" name="name" id="name" value=""> 
     </form> 
    </body> 
</html>