Foros del Web » Programando para Internet » PHP »

Consulta/dificultad con strings

Estas en el tema de Consulta/dificultad con strings en el foro de PHP en Foros del Web. Hola, quería hacer una consulta sobre reemplazar y eliminar espacios en un string. No acierto con el str_replace. Usando una función en Ajax ejecuto un ...
  #1 (permalink)  
Antiguo 12/09/2014, 04:52
 
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Compostela
Mensajes: 126
Antigüedad: 12 años, 11 meses
Puntos: 0
Consulta/dificultad con strings

Hola,
quería hacer una consulta sobre reemplazar y eliminar espacios en un string. No acierto con el str_replace. Usando una función en Ajax ejecuto un select y paso el valor a una consulta para que se ejecute. En la consulta php recojo el valor y como lo envio con un "#" hago un str_replace y lo transformo en una ",".

Hasta ahí perfecto, salvo porque me he dado cuenta de que en la base de datos existen elementos que tienen espacios en blanco y claro cuando recojo los datos me trunca el resultado. Por ejemplo: el valor "cont sup 3", solo me devuelve "cont".

Así reemplazo # por , ¡perfecto sin problema!
Código PHP:
$metodo $_POST['elemento2'];
$metodo str_replace("#",",",$metodo); 
ahora quiero a mayores quitar los espacios en blanco. Probé algo del estilo:
Código PHP:
$metodo $_POST['elemento2'];
$metodo str_replace("#",",",$metodo);
$metodo str_replace(" ","",$metodo); 
pero ni de coña!. Después probé:
Código PHP:
$metodo $_POST['elemento2'];
$metodo str_replace("#",",","\ /" ","",$metodo); 
pero tambien me da error.
alguien puede ayudarme, please. Gracias.
  #2 (permalink)  
Antiguo 12/09/2014, 05:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta/dificultad con strings

Creo que estás coetiendo algun error en alguna parte, pero no es en el uso de esa función.
Si yo pruebo con esto:
Código PHP:
Ver original
  1. $metodo = "cont#sup#3";
  2. $metodo = str_replace("#",",",$metodo);  
  3. echo $metodo;
me devuelve esto:
Cita:
cont,sup,3
Con esto otro:
Código PHP:
Ver original
  1. $metodo = "cont sup 3";
  2. $metodo = str_replace(" ","",$metodo);  
  3. echo $metodo;

Me devuelve esto:
Cita:
contsup3
Obviamente esto otro no te va a funcionar:
Código PHP:
Ver original
  1. $metodo = "cont sup 3";
  2. $metodo = str_replace("#",",",$metodo);
  3. $metodo = str_replace(" ","",$metodo);
porque luego del primer str_replace(), la variable ya no contiene "cont sup 3", sino "cont,sup,3"... que no es lo mismo.
Distinto sería si hicieras:
Código PHP:
Ver original
  1. $metodo = "cont#sup#3";
  2. $metodo = str_replace("#",",",$metodo);  
  3. $metodo = str_replace(",","",$metodo);  
  4. echo $metodo."\r";
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/09/2014, 05:50
 
Fecha de Ingreso: abril-2011
Ubicación: Vilcún, cerca de Temuco
Mensajes: 67
Antigüedad: 13 años
Puntos: 5
Respuesta: Consulta/dificultad con strings

¿Devuelves el resultado a javascript como objeto JSON o como texto plano?
  #4 (permalink)  
Antiguo 12/09/2014, 05:54
 
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Compostela
Mensajes: 126
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Consulta/dificultad con strings

Lo que obtengo finalmente es un JSON

Código PHP:
$metodo $_POST['elemento2'];
$metodo str_replace("#",",",$metodo);


$query "SELECT code, descripcion, ST_AsGeoJSON(the_geom, 4) AS geojson FROM vw_metodo where code in (".ltrim($metodo,',').") ORDER BY code 
  #5 (permalink)  
Antiguo 12/09/2014, 06:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta/dificultad con strings

En realidad lo que obtienes es el conjunto de valores para una query.
La query en SQL es la que te devolverá el JSON usando una función ST_AsGeoJSON.

Tu problema no está en el JSON, en todo caso, sino en la construcción del IN() de la consulta a la base.

¿Verificaste lo que te dije?
¿Miraste qué tan bien queda construida la consulta SQL?

Algo como esto alcanza para ver lo quese armó, y verificar dónde está el error:


Código PHP:
Ver original
  1. $metodo = $_POST['elemento2'];
  2. $metodo = str_replace("#",",",$metodo);
  3.  
  4. $query = "SELECT code, descripcion, ST_AsGeoJSON(the_geom, 4) AS geojson FROM vw_metodo where code in (".ltrim($metodo,',').") ORDER BY code  "
  5.  
  6. echo $query;

Que nos digas que no te funciona no es información suficiente. Necesitamos ver lo que tu ves para entender el problema, porque como ya te demostré, la cosa funciona.

Lo que sí noto es que estás usando ltrim(), con un caracter que se indica quitar...

Según dice el manual de referencia de PHP:
Cita:
string ltrim ( string $str [, string $character_mask ] )

Retira espacios en blanco (u otros caracteres) del inicio de un string.
Parámetros ¶

str

El string de entrada.

character_mask

Se puede también especificar los caracteres que se desean retirar por medio del parámetro character_mask. Simplemente se listan todos los caracteres que se quieren retirar. Con .. se puede especificar un rango de caracteres.
En otras palabras, estás quitando las comas que el SQL necesita para separar los valores de busqueda del IN().
¿Por qué las quitas?
En ese contexto, si tienes más de un valor, la query debe estar devolviendo un error de sintaxis...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 12/09/2014, 06:09
 
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Compostela
Mensajes: 126
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Consulta/dificultad con strings

Hola,

pongo el echo de la query seleccionando en el form un codigo sin espacios en blanco:

Código HTML:
SELECT code, descripcion, ST_AsGeoJSON(the_geom, 4) AS geojson FROM vw_metodologicas where code in ('contr-GPS-01') ORDER BY code
y ahora seleccionando uno con espacios en blanco:

Código HTML:
SELECT code, descripcion, ST_AsGeoJSON(the_geom, 4) AS geojson FROM vw_metodologicas where code in ('cont') ORDER BY code
En el segundo al seleccionar el valor sería : 'cont GPS 02' y como veis devuelve solo 'cont'

el script ajax que uso es este:
Código:
function metodo(){
	var elemento2 = document.getElementById("MET");
	meto = document.getElementById('elemento2');
	var txt2='';
	var i;
	var count = 0;
	for (i=0; i<meto.options.length; i++) {
	    if (meto.options[i].selected) {
	      if (count==0)
		  	txt2+= "'"+meto.options[i].value+"'";
		  else
			 txt2+= "#'"+meto.options[i].value+"'";
	    }
	count++;
	}
		url_meto ='elemento2='+txt2;
		xhr2(url_meto);
}

var xmlhttp; 
function xhr2(MET){ 
		if (window.XMLHttpRequest)
  			{// code for IE7+, Firefox, Chrome, Opera, Safari
  				xmlhttp=new XMLHttpRequest();
	  		}
		else
	  		{// code for IE6, IE5
  				xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  		}
		xmlhttp.onreadystatechange = RespuestaMetodo;
		xmlhttp.open("POST", "metodos.php", true);

		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

		xmlhttp.send(MET);
}
De este modo no se me recarga la página y puedo cargar los valores distintos.
  #7 (permalink)  
Antiguo 22/09/2014, 02:23
 
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Compostela
Mensajes: 126
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Consulta/dificultad con strings

Buenas, he estado fuera unos dias.

GNZSOLOYO he revisado lo que me comentabas. El motivo para eliminar la coma en ltrim, es porque al sacar el JSON me saca la coma en el fichero y no me lo interpreta después para dibujarlo en el mapa. Me da que el problema no está en esa consulta.

Hice un echo de la variable que le paso del formulario y de la query
Código PHP:
$metodo $_POST['elemento2'];

echo 
$metodo
si el código que pido en el formlario es por ejemplo "cont-GPS-02" el resultado del echo es el siguiente

Código HTML:
#'cont-GPS-02','SELECT code, descripcion, ST_AsGeoJSON(the_geom, 4) AS geojson FROM vw_metodologicas where code in ('cont-GPS-02') ORDER BY code
pero si pido en el formulario por ejemplo "cont GPS 02" el resultado del echo es

Código HTML:
#'cont','SELECT code, descripcion, ST_AsGeoJSON(the_geom, 4) AS geojson FROM vw_metodologicas where code in ('cont') ORDER BY code
Me da que el problema va a estar en la función que hago en AJAX para recoger la variable del formulario y enviar la url

Código:
function metodologica(){
	var elemento2 = document.getElementById("MET");
	meto = document.getElementById('elemento2');
	var txt2='';
	var i;
	var count = 0;
	for (i=0; i<meto.options.length; i++) {
	    if (meto.options[i].selected) {
	      if (count==0)
		  	txt2+= "'"+meto.options[i].value+"'";
		  else
			 txt2+= "#'"+meto.options[i].value+"'";
	    }
	count++;
	}
		url_meto ='elemento2='+txt2;
		xhr4(url_meto);
}
Gracias

Etiquetas: select, strings
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:56.