Ajax

Ajax - HTML/CSS - Programmation

Marsh Posté le 04-09-2008 à 15:34:41    

Bonjour,
 
une petite question qui vous paraitra peut etre banale :)
 
j'ai un formulaire de saisie avec une dizaine de champs. parmis ces champs j'ai par exemple 'auteur'.
lorsque je tape une lettre je propose une liste d'auteur, et si on trouve notre auteur on clique dessus. jusqu'ici il y a pas de probleme!
 
mais comment faire pour inserer uniquement l'identifiant de l'auteur ds ma base de donnees sachant que seulement le nom de l'auteur est visible???
 
Merci de votre aide
Reda

Reply

Marsh Posté le 04-09-2008 à 15:34:41   

Reply

Marsh Posté le 05-09-2008 à 09:53:59    

1) Quand l'appel 'ajax' arrive et que tu vas chercher en base la liste des noms commençant par ce qui a été tapé, garde en session cette liste (avec l'id)

 

2) quand le formulaire arrive, tu n'as plus qu'a chercher dans cette liste l'id correspondant au nom finalement saisi

 

2') si le nom ne s'y trouve pas, tu dois faire une requête à la base pour récupérer l'id


Message édité par Bidem le 05-09-2008 à 09:54:21
Reply

Marsh Posté le 05-09-2008 à 11:00:52    

ca ne sera pas long et lent ???
j'aurais a peu pres 100000 enregistrements, ca prendra enormement de temps pour comparer une chaine de caractere!!

Reply

Marsh Posté le 05-09-2008 à 12:03:34    

Citation :

lorsque je tape une lettre je propose une liste d'auteur


C'est cette liste qu'il faut garder en session. si elle fait 100000 enregistrements t'as un gros problème de conception.

 

Montre nous le code appelé lors de l'appel 'ajax'


Message édité par Bidem le 05-09-2008 à 12:04:24
Reply

Marsh Posté le 05-09-2008 à 12:49:30    

un probleme de conception?? :) mais pourquoi? on peut tres bien avoir des milliers d'enregistrement :)
 
voici ma fonction javascript :
 

Code :
  1. function xhr_search_article(val1, val2, val3)
  2. {
  3. if(val1)
  4. {
  5.  if(window.ActiveXObject) var xhr = new ActiveXObject("Microsoft.XMLHTTP" ); // Internet Explorer
  6.  else var xhr = new XMLHttpRequest(); // Firefox, Mozilla, ...
  7.  xhr.onreadystatechange = function()
  8.  {
  9.   if(xhr.readyState == 4)
  10.   {
  11.    if(xhr.status == 200)
  12.    {
  13.     var val_final = "<table width='100%' border='0' cellpadding='0' cellspacing='0'>";
  14.     if(xhr.responseText != "" )
  15.     {
  16.      var lines = xhr.responseText.split('\n');
  17.      for (var i = 0; i < lines.length; i++)
  18.      {
  19.       var line = lines[i].split('~');
  20.       for (var j = 0; j < 2; j++)
  21.       {
  22.        val_final += "<tr><td colspan='2' hight='15'><a href='javascript:;' class='linkMenu1' onClick=\"window.location.href='add-article.php?det=" + line[0] + "';\">" + line[1] + "</a></td></tr>";
  23.        break;
  24.       }
  25.      }
  26.     }
  27.     val_final += "<tr><td height='20' valign='bottom'><a href='add-article.php' class='link5'>Créer un nouvel article</a></td><td width='10' align='right' valign='bottom' class='v12'><b><a href='javascript:;' onClick=\"open_close('" + val3 + "');\" title='Fermer'><span class='red'>x</span></a></b></td></tr>";
  28.     val_final += "</table>";
  29.     document.getElementById(val3).style.display = '';
  30.     document.getElementById(val3).innerHTML = val_final;
  31.    }
  32.    else document.getElementById(val3).innerHTML = "Error code: " + xhr.status;
  33.   }
  34.  };
  35.  //Open the file, POST method
  36.  xhr.open("POST", "xhr_recherche.php?search=" + val1, true);
  37.  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  38.  xhr.send();
  39. }
  40. else document.getElementById(val3).style.display = 'none';
  41. }


 
 
ds le fichier xhr_recherche.php il y a une simple requette SQL

Reply

Marsh Posté le 05-09-2008 à 14:06:06    

Citation :

mais pourquoi? on peut tres bien avoir des milliers d'enregistrement


Donc quand tu commences à taper un nom l'ajax te propose une liste de 100000 auteurs pour 1 lettre tapée ???... t'en a combien en tout dans ta base, 3 millions ? :/

 
Citation :

ds le fichier xhr_recherche.php il y a une simple requette SQL


C'est justement ça que je voulais voir.


Message édité par Bidem le 05-09-2008 à 14:07:07
Reply

Marsh Posté le 05-09-2008 à 14:09:30    

non non non :) g en tout 100000, mais les resultats seront limite a par exemple 20.
voici ma requete ds le fichier xhr_recherche.php:

Code :
  1. SELECT ... FROM auteurs WHERE nom LIKE '%$search%'


Message édité par redah75 le 05-09-2008 à 14:09:48
Reply

Marsh Posté le 05-09-2008 à 14:13:34    

Tu ajoutes à ton formulaire un champ caché contenant l'id de l'auteur (tu récupères nom+id via ta fonction xhr)?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-09-2008 à 15:45:12    

bonne idee... :)
merci ;)

Reply

Marsh Posté le 05-09-2008 à 15:46:02    

une autre petite question, est ce mieux de recuperer les resultats sous forme de texte ou plutot en xml??

Reply

Marsh Posté le 05-09-2008 à 15:46:02   

Reply

Marsh Posté le 05-09-2008 à 16:06:09    

Citation :

Tu ajoutes à ton formulaire un champ caché contenant l'id de l'auteur (tu récupères nom+id via ta fonction xhr)?


 
C'est pas top ça.
Ton navigateur va faire un appel au serveur (qui va faire une requête SQL) pour récupérer une info dont le seul but est d'être transmise au serveur...
 
Autant attendre la soumission du formulaire pour faire ça.

Reply

Marsh Posté le 05-09-2008 à 16:08:18    

Bidem a écrit :

Citation :

Tu ajoutes à ton formulaire un champ caché contenant l'id de l'auteur (tu récupères nom+id via ta fonction xhr)?

 

C'est pas top ça.
Ton navigateur va faire un appel au serveur (qui va faire une requête SQL) pour récupérer une info dont le seul but est d'être transmise au serveur...

 

Autant attendre la soumission du formulaire pour faire ça.

 

c'est négligeable. Tu ne fais pas une requête supplémentaire, t'en fais déjà une pour le nom, il suffit de transmettre l'ID en plus. Ce qui t'évite de refaire une requête pour retrouver l'id à partir du nom à la validation, à compter qu'il soit unique.


Message édité par skeye le 05-09-2008 à 16:08:33

---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed