login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Autocomplete

Offline rpgnox - 03/03/2010 18:36
Avatar van rpgnoxPHP interesse Ik probeer een auto complete in mijn script te bouwen zodat bij het typen gebruikers snel kunnen worden gevonden

Deze gebruikers laad ik uit de tabel users en wil ze selecteren op login. Echter krijg ik het niet voor elkaar om de autocomplete ook daadwerkelijk te laten werken.

Iemand enig idee hoe ik dit kan oplossen?

  1. <?php
  2.  
  3. // PHP5 Implementation - uses MySQLi.
  4. // mysqli('localhost', 'yourUsername', 'yourPassword', 'yourDatabase');
  5. $db = new mysqli('localhost', 'root' ,'root', 'naamdb');
  6.  
  7. if(!$db) {
  8. // Show error if we cannot connect.
  9. echo 'ERROR: Could not connect to the database.';
  10. } else {
  11. // Is there a posted query string?
  12. if(isset($_POST['queryString'])) {
  13. $queryString = $db->real_escape_string($_POST['queryString']);
  14.  
  15. // Is the string length greater than 0?
  16.  
  17. if(strlen($queryString) >0) {
  18. // Run the query: We use LIKE '$queryString%'
  19. // The percentage sign is a wild-card, in my example of countries it works like this...
  20. // $queryString = 'Uni';
  21. // Returned data = 'United States, United Kindom';
  22.  
  23. // YOU NEED TO ALTER THE QUERY TO MATCH YOUR DATABASE.
  24. // eg: SELECT yourColumnName FROM yourTable WHERE yourColumnName LIKE '$queryString%' LIMIT 10
  25.  
  26. $query = $db->query("SELECT login FROM users LIKE '$queryString%' LIMIT 10");
  27. if($query) {
  28.  
  29. // While there are results loop through them - fetching an Object (i like PHP5 btw!).
  30. while ($result = $query ->fetch_object()) {
  31. // Format the results, im using <li> for the list, you can change it.
  32. // The onClick function fills the textbox with the result.
  33.  
  34. // YOU MUST CHANGE: $result->value to $result->your_colum
  35. echo '<li onClick="fill(\''.$result->value.'\');">'.$result->value.'</li>';
  36. }
  37. } else {
  38. echo 'ERROR: There was a problem with the query.';
  39. }
  40. } else {
  41. // Dont do anything.
  42. } // There is a queryString.
  43. } else {
  44. echo 'There should be no direct access to this script!';
  45. }
  46. }
  47. ?>


En in mijn scripts laad ik de tekst via

  1. <div>
  2. <form>
  3. <div>
  4. Ding:
  5. <br />
  6. <input type="text" size="30" value="" id="inputString" onkeyup="lookup(this.value);" onblur="fill();" />
  7. </div>
  8.  
  9. <div class="suggestionsBox" id="suggestions" style="display: none;">
  10. <img src="upArrow.png" style="position: relative; top: -12px; left: 30px;" alt="upArrow" />
  11. <div class="suggestionList" id="autoSuggestionsList">
  12. &nbsp;
  13. </div>
  14. </div>
  15. </form>
  16. </div>

7 antwoorden

Gesponsorde links
Offline Martijn - 03/03/2010 19:30
Avatar van Martijn Crew PHP wat krijg je wel, helemaal niets of wat? Je zou een mysql_num_rows() kunnen doen om te kijken of er wel iets geselecteerd wordt.

Heb je firefox? Zo ja, heb je firebug? Geeft die misschien een JS foutmelding?
Offline rpgnox - 03/03/2010 19:56
Avatar van rpgnox PHP interesse Dank je wel voor de toelichting. Helaas is het met het bovenstaande script niet redelijk goed gelukt maar heb nu een andere oplossing gevonden

  1. <div>
  2. <form method="get" action="">
  3. <small style="float:right">Hidden ID Field: <input type="text" id="testid" value="" style="font-size: 10px; width: 20px;" disabled="disabled" /></small>
  4. <label for="testinput">Person</label>
  5. <input style="width: 200px" type="text" id="testinput" value="" />
  6. <input type="submit" value="submit" />
  7. </form>
  8. </div>


Vervolgens wordt er bij het zoeken van een naam nu gezocht in de array van het script

http://pastebin.com/L0HgRvPd

Nu wil ik ipv de array gebruikers laden uit de tabel users en wil ze selecteren op login. Echter krijg ik het niet voor elkaar om de autocomplete ook daadwerkelijk te laten werken.

Iemand enig idee?

Offline Jelmerholland - 03/03/2010 22:37
Avatar van Jelmerholland PHP beginner Hoe bedoel je je wil ze selecteren op login? Op de gebruikersnaam? Of ze ingelogd zijn?

(verklaar je nader aub ;) )
Offline rpgnox - 03/03/2010 22:53
Avatar van rpgnox PHP interesse Nee ik wil ze selecteren op de gebruikersnaam. Dit is in mijn tabel users --> login ;)
Offline Jelmerholland - 04/03/2010 07:31
Avatar van Jelmerholland PHP beginner okay, dus de username wordt opgslagen in jouw tabel in login.

Dan kan je toch gewoon zo doen?
  1. mysql_query("SELECT * FROM users WHERE login = ".$_GET['login']."") or die(mysql_error());

LET OP! je moet de $_get wel escapen en je moet 'm veilig maken met de mysql_replace_special_string functie ('T was iets in die richtign, ik weet 'm ook niet uit m'n hoofd.) Maar alleen op username is wel een risico en je moet ook zeker niet SELECT * doen, want dan haal je dus ook 't password op, en dat wil je natuurlijk niet ;)
Offline rpgnox - 04/03/2010 10:58
Avatar van rpgnox PHP interesse Oke dank je wel.

Heb er nu dit van gemaakt
http://pastebin.com/eXhitPZm

Maar krijg nu continu een melding: error Ajax 500
Offline Jelmerholland - 04/03/2010 17:21
Avatar van Jelmerholland PHP beginner Hmm, ik weet 't ook niet :/ Heb je'm ook ergens geüpload staan?

Ps. Jij haalt alles van de user binnen in je query met de '*' maar laadt ie dan ook niet het password? Of heb je die niet in je database staan. Bescherm jezelf door daar een betere query van te maken. Bijvoorbeeld alleen de username inladen. OF alleen de username en wat anders. Maar het scheelt je weer 1 extra risico. Is 1 mogelijk lek minder.

Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.509s