3
respostas

PHP e HTM juntos. Dúvida Formulário.

Olá pessoal!

Sempre que eu vou escrever formulários utilizando PHP e HTML, eu utilizo os códigos juntos. Inicio o php e utilizo echo ou print para imputar as tags html. Como no exemplo abaixo:

<?php

    print "

        <form method = 'POST' action = ''>

            <input type = 'number' name = 'n1' placeholder = 'Digite um número' required>

            <input type = 'number' name = 'n2' placeholder = 'Digite outro número' required>

            <input type = 'number' name = 'n3' placeholder = 'Digite o último número' required>

            <input type = 'submit' value = 'Enviar'>

        </form>
    ";


        $n1=$_POST['n1'];

        $n2=$_POST['n2'];

        $n3=$_POST['n3'];

No entanto, já ouvi colegas dizerem que isso não é uma boa prática. Que o correto é usar a liguagem de marcação separada da liguagem de programação. Escrever primeiro os códigos php, depois encerrar, e escrever os códigos html depois.

Isso é verdade? Qual a melhor maneira de escrever esse tipo de código?

3 respostas

Olá Matheus, seguindo a Formação de PHP aqui da Alura mesmo você já vai aprender um pouco mais sobre os padrões de código, um deles é o MVC. Em geral seu código PHP de acesso e manipulação do Banco de Dados vai ficar em um Controller (Classe PHP), enquanto seu formulário HTML vai ficar em uma View. De forma bem simples é o Controller que vai ficar responsável por processar as requisições (POST, GET, etc) e gerar um resposta, enquanto a View fica responsável pelo código HTML ou código PHP dinâmico para exibir título, um nome de usuário ou outra coisa dinâmica para página.

Exemplo de um Controller e uma View criadas no treinamento do framework PHP Laravel aqui da Alura.

Segue abaixo um Controller

class SeriesController extends Controller 
{
    //método para listar os Series
    public function index(Request $request) 
    {

        $series = Serie::query()
        ->orderBy('nome', 'asc')
        ->simplePaginate(8);

        //pegar mensagem de sessão difinida ao adionar Serie com sucesso
        $mensagem = $request->session()->get('mensagem');
        //remove sessão depois de exibir
        $request->session()->remove('mensagem');

        return view('series.index', compact('series', 'mensagem'));
    }

    //método para abrir página de adicionar novas Series
    public function create()
    {
        return view('series.create');
    }

    //método para salvar no banco
    public function store(SeriesFormRequest $request, CriadorDeSerie $criadorDeSerie)
    {
        //iniciamos capa como sendo null
        $capa = null;
        //verificar se o campo capa vem com um arquivo
        if($request->hasFile('capaDaSerie')){
            //se tiver, fazemos o upload do arquivo
            //e atribuímos a variável capa
            $capa = $request->file('capaDaSerie')->store('public/serie');
        }

        $serie = $criadorDeSerie->criarSerie(
            $request->nome, 
            $request->qtd_temporadas, 
            $request->qtd_episodios,
            $capa
        );

        //criando evento
        $eventoNovaSerie = new EventsNovaSerie(
            $request->nome, 
            $request->qtd_temporadas, 
            $request->qtd_episodios
        );
        //disprando evento
        event($eventoNovaSerie);

        $request->session()
            ->flash(
            'mensagem', 
            "Série {$serie->id} adicionada com sucesso: {$serie->nome}"
        );

        return redirect()->route('listar_series');
    }
}    

Segue a View de um formulário

@extends('layout')

@section('titulo')
    Adicionar série
@endsection

@section('cabecalho')
    Nova série
@endsection

@section('conteudo')

@include('erros', ['errors' => $errors])

        <form method="post" enctype="multipart/form-data">
            @csrf
            <div class="row">
                <div class="col col-md-6">
                    <label for="nome" class="form-label">Nome</label>
                    <input type="text" class="form-control mb-2" name="nome">
                </div>

                <div class="col col-md-2">
                    <label for="qtd_temporadas" class="form-label">Temporadas</label>
                    <input type="number" class="form-control mb-2" name="qtd_temporadas">
                </div>

                <div class="col col-md-2">
                    <label for="qtd_episodios" class="form-label">Episódios</label>
                    <input type="number" class="form-control mb-2" name="qtd_episodios">
                </div>
            </div>

            <div class="row">
                <div class="col col-10">
                    <label for="capaDaSerie" class="form-label">Capa</label>
                    <input type="file" class="form-control mb-2" name="capaDaSerie" id="capaDaSerie">
                </div>
            </div>
            <button type="submit" class="btn btn-primary">Adicionar</button>
        </form>
@endsection

Seguindo os treinamentos você vai aprender como ir melhorando o código, mas esse começo é importante para a lógica e princípios da linguagem.

Muito obrigado. Vou me acalmar e seguir a formação.

Olá Matheus! É isso! Continue firme na formação. Se preocupe nesse momento em entender como como usar o PHP junto com o HTML. A medida que a formação for seguindo o código postado acima vai fazer muito sentido pra você.

No exemplo acima postado pelo Lucas, o código esta usando um Sistema de Templates PHP, chamado Blade, que foi criado pela equipe do Framework Laravel.

Esse sistema de templates possibilita o reuso de código e simplifica a inserção de trechos PHP em páginas HTML com uma sintaxe mais limpa.

Confie na formação da Alura e siga firme, você vai conseguir ir longe.

Sucesso!