PHP - Error en listado php

 
Vista:
sin imagen de perfil

Error en listado php

Publicado por Corcho (2 intervenciones) el 20/03/2017 19:43:30
¡Hola! Mi nombre es Corcho y he estado ojeando estos foros durante algunos días para iniciarme en php, pero he encontrado un error que no me deja continuar. Creo que tiene algo que ver con el funcionamiento de "echo".

Os explico lo que trato de hacer. Estoy intentando hacer un código en php que me haga un listado de canciones en una tabla html. La tabla tiene 3 columnas: canción, reproducción y descargas. Debe explorar una carpeta llamada "media" llena de otras carpetas. Cada una de estas carpetas se llamará como la canción en cuestión (dicho nombre es el que se usa para la primera columna de la tabla) tendrá archivos para reproducir y descargar a partir de la tabla creada. El script explorará cada carpeta y si hay archivos pdf o de audio (mp3) los mostrará en la tabla para descargarlos.

Os dejo aquí el código:
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
<!DOCTYPE html>
<html>
<body>
 
<?php
	$path="./media/";
	$carpeta=dir($path);
	echo '<table border=\"1\" bgcolor=dddddd>';
	echo '<tr bgcolor=\"aaaaaa\">';
	echo '<th><strong>Cancion</strong></th>';
	echo '<th><strong>Reproduccion</strong></th>';
	echo '<th><strong>Descargas</strong></th>';
	echo '</tr>';
 
	while ($archivo = dir($carpeta)) {
		if (is_dir($archivo))
		{
			$name_dir = ucfirst($archivo);
			echo "<tr><td>$archivo</td>";
			while ($media = dir($archivo)) {
				echo "<td>";
				if(strtolower(substr($media, -3) == "mp3")) {
					echo "<td><audio src=\"media/$media\" controls></audio></td>";
				}
				echo "</td>";
				echo "<td>";
				if(strtolower(substr($media, -3) == "pdf")) {
					echo "<a href=\"media/$media\" target=\"_blank\"><img src=\"images/pdf.png\" width=\"32\" height=\"35\" border=\"0\"></a>";
				}
				if(strtolower(substr($media, -3) == "mp3")) {
					$name = ucfirst($media);
					echo "<a href=\"media/$media\" download=\"$name\" target=\"_blank\"><img src=\"images/music.png\" width=\"32\" height=\"35\" border=\"0\"></a>";
				}
				echo "</td></tr>";
 
			}
 
		}
	}
	echo "</table>";
	$carpeta->close();
	$archivo->close();
	$media->close();
?>
 
</body></html>

Esto es lo que me sale en el navegador, y por lo cual he decidido escribir para ver si alguien sabe qué puede estar ocurriendo:

Sin-titulo

Me ocurre algo parecido con cualquier código que tenga "echo". ¿Me podríais echar una mano? He revisado mil veces las comillas, dobles comillas...etc, y esto está entorpeciendo mi aprendizaje bastante.

¡Gracias por leer!
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
sin imagen de perfil

Error en listado php

Publicado por Victor Fcp. (12 intervenciones) el 20/03/2017 21:22:04
No tengo claro por que sale eso, solo se me ocurre depurar a ver...
1º - Quita el código html, deja solo el php (quizás falla la configuración para el php y no lo está interpretando.).
2º - Asegurate que estás usando la extensión correcta .php o .php3 en vez de html (a no ser que le hayas dicho al apache que interprete los html como php).
3º - Al principio del todo activa todos los avisos del php mediante:
error_reporting(E_ALL);
ini_set('display_errors', 1);
4º - Ejecuta el código a ver si te da alguna pista.
5º - Si sigue así, revisa las comillas por si has combinado comillas simples con dobles.
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
sin imagen de perfil

Error en listado php

Publicado por Corcho (2 intervenciones) el 21/03/2017 00:18:19
¡Hola de nuevo!

Muchas gracias por echarme una mano.

Hice lo primero que me dijiste, quitar todo el html (básicamente dejar la parte php y cambiar el archivo a un archivo con extensión .php) y empezó a darme algunos errores fáciles de solucionar. Modifiqué mi código hasta que todo fue perfectamente. No obstante, al ponerlo en un .htm de nuevo me sigue dando exactamente el mismo problema. ¿Hay alguna manera de solucionar esto ahora que sabemos algo más sobre ello?

Te dejo aquí elnuevo código:
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
<?php
	$path="./media";
	$carpeta=opendir($path);
	echo '<table border=\"1\" bgcolor=dddddd>';
	echo '<tr bgcolor=\"aaaaaa\">';
	echo '<th><strong>Obra</strong></th>';
	echo '<th><strong>Reproduccion</strong></th>';
	echo '<th><strong>Descargas</strong></th>';
	echo '</tr>';
 
 
 
	while ($archivo = readdir($carpeta)) {
		if($archivo!="." AND $archivo!="..") {
			$name_dir = ucfirst($archivo);
			echo "<tr><td>$name_dir</td>";
			echo "<td>";
			if(file_exists('./media/'.$archivo.'/audio.mp3')) {
				echo "<audio src=\"media/$archivo/audio.mp3\" controls></audio>";
			}
			echo "</td>";
			echo "<td>";
			if(file_exists('./media/'.$archivo.'/sheet.pdf')) {
				echo "<a href=\"media/$archivo/sheet.pdf\" download=\"$name_dir.pdf\" target=\"_blank\"><img src=\"images/pdf.png\" width=\"32\" height=\"35\" border=\"0\"></a>";
			}
			if(file_exists('./media/'.$archivo.'/audio.mp3')) {
				echo "<a href=\"media/$archivo/audio.mp3\" download=\"$name_dir.mp3\" target=\"_blank\"><img src=\"images/music.png\" width=\"32\" height=\"35\" border=\"0\"></a>";
			}
			echo "</td></tr>";
		}
	}
	echo "</table>";
	closedir($carpeta);
 
?>
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 Alejandro
Val: 575
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error en listado php

Publicado por Alejandro (157 intervenciones) el 21/03/2017 01:33:02
Hola Corcho, te dejo la solución del problema con los echos:
Pero igual el código tiene cosas que aun estan mal y pueden causar problemas o bucles infinitos. Como por ejemplo cuando ejecutas la función dir, Esta retorna un objecto (Directory) y tu lo que estas haciendo es querer de un objeto instanciar un nuevo objeto. Fijate en esto:
1
2
$carpeta=dir($path); // Directory
while ($archivo = dir($carpeta)) {}

Solución echos
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
<?php
 
        // ACTIVA EL REPORTE DE ERRORES 
       error_reporting(E_ALL);
        ini_set('display_errors', 1);
 
	$path= __DIR__."/media";
	$carpeta=dir($path);
	echo '<table border="1" bgcolor=dddddd>';
	echo '<tr bgcolor="aaaaaa">';
	echo '<th><strong>Cancion</strong></th>';
	echo '<th><strong>Reproduccion</strong></th>';
	echo '<th><strong>Descargas</strong></th>';
	echo '</tr>';
 
	while ($archivo = dir($carpeta)) {
		if (is_dir($archivo))
		{
			$name_dir = ucfirst($archivo);
			echo "<tr><td>$archivo</td>";
			while ($media = dir($archivo)) {
				echo "<td>";
				if(strtolower(substr($media, -3) == "mp3")) {
					echo "<td><audio src='media/'".$media."' controls></audio></td>";
				}
				echo "</td>";
				echo "<td>";
				if(strtolower(substr($media, -3) == "pdf")) {
					echo "<a href='media/'".$media."' target='_blank'><img src='images/pdf.png' width='32' height='35' border='0'></a>";
				}
				if(strtolower(substr($media, -3) == "mp3")) {
					$name = ucfirst($media);
					echo "<a href='media/'".$media."' data-download='".$name."' target='_blank'><img src='images/music.png' width='32' height='35' border='0'></a>";
				}
				echo "</td></tr>";
			}
 
	        $media->close();
		}
	}
	echo "</table>";
	$carpeta->close();
	$archivo->close();
?>
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
sin imagen de perfil

Error en listado php

Publicado por Victor Fcp. (12 intervenciones) el 23/03/2017 21:56:36
En principio no puedes poner codigo php en un archivo con extension .html o htm, el apache lee la extensión y lo trata como tal. A no ser que le digas al apache que inteprete como php los archivos con las extensiones html y htm; yo lo he hecho con los archivos css, que en realidad son php con codigo pero apache lo muestra como hoja de estilos.
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