Funciones

Contactar con el profesor

Son bloques de código reutilizables.

Funciones 1

Función que no devuelve nada, sin parámetros

<?php
	function saludar(){
		echo "Buenas tardes";
	}

	saludar();
?>

Función que no devuelve nada, con parámetros

<?php
	function saludar($nombre){
		echo "Buenas tardes ". $nombre;
	}

	saludar("Pablo");
?>

Ejercicios

1. Crear una función llamada “hoyQuieroComer” que recibe un parámetro “comida”.

Cuando llamemos a la función se mostrará un mensaje indicándonos lo que deseamos comer.

2. Crear una función que recibe un número y calcula su cubo.

3. Crea una función que recibe el ancho y el alto de un rectángulo y calcula su perímetro.

Cuando una función recibe varios parámetros, estos irán separados por coma.
Ejemplo:

calculaPerimetro($alto, $ancho);

Función que devuelve un valor

<?php
	function saludar1(){
		$textoDevuelto = "buenos dias";
		return $textoDevuelto;
	}
	function saludar2(){
	$textoDevuelto = "buenas tardes";
}


echo saludar1();
echo saludar2();
?>

Pregunta:
¿Por qué el primer echo funciona y el segundo imprime “none”?.

Ejercicios

1. Reescribir el ejercicio de la calculadora utilizando funciones para las operaciones aritméticas.

El formulario no se llamará a sí mismo, si no a un archivo php externo.

function suma($operando1, $operando2){
	$solucion = $operando1 + $operando2;
	return $solucion;	
}

2. Reescribir el ejercicio de la calculadora utilizando una única función que reciba 3 parámetros (los dos operandos y la operación a realizar). Dentro de esta función estará el switch que determina la operación a realizar.

3. Ejercicio viaje

Crea una función llamada coste_hotel que recibe como parámetro el número de noches. La función debe devolver cuanto es necesario pagar teniendo en cuenta que cada noche cuesta 140 euros.

$num_noches = $_REQUEST['num_noches'];

$resultado1 = coste_hotel($num_noches);

$resultadoTotal = $resultado1 + ...

4. Continuación ejercicio viaje

Continuando el ejercicio anterior, después de la función ya escrita añadiremos otra función llamada coste_avion. Esta función tiene como parámetro de entrada el nombre de una ciudad y devolverá un coste en función de dicho parámetro.

Los costes por ciudad son los siguientes:
“Oviedo”: 183
“Tokyo”: 220
“Madrid”: 222
“Barcelona”: 475

5. Continuación ejercicio viaje II

Continuando con el ejercicio anterior, después de las dos funciones ya escritas añadiremos otra función llamada coste_alquiler_coche. Esta función tiene como parámetro de entrada el número de noches y devolverá un coste en función de dicho parámetro, teniendo los siguientes aspectos en cuenta:

  • Cada día de alquiler cuesta 40 €.
  • Si alquilas un coche por 3 días o más, obtienes un descuento de 20€ sobre el total.
  • Si alquilas un coche por 7 días o más, obtienes un descuento de 50€ sobre el total (no acumulable con los 20€ de haber alquilado por más de 3 días).

Calcular también el coste total de todo el viaje.

Mandar mail

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

if(mail("pablomonteserin@pablomonteserin.com", "mail de mi página web", $msg, $headers)){
}

Para mandar un correo es necesario que la página HTML del formulario de envío, la página PHP que lo procesa, el servidor PHP que procesa el mail y el servidor de correo que lo recibe utilicen la misma codificación.

Para comprobar que el mail se envía si no tenemos cuenta de correo, podemos usar mailinator

Subir un fichero al servidor

<form action="form.php" method="post"  enctype="multipart/form-data">
	<input type="file" name="foto">
</form>
form.php
if(isset($_FILES['foto'])){
	$errors= array();
	$file_name = $_FILES['foto']['name'];
	$file_size = $_FILES['foto']['size'];
	$file_tmp = $_FILES['foto']['tmp_name'];
	$file_type = $_FILES['foto']['type'];
	$file_ext=strtolower(end(explode('.',$_FILES['foto']['name'])));
   
	$url = dirname(__FILE__)."/uploads/".$file_name;
   
	$extensions= array("jpeg","jpg","png","pdf","zip", "rar");
   
	if(in_array($file_ext,$expensions)=== false){
		$errors[]="Estensión no permitida.";
	}
   
	if($file_size > 10485760) {
		$errors[]='File size must be excately 10 MB';
	}

	if (empty($errors)==true) {
		if(move_uploaded_file($file_tmp,$url)){
			echo "subida con exito";
			chmod($url, 0777);
		}else{
			echo "problema en la subida";
		}
	}
}

Mandar un mail con con ficheros adjuntos

Usaremos la librería PHPMailer.

Subiremos los ficheros al servidor y luego los adjuntaremos al mail.

form.php
$mail = new PHPMailer(true);

try {
	//Server settings
	$mail->SMTPDebug = 2;                                       	// Enable verbose debug output
	$mail->isSMTP();                                            	// Set mailer to use SMTP
	$mail->Host       = 'smtp.server.com';  // Specify main and backup SMTP servers
	$mail->SMTPAuth   = true;                                   	// Enable SMTP authentication
	$mail->Username   = 'mail@examle.com';                     	// SMTP username
	$mail->Password   = "*********";                                // SMTP password
	$mail->SMTPSecure = 'ssl';                                  	// Enable TLS encryption, `ssl` also accepted
	$mail->Port       = 465;                                    	// TCP port to connect to
   
	//Recipients
	$mail->setFrom('contact@sonowat.com', 'Contacto Sonowat');
	$mail->addAddress('paramonty@gmail.com');     			// Add a recipient
	// $mail->addAddress('ellen@example.com');               	// Name is optional
	$mail->addReplyTo($email, 'Information');
	// $mail->addCC('cc@example.com');
	// $mail->addBCC('bcc@example.com');
	$mail->addAttachment($url);         				// Add attachments
   
	// Content
	$mail->isHTML(true);                                  		// Set email format to HTML
	$mail->Subject = 'Contacto desde www.sonowat.com';
	$mail->Body    = $msg;						// $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
	$mail->send();
	echo 'Message has been sent';
} catch (Exception $e) {
	echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Añadir el Captcha de google al formulario

Necesitamos dos claves que obtendremos en esta página de google.

pagina.html
<script src='https://www.google.com/recaptcha/api.js?render=CLAVE-SITIO-WEB'></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('CLAVE-SITIO-WEB', {action: 'comentario'})
.then(function(token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
</script>
form.php
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'; 
$recaptcha_secret = 'CLAVE-SECRETA'; 
$recaptcha_response = $_POST['recaptcha_response']; 
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response); 
$recaptcha = json_decode($recaptcha); 
// Miramos si se considera humano o robot: 
if($recaptcha->score >= 0.6){
	echo 'Hay un 60% de probabilidad de que seas un humano';
	if(move_uploaded_file($file_tmp,$url)){
		echo "subida con exito";
		chmod($url, 0777);
		echo "Success";
	}else{
		echo "problema en la subida";
	}  
}else{
	echo 'Estás por debajo del 60% de probabilidad de que seas humano, mejor no me fío.';
}
← bucle while en PHP
Mandar un mail con HTML y PHP →

Aviso Legal | Política de privacidad