Foros del Web » Programando para Internet » PHP »

Validar un campo de búsqueda

Estas en el tema de Validar un campo de búsqueda en el foro de PHP en Foros del Web. Tengo un formulario que realiza una búsqueda y trabaja bastante bien. Pero el problema esta que cuando uno ingresa una palabra más un espacio luego ...
  #1 (permalink)  
Antiguo 16/07/2004, 02:27
Avatar de JJRC  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 261
Antigüedad: 14 años, 11 meses
Puntos: 1
Validar un campo de búsqueda

Tengo un formulario que realiza una búsqueda y trabaja bastante bien. Pero el problema esta que cuando uno ingresa una palabra más un espacio luego de la última letra, entonces el módulo me tira un error en la consulta.

¿Cómo hago para validar el campo?

Parte del código que tengo es este:
Código:
<font class=\"content\"><input type=\"text\" size=\"45\" name=\"LEMA\" value=\"$LEMA\"> <input type=\"submit\" value=\"Consultar\"></font>
  #2 (permalink)  
Antiguo 16/07/2004, 02:39
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
Esta función dte quitará los espacios en blanco al final y al principio de la cadena

function trim(cadena){
cadena=cadena.replace(/^\s+/,'').replace(/\s+$/,'');
return(cadena)
}

Bueno, esta función es de javascript en php sería directamente llamar a la función trim
__________________
¿Te apasiona el mundo del guión? El portal del guión

Última edición por living; 16/07/2004 a las 02:41
  #3 (permalink)  
Antiguo 16/07/2004, 02:46
Avatar de JJRC  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 261
Antigüedad: 14 años, 11 meses
Puntos: 1
Disculpa que insista, pero no entendí muy bien como debo agregar esa función.

Este es el código de toda la función que tengo:
Código:
function cabecera() {
    global $module_name,$LEMA;
    OpenTable();

	echo "<center>";
	echo "<table width=\"60%\" border=\"0\">";
	echo "<tr>";
	echo "<td width=\"50%\" align=\"center\"><a href=\"http://www.rae.es\"><img src=\"modules/$module_name/logo.gif\" border=\"0\" alt=\"\"></a></td>";
	echo "<td width=\"50%\" align=\"left\"><b>DICCIONARIO DE LA LENGUA ESPAÑOLA<br>Vigésima segunda edición</b><br><a href=\"http://www.rae.es\" target=\"blank\">http://www.rae.es</a></td>";
	echo "</tr>";
	echo "</table><br>";
    echo "<form action=\"modules.php?name=$module_name&LEMA=$LEMA&IDVERBO=\" method=\"post\">"
	."<font class=\"content\"><input type=\"text\" size=\"45\" name=\"LEMA\" value=\"$LEMA\"> <input type=\"submit\" value=\"Consultar\"></font>"
	."</form>";
	echo "</center>";
    CloseTable();
}
¿Cómo debería incluir el código que me pasaste?

__________________
El dinero no te cambia, te delata...
  #4 (permalink)  
Antiguo 16/07/2004, 03:43
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
igual lo más sencillo, dado que no sé como va el resto del código , es que hagas esto y olvidarte de la función:
Código PHP:
echo "<form action=\"modules.php?name=$module_name&LEMA=$LEMA&IDVERBO=\" method=\"post\" onSubmit=\"this.LEMA.value.replace(/^\s+/,'').replace(/\s+$/,'')\">" 
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #5 (permalink)  
Antiguo 16/07/2004, 08:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
living ..

En PHP tenemos la función trim() ya de por sí creada y es en última instancia donde debería usarlao -siempre- a la hora de filtrar lo que realmente va a parar a nuestra BD u proceso en general.

---------
JJRC
sería bueno que pusieras el código PHP que procesa ese formulario (más bien lo que interesa es la consulta SQL que haces a tu BD en función de esa variable $LEMA que recibes)

Por qué .. por ejemplo usando:

$sql="SELECT * FROM tabla WHERE campo='".trim($_POST['LEMA'])."'";

Tendrías el problema resuelto:
1) se limpia la variable de espacios anteriores y posteriores.
2) se solventa el problema del "error" de SQL si hay espacios por qué al parecer en tu código no usabas 'comillas' para delimitar a tu sentencia SQL y el dato "variable".
3) Es PHP el que procesa la "limpieza" de la variable y no javascript (liberando de trabajo al "cliente" y sobre todo haciendo más seguro la aplicación .. pues Javscript siempre es "franqueable").

Un saludo,
  #6 (permalink)  
Antiguo 16/07/2004, 14:53
Avatar de JJRC  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 261
Antigüedad: 14 años, 11 meses
Puntos: 1
Les comento que esto es un módulo de PHP-Nuke que encontre por ahí. Se trata de un diccionario en el que uno ingresa una palabra y el programa la búsca en la base de la RAE y devuelve la definición del diccionario, o sea, realiza una consulta en una fuente externa.

El módulo anda bastante bien, pero ví que tiene ese "problemita" y quería ver si lo podía solucionar.
Código:
<?php

require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
$pagetitle = "La Compañía Gris - RAE";

//ini_set("include_path", ".");

if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
    die ("You can't access this file directly...");
}

if (!isset($LEMA)) $LEMA = "";
if (!isset($IDVERBO)) $IDVERBO = "";

function cabecera() {
    global $module_name,$LEMA;
    OpenTable();

	echo "<center>";
	echo "<table width=\"60%\" border=\"0\">";
	echo "<tr>";
	echo "<td width=\"50%\" align=\"center\"><a href=\"http://www.rae.es\"><img src=\"modules/$module_name/logo.gif\" border=\"0\" alt=\"\"></a></td>";
	echo "<td width=\"50%\" align=\"left\"><b>DICCIONARIO DE LA LENGUA ESPAÑOLA<br>Vigésima segunda edición</b><br><a href=\"http://www.rae.es\" target=\"blank\">http://www.rae.es</a></td>";
	echo "</tr>";
	echo "</table><br>";
    echo "<form action=\"modules.php?name=$module_name&LEMA=$LEMA&IDVERBO=\" method=\"post\">"
	."<font class=\"content\"><input type=\"text\" size=\"45\" name=\"LEMA\" value=\"$LEMA\"> <input type=\"submit\" value=\"Consultar\"></font>"
	."</form>";
	echo "</center>";
    CloseTable();
}

function busqueda($url) {
	global $module_name;
	OpenTable();

	$texto = "";
	$fichero = $url;
	// Mete el contenido de un fichero en una cadena
	$fd = fopen ($fichero, "r");
	while ($line=fgets($fd,1000)) $texto .= $line;
	fclose ($fd);

	$texto_iso8859 = utf8_decode($texto);
	$texto_iso8859 = str_replace ("/draeI/icono/","modules/Diccionario/",$texto_iso8859);
	$texto_iso8859 = str_replace ("SrvltGUIVerbos?","modules.php?name=Diccionario&LEMA=&",$texto_iso8859);
	$texto_iso8859 = str_replace ("/draeI/SrvltObtenerHtml?","modules.php?name=Diccionario&IDVERBO=&",$texto_iso8859);
	// /draeI/icono/

	echo "<b>Nota:</b> Debido al conjunto de caracteres utilizado en <b>La Compañía Gris</b>, el conjunto ISO-8859-1, la etimología de la palabra consultada puede que no aparezca correctamente (caracteres '?'). La única solución que se nos ha ocurrido es insertar marcos, pero debido a la arquitectura de la web esto no es posible. Si alguien conoce otra solución le ruego nos lo haga saber. Gracias.<br><br>";

	echo "<center>";
	echo $texto_iso8859;
	echo "</center>";

	CloseTable();
}

include("header.php");

cabecera();
if($LEMA!="") {
	echo "<br>";
	$url = "http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=$LEMA&IDVERBO=";
	busqueda($url);
}
elseif($IDVERBO!="") {
	echo "<br>";
	$url = "http://buscon.rae.es/draeI/SrvltGUIVerbos?TIPO_HTML=2&IDVERBO=$IDVERBO&LEMA=";
	busqueda($url);
}

include("footer.php");

?>
Gracias a todos por las respuestas.
__________________
El dinero no te cambia, te delata...
  #7 (permalink)  
Antiguo 16/07/2004, 15:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, .. tu módulo conecta por sokets a la web de la RAE ..pero igualmente pasa antes por tu script que hace un pre-proceso de lo que le va a enviar y bueno ..todo el resto de la lógica para obtener la respuesta:

concretamente el "trim()" de PHP lo puedes aplicar en:
Código PHP:
if(trim($LEMA)!="") { 
(quedaría mejor:)
Código PHP:
if(!empty(trim($_GET['LEMA']))) { 
pero ya veo que no usa los arrays superglobales ni menos funciones de PHP para tal fin como lo es emtpy() que es lo mismo que != '' y mejor por qué ademas comprueba su existencia sin probocar errores ("notices")

Un saludo,
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 16:30.