4
respostas

Abreefecha codigo php

Boa noite a todos minha pergunta aqui é a necessidade de se abrir tantos blocos de codigo php como no exemplo abaixo ? Não poderia ser um <?php no inicio e fechar o php la no fim do código ? É necessário ser assim ? porque ?

abrephp<?php include ("cabecalho.php"); ?>fechaphp

abrephp<?php
$nome = $_GET['nome'];
$preco = $_GET['preco'];
$conexao = mysqli_connect("localhost", "root", "");

if(mysqli_query($conexao, $query)) {
?>fechaphp
<p class="alert-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>
abrephp<?php
} else {
<? fechaphp
<p class="alert-danger">O produto <? = $nome; ?> não foi adicionado</p>
abrephp<?php
}
?>fechaphp

abrephp<?php include ("rodape.php"); ?>fechaphp
4 respostas

Regis,

esse é o jeito do php mesmo. Não sei como anda o PHP orientado a objetos, mas acredito que tenham melhorado isso.

Pra trabalhar de forma procedural com php é desse jeito mesmo, essa salada, misturando html e php.

Acontece que o interpretador do php no lado do servidor precisa decidir algumas coisas (lógica da programação, regra de negócio, etc) e, então, retornar o código html para ser exibido no navegador do lado do cliente. Se você reparar bem, você poderia substituir os trechos em html por echo. Seria equivalente, mas é incomum e acho que pode dar problemas, principalmente com os caracteres que precisam de escape.

Como disse, acredito que devam ter melhorado isso no PHP orientado a objetos. Mas esse "jeitão" aí do php também é comum em asp e jsp, por exemplo. Se você seguir a trilha, devem começar a usar o PHP OO, pra facilitar as coisas... hehe

Bons estudos.

Abraço.

Boa tarde, Regis!

Sim, realmente é assim se você estiver usando PHP puro.

Porque isso acontece?

Antes de enviar a página para o navegador, o servidor precisa processar a página que estiver em extensão .php, o que estiver fora das tags <? php ?> ou <?= ?> é ignorado pelo interpretador do PHP e por isso você precisa deixar explícito o que é e o que não é PHP, quase todas as linguagens são assim.

Mas PHP é usado tanto pra WEB, como que a galera consegue trabalhar nesa bagunça? Nem todo mundo usa PHP puro, vários Frameworks diminuem muito esse trabalho ao trabalhar com MVC e templates, mas se você está aprendendo PHP agora continue com PHP puro mesmo.

Alguns exemplos de Frameworks são Laravel, Codeigniter, Yii, Zend, Cake, etc.

Mas não tema, jovem padawan, dá pra melhorar bastante esse código, por exemplo, nessa linha:

<p class="alert-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>

Pode ser substituída por:

<?= "<p class='alert-success'>Produto" . $nome . " , "  . $preco . "adicionado com sucesso!</p>" ?>

Não é necessário ficar fechando e abrindo tag PHP toda hora, faça o inverso, abra uma vez e concatene com string o que você quer imprimir em HTML.

Espero ter ajudado.

Forte abraço!

Eu coloquei o seu exemplo e continua dando erros nesse parte da mensagem

Para ficar mais claro o que os colegas explicaram, uma forma de simplificar os abre e fecha deste código seria o seguinte:

<?php include ("cabecalho.php"); ?>
<?php 
$conteudo_da_pagina = "";
$nome = $_GET['nome'];
$preco = $_GET['preco'];
$conexao = mysqli_connect("localhost", "root", "");

if(mysqli_query($conexao, $query)) {
    $conteudo_da_pagina = '<p class="alert-success">Produto' . $nome .',' . $preco . ' adicionado com sucesso!</p>';
} else {
    $conteudo_da_pagina = '<p class="alert-danger">O produto' . $nome .' não foi adicionado</p>';
}
echo ($conteudo_da_pagina);
?>
<?php include ("rodape.php"); ?>

Uma outra forma de fazer a mesma coisa seria o seguinte:

<?php include ("cabecalho.php"); ?>
<?php 
$mensagem = "";
$classe = "";
$nome = $_GET['nome'];
$preco = $_GET['preco'];
$conexao = mysqli_connect("localhost", "root", "");

if(mysqli_query($conexao, $query)) {
    $classe = 'alert-success';
    $mensagem = 'Produto' . $nome .',' . $preco . ' adicionado com sucesso!';
} else {
    $classe = 'alert-danger';
    $conteudo_da_pagina = 'O produto' . $nome .' não foi adicionado';
}
?>
<p class="<?= $classe;?>"><?= $mensagem; ?></p>

<?php include ("rodape.php"); ?>