Textbox met dropdown onchange.

Status
Niet open voor verdere reacties.
Home site:
Code:
<head>
			<meta charset="utf-8">
			<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
			<title></title>
			<meta name="description" content="">
			<meta name="viewport" content="width=device-width">
			<link href="select2-3.5.1/select2.css" rel="stylesheet"/>
			<link rel="STYLESHEET" href="GRIP.css" type="text/css">
		</head>
[js]<input type="hidden" id="search" value="" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="select2-3.5.1/select2.js"></script>
<script>
$(document).ready(function() {
$("#search").select2({
placeholder: "Search for site id",
minimumInputLength: 1,
ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
url: "getSiteNames.php?q=test",
dataType: 'json',
data: function (term, page) {
return {
q: term, // search term
page_limit: 10 // Kun je later gebruiken
};
},
results: function (data, page) { // parse the results into the format expected by Select2.
console.log(data);
}
}
});
});
</script>[/js]

getSiteNames:
PHP:
$sql = "SELECT DISTINCT SiteId FROM Dim.Host WHERE SiteId IS NOT NULL AND SiteId LIKE '". $_GET["q"] ."%'";
	//$sql = "SELECT DISTINCT name FROM db WHERE name IS NOT NULL AND name LIKE '". $_GET["q"] ."%'";
	$stmt = sqlsrv_query( $link, $sql);
	
	if( $stmt === false )
	{
		 die( print_r( sqlsrv_errors(), true));
	}
	while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) 
	{
		echo $row["name"];
	}
?>

{"keyword" : "<?= $_GET['q'] ?>"}

Die echo uiteraard even voor de checks..
 
[js]url: "getSiteNames.php?q=test",[/js]
We zouden het HTML-bestand met rust laten toch? ;)

De ?q= wordt door dit stukje al toegevoegd :)
[js]
data: function (term, page) {
return {
q: term, // search term
page_limit: 10 // Kun je later gebruiken
};
},[/js]
Dit moet het dus worden:
[js]url: "getSiteNames.php",[/js]
Je hoeft alleen getNames.php maar in je browser aan te roepen, niet via het HTML-bestand dus.

Als je bijv naar http://localhost/getNames.php gaat zul je de foutmelding moeten krijgen dat q geen gedefineerde index is.
Bij http://localhost/getNames.php?q=test moet het wel goed gaan.

Ik mis nog wel een aantal zaken binnen getNames.php, ik neem aan dat je wel een <?php-tag bovenaan hebt en dat daar ook iets van een include staat om database verbinding te leggen.
 
Database verbingen en tags staan er inderdaad.
Ik zal toepassen wat je me vertelden en dit wss morgen testen.

Alvast een fijne avond en bedankt voor de hulp!
 
Klopt. Wanneer ik dan ?q=test erachter zet is de output van de pagina : {"keyword" : "test"}
Qua tags en database connectie staat alles goed. Ik heb ook een echo neergezet zodat ik zeker weet dat de output vanuit de database er wel degelijk is.

Ik ben erachter gekomen dat wanneer ik een 'Q' intyp hij blijft hangen op 'searching'..
Wanneer ik een 'C' intyp hij zegt 'loading failed'.

De Q staat niet in de database maar de C wel. Dit getest. En alle letters die niet in de database staan blijft die dus op zoeken.
Er is dus wel degelijk een link met de database en hij ziet ook wat er wel en niet instaat. Het is dus puur het tonen.
Ik hoop dat we hierdoor al een groot deel kunnen uitsluiten :)
 
Laatst bewerkt:
Wat is de output in je console in beide gevallen? (Dus met Q en C als zoekterm)

Nu is het zaak dat we een fatsoenlijk JSON gaan genereren :)
PHP:
// Belangrijkste gedeelte:
if ($stmt === false) {
    die( print_r( sqlsrv_errors(), true));
}
$results = array();
while ($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) {
    $results[] = array('name' => $row["name"]);
}
?>
 
{"sites" : <?= json_encode($results) ?>}

Nu zou je bij het wijzigen van zoekterm in je console andere resultaten moeten krijgen.
 
Code:
Object {keyword: "q"} GRIPHome.php:100
Uncaught TypeError: Cannot read property 'hasError' of undefined

met C geeft het geen enkele output in de console. Alleen in de textbox de error 'loading failed'.
Jou code gedeelte erbij gezet, ervan uit gaande dat 'name' de tabel naam is.

PHP:
	$link = sqlsrv_connect( $serverName, $connectionInfo);
	if( $link === false )
	{
		 echo "Unable to connect.</br>";
		 die( print_r( sqlsrv_errors(), true));
	}
	
	$sql = "SELECT DISTINCT name FROM db WHERE name IS NOT NULL AND name LIKE '". $_GET["q"] ."%'";
	$stmt = sqlsrv_query( $link, $sql);
	
	if( $stmt === false )
	{
		 die( print_r( sqlsrv_errors(), true));
	}
	$results = array();
	while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) 
	{
		$results[] = array('name' => $row["name"]);
	}
?>

{"sites" : <?= json_encode($results) ?>}

De database link en php tags staan in mijn document uiteraard gewoon goed.

Wanneer ik dit stukje code toepas, krijg ik bij 'Q' en 'C' constant 'Searching'
 
Laatst bewerkt:
Jou code gedeelte erbij gezet, ervan uit gaande dat 'name' de tabel naam is.

Het is jouw code welke ik gekopieerd heb :D, dus ik ga er van uit dat jij een kolom "name" hebt.

We hebben 2 waardes nodig van de data, een naam (daar zoeken we op immers) en een unieke referentie naar het record (meestal een ID). Die laatste hebben we nodig om uiteindelijk een koppeling te kunnen maken zodat we hem kunnen wijzigen nietwaar?

Wat is de output wanneer je het PHP-bestand met ?q=c aanroept?
 
Klopt. Alleen is die naam uiteraard even aangepast. Zorgt zelfs bij mij voor verwarring maar het moet.

Dit is de output die ik krijg:

Code:
{"sites" : [{"name":"NAAM!"}
En dat voor elke 'naam' die in de database staat. Dit gebeurd zo te zien dus prima.

edit:

In de console overigens krijg ik deze output bij 'C'.

Uncaught TypeError: Cannot read property 'hasError' of undefined select2.js:1780
Object {sites: Array[28]}
Die 28 klopt ook, er zijn 29 namen in de tabel met een C :)
 
Laatst bewerkt door een moderator:
Oke, stapje verder dus :)

Verander nu in het HTML-bestand de results callback naar
[js]results: function (data, page) {
console.log(data.sites);
return { results: data.sites }
}[/js]
Ik zie dat Select2 een JSON array verwacht met een veld "id" en een veld "text", als je de JSON alleen gebruikt voor Select2 kun je het
PHP:
array('name' => $row["name"]);
vervangen door
PHP:
array('text' => $row["name"]);
(Er moet natuurlijk nog wel een waarde "id" bij ;))
 
In chrome werkt het, ik krijg de goede output in de textbox, maar in ie werkt dit helaas niet en de eis was (vraag me niet waarom) dat het werkend moet in IE haha.
In IE krijg ik nog steeds 'searching' bij alles wat ik invoer maar zie daar ook geen console.. dit heb ik voorgaande keren alleen getest met chrome omdat ik daar wel een console had..

edit:

Het werkt nu wel in IE, wss moest de browser gewoon opnieuw opstarten.
Zou je me hierin nog verder kunnen helpen om elke output te kunnen aanklikken als link? :eek:
 
Laatst bewerkt:
Welke versie is het van IE? Voor zover ik weet is F12 de knop om in IE de console te zien te krijgen (in ieder geval van IE10)

Select2 ondersteunt IE8+ dus dat moet wel goed zitten.
 
Mijn vorige aanpassing net niet op tijd gedaan dat je dat kon lezen, hij werkt inderdaad.
F12 krijg ik Developer Tools maar kan niet een console vinden..
 
Waarschijnlijk komt dat omdat hij nog een "id" veld verwacht vanuit de JSON :)

Je PHP-bestand dus aanpassen zodat het dit wordt (En niet vergeten je query aan te passen ;))
PHP:
$results[] = array(
    'id' => $row['id'],
    'text' => $row['name']
);
 
Dit zal dan in de while loop moeten neem ik aan?
Moet die ID nog iets anders worden?
 
Laatst bewerkt:
Klopt, daar krijgen we immers toegang tot de $row-variabele :)

Wat bedoel je met je laatste vraag? De keys van de array moeten zo blijven, als jij een andere kolomnaam voor de unieke referentie naar het record hebt dan moet je die voor de aanroep gebruiken.
 
Dit heb ik nu toegepast. Ik moest ee andere unieke referentie hebben haha.
Dit is nu toegepast maar krijg nog steeds loading failed.

Wanneer ik de Q intoets (niet in db) krijg ik [] terug in de console.
Bij de C (wel in db) krijg ik niets terug.
 
Dat is vreemd, hij geeft dus wel een lege array terug als je een letter gebruikt welke niet voorkomt. Maar als je één gebruikt die wel voorkomt wordt er niets teruggegeven.

Wat is de output van het PHP-script als je die rechtstreeks aanroept met "?q=c"?
 
Notice: Undefined index: id in D:pATH on line 45

Die id moet kloppen en heb er ook een sql voor aangemaakt.
 
Je weet dat de benaming binnen $row[] overeen moet komen met je kolomnaam? ;)

Hoe ziet je query er uit?
 
Code:
$sql2 = "SELECT DISTINCT id FROM db WHERE id IS NOT NULL'";

Edit:

Schijnbaar krijg ik bij elk idee 'null' terug. Terwijl als ik puur de query echo ik wel alles goed terug krijg.

{"id":null,"text":"naam1"}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan