PHP - funcion buscar

 
Vista:
Imágen de perfil de Charly
Val: 182
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

funcion buscar

Publicado por Charly (68 intervenciones) el 28/09/2018 12:44:12
Tengo una página en la que hay un input text y un botón buscar.
Y en otro archivo tengo la clase colección que guarda los métodos necesarios.
Cuando presionan el botón, llamo al método de la clase para que busque en una matriz y muestre en una tabla si hay alguna película, pero aunque meta una palabra que exista, no la encuentra, es más, yo creo que ni siquiera busca en la matriz, simplemente no entra en el bucle.
A continuación pongo el código:
Este es el 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
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
<?php
	require("coleccion.php");
	if(isset($_REQUEST['operacion'])) $operacion=$_REQUEST['operacion'];
	if(isset($_REQUEST['palabra'])) $palabra=$_REQUEST['palabra'];
	if(!isset($palabra)) $palabra="";
?>
<html>
	<head>
		<title>Actividad 1</title>
	</head>
	<body bgcolor="#FF9900">
		<hr>
		<table border=0 align=center>
			<tr>
				<td valign=top align="center"><h1><font color="red">COLECCION DE PELICULAS</font></h1></td>
				<td valign=bottom rowspan=2>
					<table border=0 align=center width=375>
						<tr>
							<td colspan=2 height=40 align=center><h3><font color="red">Operaciones con la coleccion</font></h3></td>
						</tr>
						<tr>
							<td align=right height=30><font color=red><b>Buscar pelicula&nbsp;&nbsp;&nbsp;</b></font></td>
			   				<td>
			   					<form name="form1" method="post" action="index.php">
			      					<input type="text" name="nombre" size="10" maxlength="50" value="<?php echo $palabra; ?>">
			      					<input type="submit" name="buscar" value="Buscar">
			      					<input type="hidden" name="operacion" value="buscar">
			    				</form>
			    			</td>
						</tr>
						<tr>
							<td colspan=2 align=center>
								<form name="form2" method="post" action="index.php">
			    					<input type="submit" name="listado" value="Ver listado completo de peliculas">
			    					<input type="hidden" name="operacion" value="listar">
								</form>
							</td>
						</tr>
						<tr>
							<td colspan=2 align=center>
								<form name="form3" method="post" action="index.php">
			   						<input type="submit" name="listado" value="Ver listado ordenado por titulo">
			   						<input type="hidden" name="operacion" value="listar_ordenado">
								</form>
							</td>
						</tr>
					</table>
				</td>
			</tr>
			<tr>
				<td align=center><img src=peliculas.png></td>
			</tr>
		</table>
		<hr>
		<?php
		$peliculas=new coleccion();
		$peliculas->add_pelicula("El gran dictador","Charles Chaplin","Comedia",1940);
		$peliculas->add_pelicula("En busca del arca perdida","Steven Spielberg","Aventuras",1981);
		$peliculas->add_pelicula("Los pajaros","Alfred Hitchocock","Thriller",1963);
		$peliculas->add_pelicula("Pulp Fiction","Quentin Tarantino","Alternativo",1994);
		$peliculas->add_pelicula("The Matrix","Andy y Larry Wacowsky","Ciencia ficcion",1999);
		$peliculas->add_pelicula("2001: una odisea en el espacio","Stanley Kubrick","Ciencia ficcion",1968);
		$peliculas->add_pelicula("Lawrance de Arabia","David Lean","Historica",1962);
		if(isset($operacion)){
			if($operacion=="listar"){
				$total=$peliculas->listar_peliculas(false);
			}
			if($operacion=="buscar"){
				$total=$peliculas->buscar($palabra);
			}
			if($operacion=="listar_ordenado"){
				$total=$peliculas->listar_peliculas(true);
			}
			echo "<center><font color=white>El nº de peliculas encontradas es: ".$total."</font></center>";
		}
		?>
</body>
</html>
Y esta es la clase colección.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
55
56
<?php
	class coleccion{
		public $peliculas=array();
		public $total;
		function __construct(){
			$this->peliculas=array();
		}
		function add_pelicula($titulo,$director,$genero,$año){
			$pelicula=array("titulo"=>$titulo,"director"=>$director,"genero"=>$genero,"año"=>$año);
			array_push($this->peliculas,$pelicula);
		}
		function num_peliculas(){
			return sizeof($this->peliculas);
		}
		function listar_peliculas($ordenado){
			if($ordenado) sort($this->peliculas);
			echo "<table border=1 align=center width=500><tr>
    			<td><font color=lime><b>Titulo</b></font></td>
    			<td><font color=lime><b>Director</b></font></td>
    			<td><font color=lime><b>Genero</b></font></td>
				<td><font color=lime><b>Año</b></font></td></tr>";
			for($i=0;$i<sizeof($this->peliculas);$i++){
				echo "<tr><td><font color=white>".$this->peliculas[$i]["titulo"]."</font></td>
				    <td><font color=white>".$this->peliculas[$i]["director"]."</font></td>
				    <td><font color=white>".$this->peliculas[$i]["genero"]."</font></td>
				    <td><font color=white>".$this->peliculas[$i]["año"]."</font></td></tr>";
			}
			echo "</table>";
			return $this->num_peliculas();
		}
		function buscar($palabra){
			$total=0;
			if(($palabra)==""){
				echo "No se ha introducido ninguna palabra";
			}else{
				echo "<center><font color=white>Las peliculas que contienen '<b>$palabra</b>' en el campo 'titulo' o 'director' son: </font></center><p>";
				echo "<table border=1 align=center width=500><tr>
   				    <td><font color=lime><b>Titulo</b></font></td>
   					<td><font color=lime><b>Director</b></font></td>
					<td><font color=lime><b>Genero</b></font></td>
   					<td><font color=lime><B>Año</b></font></td></tr>";
						for($i=0;$i<sizeof($this->peliculas);$i++){
							if((strpos($this->peliculas[$i]["titulo"],$palabra)!==false)||(strpos($this->peliculas[$i]["director"],$palabra)!==false)||(strpos($this->peliculas[$i]["genero"],$palabra)!==false)||(strpos($this->peliculas[$i]["año"],$palabra)!==false)){
								$total++;
								echo "<tr><td><font color=white>".$this->peliculas[$i]["titulo"]."</font></td>
									<td><font color=white>".$this->peliculas[$i]["director"]."</font></td>
									<td><font color=white>".$this->peliculas[$i]["genero"]."</font></td>
									<td><font color=white>".$this->peliculas[$i]["año"]."</font></td></tr>";
							}
						}
						echo "</table>";
				return $total;
			}
		}
	}
?>
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 Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

funcion buscar

Publicado por Alejandro (838 intervenciones) el 28/09/2018 16:03:49
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Inténtalo con un solo campo y recuerda que no es lo mismo "Psicosis" que "psicosis"

1
if( strpos( strtolower($this->peliculas[$i]["titulo"]), strtolower($palabra) ) !== false ){...

Como extra sizeOf() es un alias de count() y al hacer el for como lo tienes,
en cada iteración se cuentan los elementos existentes en el array.
De la siguiente forma solo se cuentan la primera vez.
1
for($i=0,$t=count($this->peliculas); $i<$t; $i++){....
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
Imágen de perfil de Charly
Val: 182
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

funcion buscar

Publicado por Charly (68 intervenciones) el 28/09/2018 16:14:52
Muchas gracias por ayudar Alejandro, pero sigue igual.
Creo que el problema no está en el método, sino en el formulario o en como paso la palabra.
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 kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

funcion buscar

Publicado por kip (877 intervenciones) el 28/09/2018 16:19:04
Alejandro no es necesario convertir las palabras a minúsculas a "mano", puedes usar stripos.

Aunque recomiendo mb_stripos para no tener problemas con los caracteres UTF8.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

funcion buscar

Publicado por Alejandro (838 intervenciones) el 28/09/2018 21:01:35
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Gracias kip, siempre sacándote los ases de la manga jajaja, no me la sabia.

El error es el siguiente:
1
2
3
if(isset($_REQUEST['palabra'])) $palabra=$_REQUEST['palabra'];
....
<input type="text" name="nombre" size="10" maxlength="50" value="<?php echo $palabra; ?>">
intenta recibir 'palabra' pero el campo se llama 'nombre'
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