Ik ben bezig met een soort van auto aanvullen voor artiesten.

De artiesten zijn nu vast gecodeerd zoals hieronder.

	$aUsers = array(
		"Voornaam Achternaam",
		"Voornaam Achternaam",
		"Voornaam Achternaam",
		"Voornaam Achternaam",
		"Voornaam Achternaam",
		"Voornaam Achternaam",
		"Voornaam Achternaam"
	);


Maar de bedoeling is dus dat voornaam en achternaam uit een database komen. Die velden heten first_name en last_name en zitten in de tabel atists.

Nu heb ik dit geprobeerd:


	$sql = "SELECT * FROM artists";
	$query = mysql_query($sql);
	while($data = mysql_fetch_array($query)){
		$firstname = $data['first_name'];
		$lastname = $data['last_name']; 
		echo $firstname . ' ' . $lastname . ',';
	}


Maar waar ik niet uitkom is hoe ik het in een array krijg zoals bovenaan staat. Kan iemand mij even op weg helpen?

<?php
    $sql = "SELECT * FROM artists";
    $query = mysql_query($sql);
    $aUsers = array ();
    while($data = mysql_fetch_array($query)){
        array_push ($aUsers, data['first_name'] . ' ' . $data['last_name']);
    } 
?>

[edit]Of, nog iets netter:[/edit]

<?php
    $sql = "
        SELECT CONCAT(first_name, ' ', last_name) AS fullname
        FROM artists
        ";
    if (!$res = mysql_query($sql)) {
        trigger_error (mysql_error ());
    }
    else {
        $aUsers = array ();
        while($data = mysql_fetch_array($query)){
            array_push ($aUsers, data['fullname']);
        }
    }

?>
Het werkt toch niet op een of andere manier. Komen ze op deze manier precies zo onder elkaar te staan?

Misschien was het toch niet zo eenvoudig als ik dacht.. dit is het hele script:


<?php
/*
note:
this is just a static test version using a hard-coded countries array.
normally you would be populating the array out of a database

the returned xml has the following structure
<results>
	<rs>foo</rs>
	<rs>bar</rs>
</results>
*/	
	include "../connect.php";
	
    $sql = "SELECT * FROM artists";
    $query = mysql_query($sql);
    $aUsers = array ();
    while($data = mysql_fetch_array($query)){
        array_push ($aUsers, $data['first_name'] . ' ' . $data['last_name']);
    } 

	/*
	$aUsers = array(
           "Voornaam Achternaam",
           "Voornaam Achternaam",
           "Voornaam Achternaam",
           "Voornaam Achternaam",
           "Voornaam Achternaam",
           "Voornaam Achternaam",
           "Voornaam Achternaam"
	);
	*/
	
	$input = strtolower( $_GET['input'] );
	$len = strlen($input);
	
	
	$aResults = array();
	
	if ($len)
	{
		for ($i=0;$i<count($aUsers);$i++)
		{
			// had to use utf_decode, here
			// not necessary if the results are coming from mysql
			//
			if (strtolower(substr(utf8_decode($aUsers[$i]),0,$len)) == $input)
				$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
			
			//if (stripos(utf8_decode($aUsers[$i]), $input) !== false)
			//	$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
		}
	}
	
	
	
	
	
	header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
	header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
	header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
	header ("Pragma: no-cache"); // HTTP/1.0
	
	
	
	if (isset($_REQUEST['json']))
	{
		header("Content-Type: application/json");
	
		echo "{\"results\": [";
		$arr = array();
		for ($i=0;$i<count($aResults);$i++)
		{
			$arr[] = "{\"id\": \"".$aResults[$i]['id']."\", \"value\": \"".$aResults[$i]['value']."\", \"info\": \"\"}";
		}
		echo implode(", ", $arr);
		echo "]}";
	}
	else
	{
		header("Content-Type: text/xml");

		echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?><results>";
		for ($i=0;$i<count($aResults);$i++)
		{
			echo "<rs id=\"".$aResults[$i]['id']."\" info=\"".$aResults[$i]['info']."\">".$aResults[$i]['value']."</rs>";
		}
		echo "</results>";
	}
?>


Er zit nog een .js bestand bij maar volgens mij heeft die hier geen invloed op. Op een andere pagina heb ik gewoon dit staan:


<input type="text" id="testinput" /> 


EDIT

En dit staat onderaan die pagina

<script type="text/javascript">
	var options = {
		script:"artiesten.php?json=true&",
		varname:"input",
		json:true,
		callback: function (obj) { document.getElementById('testid').value = obj.id; }
	};
	var as_json = new AutoSuggest('testinput', options);
	
	
	var options_xml = {
		script:"artiesten.php?",
		varname:"input"
	};
	var as_xml = new AutoSuggest('testinput_xml', options_xml);
</script>


Wanneer ik niets wijzig werkt het allemaal. Dus typ ik een A dan geeft hij de rest van de naam. Maar wanneer ik het uit de database probeer te halen doet hij niets meer. Ook niet meer 'no result'.

Word je hier wijzer van? :P
Het kan zijn dat je query fout gaat. Op regel 15 voer je hem uit, maar je controleert nergens of hij wel gelukt is. Doe eens dit:

<?php
    $sql = "SELECT * FROM artists";
    if ($res = mysql_query ($sql)) {
        echo mysql_num_rows ($res) . ' resultaten';
    }
?>

wat zie je dan?
Bedankt voor je snelle reactie steeds.

Hij zegt dan:
5 resultaten (en dat klopt,er zitten vijf namen in)

Maar ook 5 foutmeldingen over headers already send op regel 57,58,59,60,79.
Als je iets print (echo mysql_num_rows....) en je roept daarna de header(...) functie aan, krijg je inderdaad de foutmelding headers already send.

De headers worden namelijk verzonden naar de browser wanneer je iets output.
Als je je test echo mysql_num_rows uitcomment, zijn de overige foutmeldingen qua headers weer verdwenen.

maw: die 5 foutmeldingen kun je dus negeren.
Erg bedankt Jan! Het werkt nu wel, er zat gewoon een klein typefoutje in :) Er moest nog een $ voor data

Reageren