PHP - Por qué cuando defino la función me da error?

 
Vista:
Imágen de perfil de Moisés
Val: 28
Ha disminuido su posición en 50 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Moisés (13 intervenciones) el 08/06/2020 00:06:20
Hola, he hecho este programa en php pero al definir una función como me dice el ejercicio, me desaparece el programa al cargarlo en el navegador.
Alguien puede explicármelo?
Muchísimas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
//Resultado punto 5 - Contenido en lista no numerada
function convierte_lista(){
    $texto = "uno-dos-tres-cuatro-cinco-seis-siete-ocho-nueve-diez";
    $depurado= explode("-", $texto);
    $contador= count($depurado);
 
    echo "<table style='border:2px solid'>";
    echo "<tbody>\n";
    echo "<tr><td><b><font size=4>Punto 5 - Contenido en lista no numerada</font></b></td></tr>";
        for ($i = 0; $i < $contador; $i++)
        {
            echo "<tr><td><ul><li><font size=3>" . ucfirst($depurado[$i]) . "</font></li></ul></td></tr>";
 
        }
    echo "</tbody>\n";
    echo "</table>\n";
}
?>
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Julio (830 intervenciones) el 08/06/2020 08:29:33
Hola.

Si tu código es sólo eso, es normal. Ahí has definido la función pero no la llamas nunca en ningún sitio, por eso no te imprime nada. Después de la función tendrías que llamarla para que se ejecute.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
Imágen de perfil de Moisés
Val: 28
Ha disminuido su posición en 50 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Moisés (13 intervenciones) el 08/06/2020 14:09:44
Y como quedaría, no termino de entender esto de las funciones.
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Julio (830 intervenciones) el 08/06/2020 14:47:34
Te dejo un par de artículos que te aclararán qué son las funciones (es fácil):

https://programacionbasica.es/funciones-introduccion/
https://programacionbasica.es/funciones-definidas-por-el-programador-en-php/

Básicamente la función es un trozo de código que vas a llamar en algún momento para que se ejecute, así puedes llamarla cuantas veces quieras y necesites con unos u otros valores (aunque en tu caso esa función no tiene parámetros, así que siempre devolverá lo mismo).

En tu caso concreto, sólo debes llamar a la función para que se ejecute. Coloca la llamada después de la línea 18, antes de acabar el código PHP (o sea, fuera de la función):

1
2
3
4
5
<?php
// Aquí has definido tu función
 
convierte_lista();
?>

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
Imágen de perfil de Moisés
Val: 28
Ha disminuido su posición en 50 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Moisés (13 intervenciones) el 08/06/2020 16:36:35
Ok con lo que me has explicado he entido la parte más simple, pero ahora dando una paso más después de haberme leído los enlaces que me has pasado he intentado modificar el ejercicio que he presentado pero no me funciona
He de hacer una funcion que extraiga la extension de un archivo y otra que me diga que tipo de fichero es.
La programación la tengo hecha pero con las declaraciones de las funciones no me termina de funcionar, no se como meter una dentro de otra y que después muestren por pantalla lo echo que he creado.

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
<?php
//Resultado punto 4 - Tipo de fichero
 
//Asignamos a la variable el fichero a analizar
 
 
//Defino la función y los arrays
function calcula_extension(){
$fichero= 'curriculum.pdf';
$extension = array ('pdf', 'txt', 'htm', 'html', 'ppt', 'doc', 'gif', 'jpg', 'zip');
$tipo = array ('Documento Adobe PDF', 'Documento de texto', 'Documento HTML','Documento HTML', 'Presentación Microsoft Powerpoint', 'Documento Microsoft Word', 'Imagen GIF', 'Archivo comprimido ZIP', 'Archivo');
 
 
//extraemos la extension sin el punto para poder compararla con los arrays
$extension_extraida = stristr($fichero, '.');
$extension_sinpunto = ltrim ($extension_extraida, '.');
 
		function tipo_fichero(){
		//Asigno el valor de la vusqueda del search a $i para usarla en la elección del array $tipo
		//$i = array_search($extension_sinpunto, $extension);
		$i = array_search($a, $extension);
			echo "<table style='border:2px solid'>";
			echo "<tbody>\n";
			echo "<tr><td><b><font size=4>Punto 4 - Tipo de fichero</font></b></td></tr>";
			//Creo la condición y si no encuentra la extensión la búsqueda tendrá valor nulo y se ejecutara el if
			if ($i=="")
				{
 
				//Convierto la extensión a mayusculas
				$ext_may = strtoupper($extension_sinpunto);
				echo "<tr><td><font size=3>El fichero $fichero es del tipo Archivo $ext_may</td></tr>";
				}
 
			else
				{
				echo "<tr><td>El fichero $fichero es del tipo $tipo[$i]</td></tr></font>";
				}
 
		echo "</tbody>\n";
		echo "</table>\n";
		echo "<br>";
}
}
calcula_extension();
tipo_fichero();
?>
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Julio (830 intervenciones) el 08/06/2020 18:35:06
No no, ahí hay unas cuantas cosas mal. A ver, una función es un trozo de código que quieres repetir (en ocasiones con unos parámetros de entrada específicos), por lo tanto, para entenderlas de primeras piensa que dentro de una función NO puedes definir otra función, pero sí puedes llamar a otras funciones que tengas definidas (nota: creo que sí puedes definir una función dentro de otra en la teoría, pero para casos mucho más especiales y avanzados y yo nunca lo he llegado a usar. Para el caso, piensa que no se puede).

En tu código estás definiendo calcula_extension y dentro de ella te pones a definir tipo_fichero y esto ya hemos comentado que no se puede hacer. Quitando esto, la primera función hace lo que quieres si le quitamos la definición de la segunda:

1
2
3
4
5
6
7
8
9
10
11
//Defino la función y los arrays
function calcula_extension(){
	$fichero= 'curriculum.pdf';
	$extension = array ('pdf', 'txt', 'htm', 'html', 'ppt', 'doc', 'gif', 'jpg', 'zip');
	$tipo = array ('Documento Adobe PDF', 'Documento de texto', 'Documento HTML','Documento HTML', 'Presentación Microsoft Powerpoint', 'Documento Microsoft Word', 'Imagen GIF', 'Archivo comprimido ZIP', 'Archivo');
 
 
//extraemos la extension sin el punto para poder compararla con los arrays
	$extension_extraida = stristr($fichero, '.');
	$extension_sinpunto = ltrim ($extension_extraida, '.');
}

Ahora bien, $extension_extraida y $extension_sinpunto se pierden al terminar la función, pues no las imprimes por pantalla ni las devuelves ni haces nada con ellas, por lo que no te sirve. Y las variables $extension y $tipo tampoco las usas aquí, por lo que no te sirven.

Por otra parte, esta función queda muy limitada a que sólo puede calcular la extensión del fichero curriculum.pdf, y eso implica que no te va a servir de nada más. El concepto de función es otro, por tanto, deberías pasarle por parámetro el nombre del fichero. Con todo esto, tenemos ahora esta función así:

1
2
3
4
function calcula_extension($fichero) {
	$extension_extraida = stristr($fichero, '.');
	return ltrim($extension_extraida, '.');
}

Simple. Esa función recibe el nombre de un fichero (está entre los parámetros en la definición de la función) y devuelve la extensión sin el punto. Así luego la puedes llamar todas las veces que quieras de esta forma:

1
2
3
4
5
6
7
8
9
10
function calcula_extension($fichero) {
	$extension_extraida = stristr($fichero, '.');
	return ltrim($extension_extraida, '.');
}
 
echo calcula_extension('curriculum.pdf') . '<br>';
echo calcula_extension('imagen.jpg') . '<br>';
echo calcula_extension('retrato.png') . '<br>';
echo calcula_extension('word.docx') . '<br>';
echo calcula_extension('excel.xlsx') . '<br>';

Esto te imprimiría por pantalla lo siguiente:

1
2
3
4
5
pdf
jpg
png
docx
xlsx

Ya tienes cómo obtener la extensión, entonces.

En la otra función tenías más errores. De primeras, tienes una variable $a que no está definida en ningún sitio, por lo que te daría error. Te propongo otra solución más cómoda, fíjate:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function tipo_fichero($extension) {
	$tipo = array(
		'pdf' => 'Documento Adobe PDF',
		'txt' => 'Documento de texto',
		'htm' => 'Documento HTML',
		'html' => 'Documento HTML',
		'ppt' => 'Presentación Microsoft Powerpoint',
		'doc' => 'Documento Microsoft Word',
		'gif' => 'Imagen GIF',
		'jpg' => 'Imagen JPG',
		'zip' => 'Archivo comprimido ZIP'
	);
 
	return $tipo[$extension];
}

Es sencillo. Primero creas un array en el que el índice es la extensión y el valor es el texto que quieres. Luego fíjate que le hemos pasado por parámetro la extensión. Por tanto, devuelves $tipo[$extension] que, por ejemplo si es "pdf", devolverías $tipo["pdf"], o sea, devolverías el texto "Documento Adobe PDF", que es lo que quieres.

Pero, ¿y si la extensión no es ninguna de esas? Pues lo vamos a arreglar comprobando antes si existe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function tipo_fichero($extension) {
	$tipo = array(
		'pdf' => 'Documento Adobe PDF',
		'txt' => 'Documento de texto',
		'htm' => 'Documento HTML',
		'html' => 'Documento HTML',
		'ppt' => 'Presentación Microsoft Powerpoint',
		'doc' => 'Documento Microsoft Word',
		'gif' => 'Imagen GIF',
		'jpg' => 'Imagen JPG',
		'zip' => 'Archivo comprimido ZIP'
	);
 
	if (array_key_exists($extension, $tipo)) {
		return $tipo[$extension];
	}
 
	return "";
}

Con array_key_exists comprobamos que $extension es uno de los índices de $tipo y, si es así, devolvemos su valor. Si no es así pasará por el return "", por lo que devolverá la cadena vacía.

Luego lo estás mostrando en una tabla, pero te aconsejo que intentes separar el código PHP de lo que es el HTML todo lo que puedas. Al final, te quedaría esto:

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
<?php
 
function calcula_extension($fichero) {
	$extension_extraida = stristr($fichero, '.');
	return ltrim($extension_extraida, '.');
}
 
function tipo_fichero($extension) {
	$tipo = array(
		'pdf' => 'Documento Adobe PDF',
		'txt' => 'Documento de texto',
		'htm' => 'Documento HTML',
		'html' => 'Documento HTML',
		'ppt' => 'Presentación Microsoft Powerpoint',
		'doc' => 'Documento Microsoft Word',
		'gif' => 'Imagen GIF',
		'jpg' => 'Imagen JPG',
		'zip' => 'Archivo comprimido ZIP'
	);
 
	if (array_key_exists($extension, $tipo)) {
		return $tipo[$extension];
	}
 
	return '';
}
 
$fichero = 'curriculum.pdf';
$extension = calcula_extension($fichero);
$tipo_fichero = tipo_fichero($extension);
?>
 
<table style="border: 2px solid">
	<tbody>
		<tr>
			<td><b><font size="4">Punto 4 - Tipo de fichero</font></b></td>
		</tr>
		<tr>
		<?php if ($tipo_fichero === ''): ?>
			<td><font size="3">El fichero <?php echo $fichero; ?> no tiene una extensión conocida</font></td>
		<?php else: ?>
			<td><font size="3">El fichero <?php echo $fichero; ?> es un archivo de tipo <?php echo $tipo_fichero; ?></font></td>
		<?php endif; ?>
		</tr>
	</tbody>
</table>

Tienes la lógica del programa en donde defines las dos funciones y luego las llamas para el fichero que has puesto (curriculum.pdf) y así obtienes el tipo del fichero que se guarda en $tipo_fichero. Luego cierras ese código PHP y empiezas con el HTML incrustando PHP allá donde lo necesites (para decidir si la extensión es conocida o no y el mensaje que se imprime).

Si necesitas alguna explicación más de ese código, coméntame y te digo.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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 Moisés
Val: 28
Ha disminuido su posición en 50 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Moisés (13 intervenciones) el 08/06/2020 19:17:10
La idea del ejercicio es que al poner manualmente "nombre.jpg" te extra el .jpg, con otra operacion te extrae el punto y por último te compara si la extension existe en el array y si es así te aparece un mensaje y si no existe te aparece otro mensaje.

De esta manera funciona pero el tutor me dice que lo he de hacer con funciones, te paso lo que yo he hecho sin funciones y me funciona bien y el enunciado del ejercicio por sino me he explicado bien
Gracias a todos por ayudarme.

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
<?php
//Resultado punto 4 - Tipo de fichero
 
//Asignamos a la variable el fichero a analizar
$fichero= 'curriculum.pdf';
 
//los arrays
 
$extension = array ('pdf', 'txt', 'htm', 'html', 'ppt', 'doc', 'gif', 'jpg', 'zip');
$tipo = array ('Documento Adobe PDF', 'Documento de texto', 'Documento HTML','Documento HTML', 'Presentación Microsoft Powerpoint', 'Documento Microsoft Word', 'Imagen GIF', 'Archivo comprimido ZIP', 'Archivo');
 
 
//extraemos la extension sin el punto para poder compararla con los arrays
$extension_extraida = stristr($fichero, '.');
$extension_sinpunto = ltrim ($extension_extraida, '.');
 
//Asigno el valor de la vusqueda del search a $i para usarla en la elección del array $tipo
$i = array_search($extension_sinpunto, $extension);
 
	echo "<table style='border:2px solid'>";
	echo "<tbody>\n";
	echo "<tr><td><b><font size=4>Punto 4 - Tipo de fichero</font></b></td></tr>";
	//Creo la condición y si no encuentra la extensión la búsqueda tendrá valor nulo y se ejecutara el if
	if ($i=="")
		{
 
		//Convierto la extensión a mayusculas
		$ext_may = strtoupper($extension_sinpunto);
		echo "<tr><td><font size=3>El fichero $fichero es del tipo Archivo $ext_may</td></tr>";
		}
 
	else
		{
		echo "<tr><td>El fichero $fichero es del tipo $tipo[$i]</td></tr></font>";
		}
echo "</tbody>\n";
echo "</table>\n";
echo "<br>";
 
 
?>
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 javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por javier (547 intervenciones) el 08/06/2020 20:15:11
Hola,

eso de que no has usado funciones no es así, que yo vea, has usado 3 funciones de PHP. Otra cosa es que no hayas unificado esas tres en una función tuya como te proponía Julio, de todas maneras es por comentarte de que si un tutor te esta diciendo o dando por valida la manera que tienes de programar (código espagueti), solo se me ocurren dos cosas, o estas muy al principio del curso o el curso esta muy anticuado, por que ya se viene programando a base de funciones en PHP desde hace muchos años y ahora la manera que realmente se ha visto que se programa de una forma mas rapida, estructurada y eficiente es con la programación orientada a objetos POO.

Es como hacer super funciones que hacen muchas cosas y tienen muchas propiedades.
Para reutilizar código, para trabajar en equipo, para la estructuración y futuro mantenimiento de una aplicación o una web.

Es tan solo una opinión.

Saludos
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
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Julio (830 intervenciones) el 08/06/2020 20:24:23
Dices que lo has de hacer con funciones..., ¿y cómo lo he hecho yo entonces? Tienes las dos funciones que has pedido y creo que te he explicado cómo funcionan, ¿no? No entiendo qué quieres decir o por qué no te sirve.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
Imágen de perfil de Moisés
Val: 28
Ha disminuido su posición en 50 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Moisés (13 intervenciones) el 08/06/2020 20:40:41
Chicos estoy haciendo un curso de iniciación de 150h, así que imaginad la práctica que tengo, pero voy consiguiendo a mi manera que todo me funcione aunque no sea perfecto.
Julio, lo que tu has hecho es perfecto pero no va a colar que eso lo haya hecho yo jajaja, por eso quería intentar ordenar un poco el mio y entregarlo así, definiendo las funciones y ordenando como me ha dicho el tutor.
No me malinterpretéis un abrazo y os agradezco toda la ayuda que me estáis dando.
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Julio (830 intervenciones) el 08/06/2020 20:46:37
Ya, pero has pedido dos funciones y ahí las tienes, incluso con menos líos de los que tú querías poner en principio.

Si no te va bien que el <table> esté fuera de la función, pues ponlo dentro como tú lo tenías y punto. O si quieres hacer el array de tipos de extensiones como tú lo tenías, adelante. Pero no hay más, tú necesitabas dos funciones que hicieran ciertas cosas y ahí las tienes.

Debes usar los parámetros (porque, si no, en este caso la función no te sirve de gran cosa) y debes utilizar el return para devolver valores.

La diferencia entre lo que tenías y lo que te he puesto es una mejor organización del código, además de corregir los errores. Pero lo del array y eso puedes ponerlo como tú quieras.

Lo importante es que veas que creas una función a la que le pasas el nombre del fichero y te devuelve su extensión, y creas otra función a la que le pasas una extensión y te devuelve (o te imprime en la tabla) qué tipo de archivo es.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por javier (547 intervenciones) el 08/06/2020 21:38:55
Antes no lo sabias, ahora si, aplicalo, no haces mas que aplicar tu conocimiento, te venga del curso de 150H o sea de este foro, pero si sabes algo, o acabas de aprenderlo, por que no aplicarlo?

saludos
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
Imágen de perfil de Moisés
Val: 28
Ha disminuido su posición en 50 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué cuando defino la función me da error?

Publicado por Moisés (13 intervenciones) el 08/06/2020 22:22:01
Pues lo dejo como Julio se ha currado.
Mil 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