PHP - Retorno de uma função
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:
Código 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.
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
Curtidas 0
Melhor post
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:
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
02/08/2018
Duas observações:
1> Desconsiderar
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.
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
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.
Sem alterações no código HTML.
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
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:
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