Fórum PHP - Retorno de uma função #595944
02/08/2018
0
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
Curtir tópico
+ 0Post mais votado
02/08/2018
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);
}
Fernando Duwe
Gostei + 1
Mais Posts
02/08/2018
William Dutra
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
02/08/2018
William Dutra
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
02/08/2018
Fernando Duwe
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
Clique aqui para fazer login e interagir na Comunidade :)