login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Ajax met dbase query

Offline DRobje - 07/08/2007 21:34
Avatar van DRobjeNieuw lid hallo, ik heb op het net een leuk Ajax scriptje gevonden. nu werkt dit met een aantal variabele tekst bestanden maar kan natuurlijk ook met een database. Hoe zet ik nu die query in elkaar en welke variabelen moet ik dan blijven gebruiken. Mijn db heet users en het gaat om het zoekveld name waarna het bijbehorende email adres en telnr tevoorschijn moet komen. dit is een stuk van de code:
  1. /* LET OP: Het is test-script - het is heel erg inefficient - in de praktijk worden suggesties natuurlijk uit een database gehaald */
  2.  
  3. $invoer = $_REQUEST["invoer"];
  4.  
  5. $namen = array("albert", "anna", "aart", "bart", "carel", "cees", "dirk", "eduard", "ed", "frits", "gert", "gerda", "hendrik", "harry", "henrieke", "karel", "kiki", "klaas", "laura", "laurens", "marc", "marieke", "marjolein", "pieter", "pipo", "petrarca", "rene", "rambo", "sandra", "sandrien", "sanne", "simon", "sinterklaas", "timbo", "timmie", "tinus", "titus");
  6.  
  7. $resultaten = array();
  8.  
  9. /* sorteer de namenarray */
  10.  
  11. sort($namen);
  12.  
  13. $invoer_lengte = strlen($invoer);
  14.  
  15. if($invoer_lengte >= 1)
  16. {
  17. /* alle namen afgaan of te kijken of er overeenkomsten zijn met de invoer */
  18. for($c=0; $c < count($namen); $c++)
  19. {
  20. $temp = substr($namen[$c], 0, $invoer_lengte);
  21. if($temp == $invoer){
  22. /* we hebben een overeenkomst */
  23. array_push($resultaten, $namen[$c]);
  24. }
  25. }


en dit is het stukje HTML

  1. function doe_suggestie()
  2. {
  3. if( !document.getElementById || !document.getElementsByTagName) return false;
  4.  
  5. var myConn = new XHConn();
  6. if( !myConn ) return false;
  7.  
  8.  
  9. var invoer = "&invoer=" + invoer_veld.value;
  10.  
  11. /* functie die uitgevoerd wordt als het laden klaar is */
  12. var fnWhenDone = function(oXML)
  13. {
  14. var suggesties = oXML.responseXML.getElementsByTagName("suggestie");
  15. var suggestie_lijst = "<ul>";
  16. for(var c = 0; c < suggesties.length; c++)
  17. {
  18. suggestie_lijst += "<li><a href=\"doe_iets.php?woord=" + suggesties[c].firstChild.nodeValue + "\">" + suggesties[c].firstChild.nodeValue + "</a></li>";
  19. }
  20. suggestie_lijst += "</ul>";
  21. suggestie_container.innerHTML = suggestie_lijst;
  22. }
  23. /* connecten met PHP script */
  24. myConn.connect("doe_suggestie.php", "POST", invoer, fnWhenDone);
  25. }
  26.  
  27. function opzetten()
  28. {
  29. var invoer_veld = document.getElementById("invoer_veld");
  30. var suggestie_container = document.getElementById("suggestie_container");
  31. invoer_veld.onkeyup = doe_suggestie;
  32. }
  33.  
  34. window.onload = opzetten;
  35.  
  36. </script>
  37.  
  38. </head>
  39. <body>
  40. <p>Vul hier een stuk van een woord in</p>
  41. <input type="text" size="20" id="invoer_veld" name="invoer">
  42. <div id="suggestie_container"></div>

12 antwoorden

Gesponsorde links
Offline Stijn - 07/08/2007 22:34 (laatste wijziging 07/08/2007 22:35)
Avatar van Stijn PHP expert In je php script moet je connectie maken met je mysql en een mysql query uitvoeren. Deze zou er zo uit kunnen zien:

  1. $record = mysql_fetch_assoc( mysql_query("SELECT * FROM users WHERE name='".$invoer."'") );

Je kan nu het e-mail, name en andere velden terug sturen door ze te echoën en deze met javascript mooi te plaatsen op je pagina.
  1. echo $record['email'] . ',' . $record['name'];

En dan in de functie die de request afhandelt (dit zal de functie fnWhenDone zijn):
  1. var output = myConn.responseText.split(',');
  2. for( i = 0 ; i < output.length ; i++ ) {
  3. document.write( output[i] + '<br />' );
  4. }

Let op:
  1. var myConn = new XHConn();
Dit stukje moet buiten de functie doe_suggestie() staan omdat het myConn een global variable moet zijn en geen local variable.
Offline DRobje - 07/08/2007 23:00 (laatste wijziging 07/08/2007 23:28)
Avatar van DRobje Nieuw lid Thx voor de moeite. ik ga gelijk aan de slag.

edit:

oei, er klopt iets niet met de variabelen. ik denk dat het te maken heeft met $namen....
nu klopt er helemaal niks meer van. geen foutmelding maar ook geen suggestie... wat nu??
Offline ikkedikke - 07/08/2007 23:42
Avatar van ikkedikke PHP expert Een beetje een loze foutbeschrijving.
Ik raad je aan om met JSON te werken. Echt ideaal voor dit soort dingen. (Misschien dat wanneer je het op die manier probeert, je ook geen fouten meer krijgt.)
Offline DRobje - 07/08/2007 23:48
Avatar van DRobje Nieuw lid nou ja loze.. er gebeurt gewoon helemaal niks. ik krijg dus geen suggesties. en ik weet dat er wel meerdere zijn maar waarom is dat beter???

Er zit iets in die variabelen niet lekker.
Offline Stijn - 08/08/2007 00:16
Avatar van Stijn PHP expert Mhz ik werk altijd met Text en ik zie dat jij met XML werkt. Kan je mij eens de volledige PHP code geven van je eerste codefragment? Ik heb enkele foutjes gemaakt in me eerste repley. Zet je code op plaatscode.be.
Offline DRobje - 08/08/2007 00:34
Avatar van DRobje Nieuw lid ok. staat op #6203 #6204 #6205.

Offline Stijn - 08/08/2007 01:00
Avatar van Stijn PHP expert http://www.plaatscode.be/6208/ - probeer deze php code eerst. Als dit werkt kan je email etc toevoegen. De javascript was correct, ik zat fout.
Offline DRobje - 08/08/2007 08:26 (laatste wijziging 08/08/2007 08:31)
Avatar van DRobje Nieuw lid Stijn helaas, ook dit werkt niet. dataconnectie moet werken. maar geen suggesties.
ik heb het exact aangehouden op de db gegevens na.
Offline Stijn - 08/08/2007 08:47
Avatar van Stijn PHP expert Dan zal het zijn omdat hij geen namen vindt in je tabel. Roep de php pagina eens apart aan in je browser maar voeg dit eens toe achter je URL: ?invoer=VUL HIER EEN NAAM IN OM TE TESTEN.
Offline DRobje - 08/08/2007 08:50 (laatste wijziging 08/08/2007 18:11)
Avatar van DRobje Nieuw lid ik heb iets gevonden. de variabele $resultaten... ik heb nu van $row resultaten gemaakt en nu gebeurt er iets.
maar nog geen namen. als ik de invoer gebruik in de url krijg ik een foutmelding:
Warning: array_push(): First argument should be an array in /www/htdocs/*****/ajax/doe_suggestie.php on line 33

en :
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/****/ajax/doe_suggestie.php:33) in /www/htdocs/****/ajax/doe_suggestie.php on line 40


EDIT::
ok ook gevonden denk ik. die array was te vroeg gesloten. bij invoer in de url krij ik nu:


Dit XML-bestand lijkt geen geassocieerde stijlinformatie te hebben. De documentstructuur is hieronder weergegeven.

&#8722;
<suggesties>
<suggestie>rob
</suggestie>
<suggestie>
</suggestie>
<suggestie>
</suggestie>


Maar het werkt dus nog steeds niet.

EDIT::

Ok, na wat geklooi werkt het een beetje. Maar normaal gesproken zo je bij het intypen van 1 letter al de suggestie moeten krijgen. Dat gebeurt helaas niet. Als ik dat php script aan zou roepen met 1 letter zou deze dus alle namen met die letter moeten geven. Dit gebeurt dus niet want de hele naam moet ingevoerd worden anders kent de db het niet. Waar moet ik nog wat aanpassen?? moet iets heel klein zijn.
Offline remcobers - 08/08/2007 19:04
Avatar van remcobers PHP expert Invoer moet er in voor komen:

  1. SELECT * FROM users WHERE name LIKE '%".$invoer."%'


Invoer zijn de eerste letters van de naam:

  1. SELECT * FROM users WHERE name LIKE '".$invoer."%'


Meer uitleg Zie hierzo ;)
Offline DRobje - 08/08/2007 19:52 (laatste wijziging 09/08/2007 17:22)
Avatar van DRobje Nieuw lid hmmm... dat gaat al iets beter ja, maar ik heb bv 4 namen met een 'r' en dan geeft hij er geen 2e bij. ik moet dan de naam voluit typen. behalve een naam met een 'd' die komt maar 1 x voor en bij het typen van de eerste 2 letters geeft hij dan de suggestie. Hoe zou dit komen?? Zit het in de query of in het JS script. Als ik het test zonder database dus met die $name array() werkt het wel perfect. Maar ik moet dus met een db werken.

niemand meer???
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.278s