PHP - Buscador con formulario

   
Vista:

Buscador con formulario

Publicado por Octavi (6 intervenciones) el 05/11/2015 10:32:37
Saludos a todos,

Estoy intentando hacer un buscador con diferentes columnas de una tabla.

Lo idela seria que pudiera rellenar los campos que quisiera y que me salieran las coincidencias con estos.

Para hacer-lo he partido de un buscador simple, que te da coincidencias sólo de una columna.

Ya llevo bastantes horas probando diferentes combinacions y no consigo que me funcione, lo raro es que no me sale error, bueno no me sale nada a parte del header...

Culquier tipo de ayuda, se agradecerá mucho.
Muchas gracias por su tiempo!!


CODIGO: Buscar1.php (formulario)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<html>
    <head>
        <title>GRUPO PREMO</title>
        <META http-equiv="Content-Type" CONTENT="text/html; charset=utf-8">
    </head>
 
 
    <body bgcolor="#F75353">
    <center>
 
<form name="buscar" action="BuscarFrm.php" method="get">
<table align="center" bgcolor="#A9E2F3">
                    <tr>
 
 
 
 
                        <td>IdRFQ</td>
                        <td colspan="3"> <input type="text" name="IdRFQ" size="50"  /></td>
 
                        <td>Data</td>
                        <td colspan="3"> <input type="text" name="Data" size="50"  /></td>
 
                         <td>Supplier</td>
                        <td colspan="3"> <input type="text" name="Suppliers" size="50" /></td>
 
 <tr>
            <tr>
             <tr>
            <tr>
            <tr>
            <tr>
             <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
                        <td>Project Part Nombre</td>
                        <td colspan="3"> <input type="text" name="Project Part Nombre" size="50" /></td>
 
                        <td>RM Part Number</td>
                        <td colspan="3"> <input type="text" name="RM Part Number" size="50" /></td>
 
                        <td>Price</td>
                        <td colspan="3"> <input type="text" name="Price" size="50" /></td>
 
 <tr>
            <tr>
             <tr>
            <tr>
            <tr>
            <tr>
             <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
            <tr>
                        <td>Cry2</td>
                        <td colspan="3"> <input type="text" name="Cry2" size="50" /></td>
 
                        <td>MOQ</td>
                        <td colspan="3"> <input type="text" name="MOQ" size="50" /></td>
 
                        <td>Volume</td>
                        <td colspan="3"> <input type="text" name="Volume" size="50" /></td>
 
 
 
 
 
 
                    </tr>
                    <tr>
                        <td colspan="4">
                            <right><input type="submit" name="buscar"value="Serch"/>
                        </td>
                    </tr>
                </table>
</form>
</center>
</body>
</html>



CODIGO: BuscarFrm.php (acción)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
 
        include '../header.php';
    ?>
 
    <td>
<?php
// conectar al servidor
$server_link = mysql_connect("localhost", "root", "");
if(!$server_link){
    die("Fall&oacute; la Conexi&oacute;n ". mysql_error());
}
// seleccionamos la base de datos
$db_selected = mysql_select_db("bd_ofertas_para_productos", $server_link);
if(!$db_selected){
    die("No se pudo seleccionar la Base de Datos ". mysql_error());
}
// varificamos que el formulario halla sido enviado
if(isset($_GET['buscar']) && $_GET['buscar'] == 'Buscar'){
            $IdRFQ = $_GET['IdRFQ'];
            $Data = $_GET['data'];
            $Suppliers = $_GET['suppliers'];
            $Price = $_GET['price'];
            $Cry2 = $_GET['cry2'];
            $MOQ = $_GET['moq'];
            $Volume = $_GET['volume'];
            $Investment = $_GET['investment'];
            $Cry = $_GET['cry'];
            $Timing = $_GET['timing'];
 
            $Incoterms = $_GET['incoterms'];
            $Comments = $_GET['comments'];
 
    // hacemos la consulta de busqueda
    $sqlBuscar = mysql_query("SELECT idrfq, data, suppliers, Project Part Nombre, RM Part Number, Price, Cry2, MOQ, Volume
                              MATCH (idrfq, data, suppliers, Project Part Nombre, RM Part Number, Price, Cry2, MOQ, Volume)
                              AGAINST ('$frase' IN BOOLEAN MODE) AS coincidencias
                              FROM rfq
                              WHERE MATCH (idrfq, data, suppliers, Project Part Nombre, RM Part Number, Price, Cry2, MOQ, Volume)
                              AGAINST ('$frase' IN BOOLEAN MODE)
                              ORDER BY coincidencias DESC", $server_link)
                              or die(mysql_error());
 
 
    $totalRows = mysql_num_rows($sqlBuscar);
    // Enviamos un mensaje
    // indicando la cantidad de resultados ($totalRows)
    // para la frase busada ($frase)
    if(!empty($totalRows)){
        echo stripslashes("<p>Su busqueda arrojo; <strong>$totalRows</strong> resultados para <strong>$frase</strong></p>");
        // mostramos los resultados
        while($row = mysql_fetch_array($sqlBuscar)){
            echo "<strong><a href='#'>$row[suppliers]</a>:</strong> <em>Coincidencias: ". round($row['coincidencias']) ."</em><br />";
            echo "<p>".substr(strip_tags($row['suppliers']), 0, 255)."...</p>";
        }
    }
    // si se ha enviado vacio el formulario
    // mostramos un mensaje del tipo Oops...!
    elseif(empty($_GET['frase'])){
        echo "Debe introducir una palabra o frase.";
    }
    // si no hay resultados
    // otro mensaje del tipo Oops...!
    elseif($totalRows == 0){
        echo stripslashes("Su busqueda no arrojo resultados para <strong>$frase</strong>");
    }
}
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet

Buscador con formulario

Publicado por Lawliet (222 intervenciones) el 05/11/2015 17:56:51
Hola...

Hice la prueba y al inicio no estaba entrando a tu validación, verifique la ruta en el navegador y vi un pequeño error en la validación de tus datos. Cuando presionas el botón y mandas a tu action, la ruta que obtienes como salida es la siguiente...

1
http://localhost/ejercicio/control/controller.php?IdRFQ=&Data=&Suppliers=&Project+Part+Nombre=&RM+Part+Number=&Price=&Cry2=&MOQ=&Volume=&buscar=Serch

Y si vemos la validación en tu código, tienes lo siguiente...

1
if(isset($_GET['buscar']) && $_GET['buscar'] == 'Buscar'){

Si te das cuenta, el parámetro buscar recibe como valor Serch, mientras que tu en validación lo comparas con Buscar, por lo tanto, nunca entrara en tu proceso ^^.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Buscador con formulario

Publicado por Octavi (6 intervenciones) el 06/11/2015 13:50:31
Muchas gracias Lawliet,

Ahora sigue sin funcionar-me, pero como mínimo me salen errores, que antes no me decia nada.

Me pone los siguientes errores, a ver si me podéis seguir ayudando por favor:



Notice: Undefined index: IdRFQ in C:\Archivos de programa\EasyPHP-DevServer-14.1VC9\data\localweb\scripts\premo\BuscarFrm.php on line 21

Notice: Undefined index: Data in C:\Archivos de programa\EasyPHP-DevServer-14.1VC9\data\localweb\scripts\premo\BuscarFrm.php on line 22

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH (data, suppliers) AGAINST ('','”


Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Buscador con formulario

Publicado por xve (5520 intervenciones) el 06/11/2015 18:04:38
Hola Octavi, tienes que hacer lo mismo que te ha mostrado Lawliet con el resto de variables...

No se si te sale mas a cuenta desactivar las notificaciones (Notice)...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Buscador con formulario

Publicado por zendi (824 intervenciones) el 06/11/2015 18:16:19
intentalo con esto:
1
error_reporting(E_ALL ^ E_NOTICE);
colocalo al principio de
1
BuscarFrm.php
y nos comentas por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet

Buscador con formulario

Publicado por Lawliet (222 intervenciones) el 06/11/2015 18:50:24
Los primeros errores corresponden a que no encuentra ningún parámetro con ese nombre, asegúrate que el nombre que has colocado en formulario en la propiedad name, sea el mismo que estas recuperando en tu archivo; es decir, si pusiste Data, entonces tienes que recuperarlo de esa manera ya que no aplica el Case Sensitive al momento de recuperar los parámetros ya sea por get o por post, por lo que poner data o DATA, sera incorrecto siempre.

Mientras que el último error resulta a que tienes un error en tu sintaxis de SQL, te recomiendo imprimas la consulta con un echo y así veas la consulta tal cual se va a ejecutar.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Buscador con formulario

Publicado por Octavi (6 intervenciones) el 09/11/2015 11:39:54
Gracias por las respuestas,

Primero de todo, Zendi lo que me comentas-te, funciona, ya no sale el error de Notice: ...

Segundo he probado de poner echo, pero no sé si es que no lo pongo dónde toca o que, porqué no me imprime nada.
Me he mirado muchas veces el Match y el Against, y realmente creo que tiene sentido tal y como está, no sé porqué dice que hay un Syntax error.

Si tenéis alguna otra idea será de gran ayuda.
Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet

Buscador con formulario

Publicado por Lawliet (222 intervenciones) el 09/11/2015 18:33:15
Hola...

Serías tan amable de proporcionar tu código para que podamos ver con mas claridad el error ^^. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Buscador con formulario

Publicado por Octavi (6 intervenciones) el 10/11/2015 09:11:26
El código es el mismo que puse en el primer post, con el añadido que dijo Zendi.


CODIGO: BuscarFrm.php (acción)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
error_reporting(E_ALL ^ E_NOTICE);
// conectar al servidor
$server_link = mysql_connect("localhost", "root", "");
if(!$server_link){
    die("Fall&oacute; la Conexi&oacute;n ". mysql_error());
}
// seleccionamos la base de datos
$db_selected = mysql_select_db("bd_ofertas_para_productos", $server_link);
if(!$db_selected){
    die("No se pudo seleccionar la Base de Datos ". mysql_error());
}
// varificamos que el formulario halla sido enviado
if(isset($_GET['buscar']) && $_GET['buscar'] == 'Serch'){
            $IdRFQ = $_GET['IdRFQ'];
            $Data = $_GET['Data'];
            $Suppliers = $_GET['Suppliers'];
 
 
 
    // hacemos la consulta de busqueda
 
                                $sqlBuscar = mysql_query (" SELECT  IdRFQ,Data, Suppliers
                              MATCH (IdRFQ, Data, Suppliers)
                              AGAINST ('$IdRFQ','$Data','$Suppliers' IN BOOLEAN MODE) AS coincidencias
                              FROM rfq
                              WHERE MATCH (IdRFQ, Data, Suppliers)
                              AGAINST ('$IdRFQ','$Data','$Suppliers' IN BOOLEAN MODE)
                              ORDER BY coincidencias DESC", $server_link)
                              or die(mysql_error());
 
 
 
 
    $totalRows = mysql_num_rows($sqlBuscar);
    // Enviamos un mensaje
    // indicando la cantidad de resultados ($totalRows)
    // para la frase busada ($frase)
    if(!empty($totalRows)){
        echo stripslashes("<p>Su busqueda arrojo; <strong>$totalRows</strong> resultados para <strong>$frase</strong></p>");
        // mostramos los resultados
        while($row = mysql_fetch_array($sqlBuscar)){
            echo "<strong><a href='#'>$row[suppliers]</a>:</strong> <em>Coincidencias: ". round($row['coincidencias']) ."</em><br />";
            echo "<p>".substr(strip_tags($row['suppliers']), 0, 255)."...</p>";
        }
    }
    // si se ha enviado vacio el formulario
    // mostramos un mensaje del tipo Oops...!
    elseif(empty($_GET['frase'])){
        echo "Debe introducir una palabra o frase.";
    }
    // si no hay resultados
    // otro mensaje del tipo Oops...!
    elseif($totalRows == 0){
        echo stripslashes("Su busqueda no arrojo resultados para <strong>$frase</strong>");
    }
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Buscador con formulario

Publicado por Octavi (6 intervenciones) el 19/11/2015 12:07:16
Por favor,

Agradecería mucho que siguieran ayudándo-me, ya que estoy atascado y no sé que hacer...

Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet

Buscador con formulario

Publicado por Lawliet (222 intervenciones) el 19/11/2015 19:43:31
El objetivo es hacer un buscador con el siguiente formulario, correcto?

Captura1

Es decir que puede escribir en sola dos cajas de texto o en todas y realizarme la consulta, de acuerdo a las palabras clave que ingrese en las cajas de texto, por ejemplo, si escribo los siguientes datos.

Captura2

Me deben aparecer resultados en base a esa información por la que estoy filtrando, correcto?

Serías tan amable de exportar la base de datos y pasarla como archivo adjunto en el tema, de esa manera puedo realizar las pruebas correspondientes, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Buscador con formulario

Publicado por octavi (6 intervenciones) el 20/11/2015 09:44:32
Saludos de nuevo Lawliet y muchas gracias por tu interés y ayuda,


Lo que dices es correcto, es justo lo que querría que hiciera.

Adjunto la base de datos.


De verdad muchas gracias Lawliet!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet

Buscador con formulario

Publicado por Lawliet (222 intervenciones) el 20/11/2015 20:42:47
Disculpa, serías tan amable de exportar tu base de datos; es decir, el .sql ya que lo que me has pasado es el diagrama de MySQL Workbench y eso solo tiene la estructura de tu base de datos y para este caso es necesario los datos que ya tienes registrados en tu base de datos, por eso te pido seas tan amable de exportar tu base de datos, en el PHPMyAdmi seleccionas tu base de datos y aparece una opción de exportar. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet

Buscador con formulario

Publicado por Lawliet zhapyro_5@hotmail.com (222 intervenciones) el 20/11/2015 23:18:40
Hola...

Antes que nada también te realizo una observación, debes tener en mente que lo que necesitas vienen siendo reportes dinámicos por lo que se necesita realizar mas validaciones de lo que crees. Me explico, cuando tu ingresas valores en dos campos entonces debes hacer la consulta en base a esos dos campos, cuando ingresas valores en tres campos entonces la consulta debe ser con tres campos y así sucesivamente, además a esto se le añade las posibles combinaciones en que tu puedes hacer la consulta; es decir, puedo llenar tres campos (IdRFQ, Data, Supplier) y debo ver esta información en pantalla pero también puedo hacer otra combinación de tres campos diferentes a los anteriores (Price, Cry2, Volume), espero me este dando a entender.

Lo que te proporciono a continuación es una simulación de la búsqueda a través de un formulario, prácticamente para adecuarlo a tus necesidades solo necesitarías modificar la conexión a la base de datos así como la mejora a la consulta. Es importante mencionarte que esto es solamente un ejemplo sencillo a partir de una base de datos sencilla e improvisada que yo tengo en mi local.

index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<html>
	<head>
		<title>GRUPO PREMO</title>
		<META http-equiv="Content-Type" CONTENT="text/html; charset=utf-8">
	</head>
	<body bgcolor="#F75353">
		<form action="BuscarFrm.php" method="get">
			<table bgcolor="#A9E2F3" align="center">
				<tr style="height: 50px;">
					<td><b>IdRFQ:</b></td>
					<td><input type="text" name="idrfq" size="40"/></td>
					<td><b>Data:</b></td>
					<td><input type="text" name="data" size="40"/></td>
					<td><b>Supplier:</b></td>
					<td><input type="text" name="supplier" size="40"/></td>
				</tr>
				<tr style="height: 50px;">
					<td><b>Project Part Nombre:</b></td>
					<td><input type="text" name="projectPartNombre" size="40"/></td>
					<td><b>RM Part Number:</b></td>
					<td><input type="text" name="rmPartNumber" size="40"/></td>
					<td><b>Price:</b></td>
					<td><input type="text" name="price" size="40"/></td>
				</tr>
				<tr style="height: 50px;">
					<td><b>Cry2:</b></td>
					<td><input type="text" name="cry2" size="40"/></td>
					<td><b>MOQ:</b></td>
					<td><input type="text" name="moq" size="40"/></td>
					<td><b>Volume:</b></td>
					<td><input type="text" name="volume" size="40"/></td>
				</tr>
				<tr style="height: 50px;">
					<td colspan="6" align="center"><input type="submit" value="Serch"/></td>
				</tr>
			</table>
		</form>
	</body>
</html>

BuscarFrm.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
	// Recuperar valores del formulario.
	$idrfq=$_GET['idrfq'];
	$data=$_GET['data'];
	$supplier=$_GET['supplier'];
	$projectPartNombre=$_GET['projectPartNombre'];
	$rmPartNumber=$_GET['rmPartNumber'];
	$price=$_GET['price'];
	$cry2=$_GET['cry2'];
	$moq=$_GET['moq'];
	$volume=$_GET['volume'];
	// Conexion a base de datos.
	$conexion = mysql_connect("localhost", "root","") or die("Error de conexion: ".mysql_error());
	mysql_select_db("practicas",$conexion) or die("Error de base de datos: ".mysql_error());
	// Declaración y asignación de parámetros a la consulta.
	$sql="SELECT * FROM usuario WHERE id='".$idrfq."' OR nombre='".$data."' OR apellido_p='".$supplier."' OR apellido_m='".$projectPartNombre."'
		OR edad ='".$rmPartNumber."' OR correo='".$price."'";
	// Ejecución de la consulta.
	$result = mysql_query($sql);
	// Total de registros devueltos por la consuta.
	$total = mysql_num_rows($result);
	// Imprimimos en pantalla el total de registros encontrados.
	echo "<p>Su busqueda arrojo un total de <b>".$total."</b> registros.</p>";
	// Mostramos los registros encontrados, siempre y cuando el total de registros sea mayor a 0.
	if($total > 0){
		echo "<table border='1' style='border-collapse: collapse;'>
				<tr>
					<th>IdRFQ</th>
					<th>Data</th>
					<th>Supplier</th>
					<th>Project Part Nombre</th>
					<th>RM Part Number</th>
					<th>Price</th>
					<th>Cry2</th>
					<th>MOQ</th>
					<th>Volume</th>
				</tr>";
				while($row = mysql_fetch_array($result)){
					echo "
						<tr>
							<td>".$row['id']."</td>
							<td>".$row['nombre']."</td>
							<td>".$row['apellido_p']."</td>
							<td>".$row['apellido_m']."</td>
							<td>".$row['edad']."</td>
							<td>".$row['correo']."</td>
							<td>Campo correspondiente a Cry2</td>
							<td>Campo correspondiente a MOQ</td>
							<td>Campo correspondiente a Volume</td>
						</tr>";
				}
		echo "</table>";
	}
?>

Es importante mencionarte que la información que recupero de la consulta yo lo muestro en forma de tabla, pero tu puedes mostrarlo de la forma en que más lo necesites.

Si necesitas alguna aclaración del por que lo hice así y no así, sin compromiso alguno puedes agregarme a mi Skype (Puedes buscarme por el correo electrónico que aparece a lado de mi nombre) y con gusto puedo explicarte, ahora bien, lo recomendable sería analizar el problema para poder realizar todas las posibles combinaciones sin tener que realizar infinidad de validaciones.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar