2010-10-01 3 views
0

Je reviens par le biais d'un système de numérotation de documents basé sur le Web il y a quelques semaines. Pour résumer, l'utilisateur tape le projet, la classe, la base et le numéro de tiret (PPP-CCC-BBBB-DDD) puis il est ajouté à une base de données mysql. Maintenant, la plupart des numéros de doc vont dans l'ordre selon les révisions. IE: Un document 1465-630-0001-000 devient, après révision, 1465-630-0002-000.Javascript interface mysql?

Le responsable souhaite que le système remplisse automatiquement la zone de texte de saisie pour le numéro de base s'il détecte que l'utilisateur entre un document révisé. Donc, si un utilisateur tape 1465 dans le champ de projet et 630 dans le champ de classe, le système devrait remplir automatiquement le champ de base avec le prochain numéro disponible. Dans l'exemple précédent, il s'agirait de 0002.

Il doit être capable de rechercher dans la base de données les deux premiers champs afin de trouver le prochain disponible. Est-il possible de le faire en utilisant javascript ou quelque chose? SO était vraiment utile avec ma dernière question javascript concernant ce système.

Heres un peu de mon code si elle aide:

`>

<div id='preview'></div> 
<form id='item' action="submit.php?item=1" method="post"> 
Enter Title:<input type="text" name="title" size="20"><BR> 

Choose Project Code: 
<SELECT NAME="project"> 
     <OPTION VALUE="">Project... 
     <? 
     $query = "SELECT * FROM project ORDER BY project asc"; 
     $result = mysql_query($query); 
     while($row = mysql_fetch_assoc($result)) 
      { 
      $num = ($row['project']); 
      $name = ($row['description']); 
      ?> 
      <OPTION VALUE="<?=$num?>" ><? echo"{$num}" . " | " . "{$name}";?> 
      <? 
      } 
      ?>  
</SELECT><BR> 

Choose Class Code: 
<SELECT NAME="class"> 
      <OPTION VALUE="">Class... 
     <? 
     $query = "SELECT * FROM class ORDER BY class asc"; 
     $result = mysql_query($query); 
     while($row = mysql_fetch_assoc($result)) 
      { 
      $num = ($row['class']); 
      $name = ($row['description']); 
      ?> 
      <OPTION VALUE="<?=$num?>" ><? echo"{$num}" . " | " . "{$name}";?> 
      <? 
      } 
      ?> 
</SELECT><BR> 

Assigned Base Number:<input type="text" name="base" size="20"><BR> 
Enter Dash Number:<input type="text" name="dash" size="20"><BR> 
Enter Comments:<input type="text" name="comment" size="40"><BR> 
<input type="hidden" name="item" value="1"/> ` 

Juste une forme d'entrée simple, html/php avec le projet et la liste code classe générée à partir d'une base de données se rapportant à chaque .

Merci pour toute aide-Thomas

Répondre

1

Mise à jour:
Alors, vous allez besoin de faire un appel AJAX (voir l'exemple dans mon commentaire ci-dessous) à un script PHP qui va récupérer la valeur de base que vous voulez, puis renvoie à la demande AJAX. Une fois que la requête reçoit une réponse, vous pouvez utiliser ces données pour remplir la valeur comme je l'ai dit à l'origine ...

D'un côté, puisque l'exemple que je vous ai donné est une fonction jQuery AJAX, vous devriez probablement vérifier comment utiliser jQuery pour sélectionner des éléments sur la page, au lieu d'utiliser JS.

Par expour obtenir par ID et le remplacement de la valeur:

$("#base").attr('value', valueFromAjaxCall); 

Comment changer la valeur avec JS:
Si vous utilisez PHP pour obtenir la valeur de base que vous voulez remplir dans le champ, alors vous pouvez remplir la valeur avec:

var baseField = document.getElementsByName("base")[0]; 
    baseField.value = <?=$baseValue?>; 

le retour appel getElementsByName() un tableau, ce qui est la raison pour laquelle vous avez à l'index dans le champ que vous voulez. Je suggère de donner votre <input> un id afin que vous puissiez utiliser document.getElementById() à la place. Vous feriez quelque chose comme:

<input type="text" id="base" size="20"> 

et la JS pour obtenir l'élément d'entrée serait:

var baseField = document.getElementById("base"); 

... donc pas besoin d'index, dans le cas où vous avez nommé tous les champs avec le même prénom.

** Je ne suis pas sûr de la syntaxe PHP.

+1

Est-ce que cela sera possible sans que l'utilisateur ne soumette quoi que ce soit? Comme, sera-t-il capable de passer par la base de données et de trouver le numéro suivant juste en ayant le type d'utilisateur dans les champs et ne rien soumettre? – Thomas

+0

Vous avez raison. Vous aurez besoin de faire un appel AJAX à un script PHP qui va et attrape la valeur de base que vous voulez, puis renvoie cela à la demande AJAX. Je suggère un appel jQuery comme ceci: http://api.jquery.com/jQuery.ajax/#example-2 – kafuchau

+0

C'est juste l'exemple dont j'ai besoin! Parfait. Merci à vous deux :) – Thomas

0

Un appel ajax sur le focus du 3ème champ de tir au serveur les valeurs des deux premiers champs? Tout d'abord, vous voudrez probablement utiliser jQuery car il a un excellent support est facile à utiliser et se sentira familier à quelqu'un qui utilise PHP.

afin d'inclure votre code javascript jQuery que vous pouvez obtenir à partir de: http://jquery.com/

alors, prendre une forme qui ressemble à:

{form} 
<input type=text id='major' name='major' value=''> 
{Or a select, your choice} 
<input type=text id='minor' name='minor'> 
{or a select again} 
<input type=text id='sequence' name='sequence' onFocus='getNextSequence()'> 
... 
{/form} 

dans votre tête, vous avez votre javascript:

L'appel jQuery getJSON rappellera votre URL avec deux $_POST
function getNextSequence(){ 
    var major=$('#major').val(); 
    var minor=$('#minor').val(); 
    if(!major){ 
     alert('Select a major version#'); 
     $('#major').focus(); 
     return(false); 
    } 
    if(!minor){ 
     alert('Select a minor version#'); 
     $('#minor').focus(); 
     return(false); 
    } 
    $.getJSON('http://url.to.getnextNumber.php', 
     {major:major,minor:minor}, 
     function(data){ 
      if(!data.error){ 
       $('sequence').val(data.nextSequence); 
      }else{ 
       alert(data.error); 
      } 
     } 
    }); 
} 

variables, majeures et mineures. faites votre requête, enregistrez le résultat sous la forme $result=array('nextSequence'=>$x,'error'=>'false'); et convertissez-le en JSON avec echo json_encode ($ result); ne comprennent pas les en-têtes ou tout autre contenu dans la sortie de ce fichier, et jQuery va tirer la valeur correcte et insérez-le où il est censé se coucher

+0

Je ne suis pas très familier avec ajax. Et par là, je veux dire que je n'ai aucune expérience en quoi que ce soit. Des bons tutoriels pour cette méthode? – Thomas