Avatar billede h_thunbo Nybegynder
06. september 2010 - 16:43 Der er 8 kommentarer og
2 løsninger

Lave et array ud fra MySQL så det passer ind i autocomplete koden.

Hej Eksperter!

Mit problem består i at jeg har en autocomplete funktion, hvor valgmulighederne ser således ud:

<script type="text/javascript">
var tokens = [['Anguilla', 'Ai'], ['Antarctica', 'Aq'], ['Argentina', 'Ar'], ['Armenia', 'Am']]
</script>

Men "var tokens" skal indeholde en masse brugernavne hentet fra MySQL database, så hvordan er det lige jeg får dem sat ind i stedet så jeg ikke skal sidde og skrive dem manuelt men den selv laver arrayet så stort at alle er med?

fx:
$bruger1 = Anna
$bruger2 = Benny
$bruger3 = Charlotte
osv osv

var tokens = [['Anna', ''], ['Benny', ''],['Charlotte', ''], osv osv ]
Avatar billede Slettet bruger
06. september 2010 - 18:12 #1
Du kunne bruge AJAX til at kalde en PHP side der henter resultaterne fra MySQL forspørgelsen og udskriver dem i JSON format.
Den JSON kode kan du så bruge som din 'tokens' variabel.
Avatar billede h_thunbo Nybegynder
06. september 2010 - 18:17 #2
Det lyder meget godt, men jeg ved ikke rigtig hvordan jeg skal lave det? Jeg kender ikke til JSON eller AJAX.
Avatar billede Slettet bruger
06. september 2010 - 23:53 #3
Hvis du bruger jQuery kan du meget nemt fixe det, ved at bruge post()-metoden.
Hvis ikke, bliver du nød til at læse lidt nærmere om JSON og AJAX. Kan ikke lige komme på nogle sider der forklarer det bedre end andre, så prøv at Google det.
Hvis du opgiver at bruge AJAX til det, så burde du også kunne blande Javascript koden og PHP sammen, men det er ikke noget jeg vil anbefale at gøre.
Avatar billede h_thunbo Nybegynder
07. september 2010 - 18:10 #4
Nu har jeg fundet en kode der måske er lettere at arbejde med. Det ser således ud, det med kursiv har jeg selv sat ind:



<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/plugins/autocomplete/demo/main.css" type="text/css" />
  <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/plugins/autocomplete/jquery.autocomplete.css" type="text/css" />
  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/autocomplete/lib/jquery.bgiframe.min.js"></script>
  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/autocomplete/lib/jquery.dimensions.js"></script>
  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/autocomplete/jquery.autocomplete.js"></script>

<?php
   
$session = mysql_connect("Host", "User", "Password");
mysql_select_db ("Name");

$res = mysql_query("SELECT brugernavn FROM Name");
while($rows = mysql_fetch_assoc($res)){ 
    $brugernavn[] = $rows['brugernavn'];  }
?>


<script>
  $(document).ready(function(){
    var data = "Core Selectors Attributes Traversing Manipulation CSS Events Effects Ajax Utilities".split(" ");
$("#example").autocomplete(data);
  });
  </script>
 
</head>

<body>
  API Reference: <input id="example" /> (try "C" or "E")
</body>
</html>


Hvad skal der så til for at gøre var data = brugernavn array'et? Og er .split(" ") god nok til at skelne de forskellige brugernavne?
Avatar billede xicrow Nybegynder
07. september 2010 - 19:30 #5
Du kunne også bare bruge "almindelig" javascript, sammen med PHP og MySQL:

<script type="text/javascript">
<?php
// Åben forbindelse til databasen
$session = mysql_connect("Host", "User", "Password");
mysql_select_db ("Name");

// Hent alle brugernavne fra databasen
$sql = '
select brugernavn
from brugere
order by brugernavn asc;';
$query = mysql_query($sql);

// Opret JS-array til brugernavne
echo 'var brugere = [];';

// Loop gennem brugere fra databasen
while ($row = mysql_fetch_object($query)){
  // Tilføj brugernavn til JS-array
  echo 'brugere[] = "'.$row->brugernavn.'";';
}
?>
</script>


/xicrow
Avatar billede Slettet bruger
07. september 2010 - 19:33 #6
Det som den kode du har fundet der gør, er den deler linjen "Core Selectors Attributes Traversing Manipulation CSS Events Effects Ajax Utilities" op ved hvert mellemrum.
Variablen 'data' bliver så lavet om til et array hvor hver del af linjen, bliver tilføjet til.
Dvs. at data[0] indeholder 'Core', data[1] indeholder 'Selectors' og så videre.

Hvis du vil opnå det samme med din brugerliste så skal du lave dit array $brugernavn om til en stor streng, med mellemrum mellem hvert brugernavn, som du så erstatter indeholdet af 'data' med.
Det kan gøres således:
<?php
 
$session = mysql_connect("Host", "User", "Password");
mysql_select_db ("Name");

$res = mysql_query("SELECT brugernavn FROM Name");

$brugernavn = array();
while($rows = mysql_fetch_assoc($res)){
  $brugernavn[] = $rows['brugernavn'];
}

$brugernavne = implode(" ", $brugernavn);
?>

<script type="text/javascript">
$(document).ready(function(){
  var data = "<?php print $brugernavne; ?>".split(" ");
  $("#example").autocomplete(data);
});
</script>

Jeg er dog ikke særlig stor fan af at rode Javascript og PHP sammen, men det er jo dit valg - ikke mit.

Ovenstående kode er ikke testet på nogen måde, men det skulle gerne vise hvordan det kan gøres :-)
Avatar billede Slettet bruger
07. september 2010 - 19:34 #7
Hov havde ikke set @xicrow's kommentar.. men hellere sent end aldrig ik'? :-)
Avatar billede h_thunbo Nybegynder
07. september 2010 - 21:09 #8
Hej iorden Roxki! Det var faktisk din løsning jeg fik til at virke. Jeg bøvlede lidt med dem begge to (er ikke lige en ørn til det her) men fik ikke xicrows løsning til at virke... Det kan godt være det bare er mig der klumre i det!? Men jeg er rigtig glad for jeres indsats så vil i ikke begge sende et svar, så fordeler jeg point :-)
Avatar billede Slettet bruger
07. september 2010 - 21:35 #9
Det var så lidt, så du får et svar fra mig her.
Avatar billede xicrow Nybegynder
07. september 2010 - 22:47 #10
Og et svar fra mig af
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester