New question

Question:

Date: 13-12-2017 06:52:00 (In Spanish)

Error en autocomplete[Resolved]

Hola,

Tengo un extraño no se si error o que será, pero en la base de datos todo parece bien, no hay espacios ni antes ni después ni tiene caracteres ocultos y ni están vacíos los campos solicitados, pero cuando hago una búsqueda por nombre dentro del campo del autocomplete no me aparece la persona o las personas homónimas a la que se busca, no es solo con ese nombre...es más, son varios nombres que me aparecen en null cuando el campo tiene un nombre, o apellido, cuando la busco por medio del id si aparece el id, pero el nombre sale null. Dentro del buscador que está en la misma hoja si aparece, más no en el autocomplete, la base es pequeña, tiene solo 32000 clientes. Les dejo unas capturas y el código utilizado, espero me puedan ayudar.

No creo que llegue a un limite de muestras, ya que luego de mostrar varios en null por medio de la consola vuelve a aparecer otros homónimos bien, con id mucho después de esa serie en null.... por ejemplo me muestra bien 150 homónimos luego pasan como 50 en null y al final se recupera y me muestra otros 10, 5 , etc con el nombre bueno.

EDITADO: pongo los link ya que no sé porque no se ven las imágenes

en el autocomplete por medio del id en el formulario / link 1 autocomplete 1 / link 2 autocomplete 2

[url=https://ibb.co/k7FOC6][/url]

[url=https://imgbb.com/][/url]

En el autocomplete por medio del id en la consola me sale esto / / link consola

[url=https://ibb.co/jGedem][/url]

En el buscador si aparece / / link buscador

[url=https://imgbb.com/][/url]

Imagen del id en la base / / link base

[url=https://imgbb.com/][/url]

Acá el código JS
	$('#clienteId').autocomplete({
		source: "scripts/cliente.php",
		minLength: 1,
		select:function(evt, ui){
			this.form.nombre.value = ui.item.nombre;
		}
	});


Acá el llamado a la base
<?php
	include_once($_SERVER['DOCUMENT_ROOT'] . '/inc/configs.php');
	if(isset($_REQUEST['term']) && !empty($_REQUEST['term'])){
		$search = trim(strip_tags($_REQUEST['term']));
 
		$search_terms = explode(" ", $search);
		$term_count = 0;
		$q = "";
		$result = array();
		$i = 0;
 
		foreach ($search_terms as $term) {
			$term_count++;
			if($term_count === 1){
				$q .= "CONCAT(`nombre`,' ',`apellido`) LIKE '%$term%' "; 
   			}else{
   				$q .= "AND CONCAT(`nombre`,' ',`apellido`) LIKE '%$term%' ";
   			}
  		}
 
  		$sql = $conn->query("SELECT `idCliente`, CONCAT(`nombre`,' ',`apellido`) AS nombre FROM `CLIENTES` WHERE $q");
 
  		$num = $sql->rowCount();
 
  		if($num > 0){
  			while($row = $sql->fetch(PDO::FETCH_ASSOC)){
  				$result[$i] =  array(
  					'value' => $row['nombre'],
  					'idCliente' => $row['idCliente']
  				);
  				$i++;
   			}
  		}
 
  		$json_result = json_encode($result);
  		echo $json_result;
 	}
?>
Tags: Autocomplete - MySQL - PHP - Question Votes: 0 - Answers: 5 - Views: 5 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 13-12-2017 07:29:47 Tu problema casi estoy seguro es la codificacion, codifica cada elemento del arreglo , ejemplo basico:

    variable arrayresultados=array();
    resultados while(resultado) {
    variablearray = array();
    variablearray['nombre']=resultado['nombre'];
    variablearray['id']=resultado['id'];
    arrayresultados[]=json_encode(variablearray);
    }

    $json_result = json_encode($arrayresultados);

    Pues no solo debes codificar al final enviar, sino cada uno que esta dentro (inclusive dever verificar la asentuacion, utf8, si estan bien)

    Saludos...

    Stryfe™
      Votes: 0 - Link answer
     
  • Date: 13-12-2017 07:45:18 Ya el utf8 lo tengo pre codificado en la llamada de la base, acá te dejo el código, también me muestra tanto nombres acentuados como los que no lo tengan o no se los hayan puesto... es raro el error

    
    		$conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME."",DB_USER,DB_PASS);
    		$conn->exec("set names utf8");
    		$conn->exec('SET lc_time_names = "es_ES"');
    		$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			
    
      Votes: 0 - Link answer
     
  • Date: 13-12-2017 08:16:24 No es lo mismo en la bd, que requieras, a lo que el php te muestra, intenta entrar desde la liga normalmente, o en <pre> para que veas exactamente lo que te regresa, y has lo que te comento de codificar el arreglo primero y al final la matriz, no solo la matriz...
    Saludos :)
      Votes: 0 - Link answer
     
  • Date: 13-12-2017 09:32:05 Hola,
    Hice como me lo mencionaste e igual me deja los registros en null fijate en la imagen, más abajo el código:
    [url=https://imgbb.com/][/url]

     		$num = $sql->rowCount();
     
      		if($num > 0){
      			while($row = $sql->fetch(PDO::FETCH_ASSOC)){
      				$variablearray = array();
      				$variablearray['nombre']=$row['nombre'];
      				$variablearray['idCliente']=$row['idCliente'];
      				$arrayresultados[]=json_encode($variablearray);
       			}
      		}
     
      		$json_result = json_encode($arrayresultados);
      		echo $json_result;
    
      Votes: 0 - Link answer
     
  • Date: 13-12-2017 09:57:44 Ya encontré el error... al parecer cuando haces un CONCAT y entre las filas hay valores NULL (que no esten vacíos ' ' , sino que explíxitamente diga NULL) al parecer no lo agrega correctamente y muestra el NULL como resultado final.

    Para arreglar eso se debe de agregar COALESCE a cada fila del concat, por ejemplo:

    CONCAT(COALESCE(`nombre`,''),' ',COALESCE(`apellido`,''))
    
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com