PHP - Retorno de uma função

PHP

HTML5

02/08/2018

Estou estudando a linguagem PHP e peguei uns exercícios na internet e vou resolvendo e incrementando conforme meu entendimento.

Me deparei com uma situação que acredito ser básica, mas que esta me gerando algum trabalho e não consigo resolver. Caso alguém possa me ajudar, fico agradecido.

Basicamente, eu entro com o nome de um livro, informo o tipo de usuário que esta locando e o sistema gera um recibo, não preciso imprimir, nem gerar em pdf apenas gerar diretamente na tela.


Esse é meu código PHP:

<?php
		date_default_timezone_set( ''America/Sao_Paulo'' );
		setlocale(LC_ALL, "pt_BR");
		$data  = date("d/m/Y - H:i:s");


		if ( isset($_POST[''nomeLivro'']) ) {

			$nomeLivro = $_POST[''nomeLivro''];
			$usuario = $_POST[''usuario''];

			if ( $usuario == 1 ) {
				$prazoDias = 3;
				$nomeUsario = "Aluno";
				$dataEntrega = $data;

				recibo($data,$nomeLivro,$nomeUsario,$prazoDias,$dataEntrega);
			
			} else {
				$prazoDias = 10;
				$nomeUsario = "Professor";
				$dataEntrega = $data;

				recibo($data,$nomeLivro,$nomeUsario,$prazoDias,$dataEntrega);
			}

		} else {
			unset($mensagem);
		}

		function recibo($data, $nomeLivro, $nomeUsario, $prazoDias, $dataEntrega) {

			$mensagem  = "<strong>*RECIBO BIBLIOTECA UNIVERSITARIA*</strong><br>";
			$mensagem .= "<strong>=================================</strong><br>";
			$mensagem .= "<strong>Data Locação: </strong>" . $data . "<br><br>";
			$mensagem .= "<strong>Livro: </strong>" . $nomeLivro . "<br>";
			$mensagem .= "<strong>Usuario: </strong>" . $nomeUsario . "<br>";
			$mensagem .= "<strong>Prazo de entrega: </strong>" . $prazoDias . " dias" . "<br>";
			$mensagem .= "<strong>Data de entrega: </strong>" . $dataEntrega;	

			return $mensagem;
		}
?>



Código HTML:

<!DOCTYPE html>
<html lang="pt-br">
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>Exercicio 07</title>
	<link rel="stylesheet" href="">
</head>
<body>
	<form action="Exercicio07.php" method="POST" accept-charset="utf-8">
		<label>Livro: </label>
		<input type="text" name="nomeLivro" placeholder="Nome do livro" required style=''width: 450px;''>
		<select name="usuario">
			<option value="0" active>--Tipo Usuario--</option>
			<option value="1">Aluno</option>
			<option value="2">Professor</option>
		</select>
		<input type="submit" name="emprestar" value="Emprestar">

		<?php if ( isset($mensagem) ) { ?>
			<p><?php echo $mensagem ?></p>
		<?php } ?>
	</form>	
</body>
</html>



O que acontece é que a função não esta retornando ou esta retornando vazia, a variável $mensagem, não entendo o porque e não consegui gerar um debug para ver onde estou errando.

desde já obrigado.
William Dutra

William Dutra

Curtidas 0

Melhor post

Fernando Duwe

Fernando Duwe

02/08/2018

Oi William,

Nesse caso, sua função monta o html a ser exibido, porém não a exibe. Sim, você está certo, a melhor forma é sua função retornar o código que depois deve ser exibido, para que possa-se aproveitar melhor a função, no seu caso, faria da seguinte forma:

        if(isset($_POST[''nomeLivro'']))
		{
            $nomeLivro = $_POST[''nomeLivro''];
            $usuario   = $_POST[''usuario''];
  			$vrExibir  = "";
 
            if ( $usuario == 1 )
			{
                $prazoDias   = 3;
                $nomeUsario  = "Aluno";
                $dataEntrega = $data;
 
                $vrExibir = recibo($data,$nomeLivro,$nomeUsario,$prazoDias,$dataEntrega);
            } else
			{
                $prazoDias   = 10;
                $nomeUsario  = "Professor";
                $dataEntrega = $data;
 
                $vrExibir = recibo($data,$nomeLivro,$nomeUsario,$prazoDias,$dataEntrega);
            }
 
			echo $vrExibir;
        } else
		{
            unset($mensagem);
        }
GOSTEI 1

Mais Respostas

William Dutra

William Dutra

02/08/2018

Duas observações:

1> Desconsiderar

$dataEntrega = $data;


ainda estou trabalhando nisso.

2> se mudar return para echo, ele imprime na tela as informações, mas entendo que não seja a maneira correta.
GOSTEI 0
William Dutra

William Dutra

02/08/2018

Boa Fernando, me ajudou muito sua resposta, era simples o negocio rsrs

para quem vier a ver, deixo abaixo como ficou o código, méritos a nosso amigo.

<?php
		date_default_timezone_set( 'America/Sao_Paulo' );
		setlocale(LC_ALL, "pt_BR");
		$data  = date("d/m/Y - H:i:s");


		if ( isset($_POST['nomeLivro']) ) {

			$nomeLivro = $_POST['nomeLivro'];
			$usuario = $_POST['usuario'];

			if ( $usuario == 1 ) {
				$prazoDias = 3;
				$nomeUsario = "Aluno";
				$dataEntrega = $data;

				$mensagem = recibo($data,$nomeLivro,$nomeUsario,$prazoDias,$dataEntrega);
			
			} else {
				$prazoDias = 10;
				$nomeUsario = "Professor";
				$dataEntrega = $data;

				$mensagem = recibo($data,$nomeLivro,$nomeUsario,$prazoDias,$dataEntrega);
			}

		} else {
			unset($mensagem);
		}

		function recibo($data, $nomeLivro, $nomeUsario, $prazoDias, $dataEntrega) {

			$mensagem  = "<strong>*RECIBO BIBLIOTECA UNIVERSITARIA*</strong><br>";
			$mensagem .= "<strong>=================================</strong><br>";
			$mensagem .= "<strong>Data Locação: </strong>" . $data . "<br><br>";
			$mensagem .= "<strong>Livro: </strong>" . $nomeLivro . "<br>";
			$mensagem .= "<strong>Usuario: </strong>" . $nomeUsario . "<br>";
			$mensagem .= "<strong>Prazo de entrega: </strong>" . $prazoDias . " dias" . "<br>";
			$mensagem .= "<strong>Data de entrega: </strong>" . $dataEntrega;	

			return $mensagem;
		}
?>


Sem alterações no código HTML.
GOSTEI 0
Fernando Duwe

Fernando Duwe

02/08/2018

William,

Nesse caso o fonte acima é do fonte Exercicio07.php, correto?
O comportamento padrão é que essa página seja carregada e ai sim, o exemplo que lhe passei seja exibido. Caso você queira exibir o conteudo dentro do mesmo formulário, eu faria da seguinte forma (mantendo as alterações sugeridas anteriormente:

	<form method="POST" accept-charset="utf-8">
		<label>Livro: </label>
		<input type="text" name="nomeLivro" placeholder="Nome do livro" required style=''width: 450px;''>
		<select name="usuario">
			<option value="0" active>--Tipo Usuario--</option>
			<option value="1">Aluno</option>
			<option value="2">Professor</option>
		</select>
		<input type="submit" name="emprestar" value="Emprestar">

		<?php
                     require("Exercicio07.php");
               ?>
	</form>	
GOSTEI 0
POSTAR