Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

como funciona a abertura e fechamento do php

<?php include("cabecalho.php");?> <?php include("conecta.php"); ?> <?php

$nome = $_GET["nome"]; $preco = $_GET["preco"];

function insereProduto ($conexao,$nome,$preco) { $query =" insert into produtos (nome,preco) values('{$nome}',{$preco})"; return mysqli_query($conexao,$query); }

if (insereProduto($conexao,$nome,$preco)) { ?>

Produto <?= $nome; ?>, <?= $preco; ?> adicionado ocm sucesso!

<?php } else { $msg = mysqli_error($conexao); ?>

Produto <?= $nome; ?>, <?= $preco; ?> nao foi adicionado: <?= $msg ?>

<?php }

?>

Nessa aula ai acima o php aberto antes de iniciar as variaveis $nome e $preço, foi aberto um <?php e depois esse mesmo foi fechado na '' { '' chave do inicio do if '' if (insereProduto($conexao,$nome,$preco)) { ?> '' queria saber o por que desse php teve de ser fechado no inicio do if e nao pode usar 1 para ele e o else, no caso na hora do else tbm é aberto outro <?php e fechado na '' chave '' { do else.

2 respostas
solução!

Olá Rubens, Tudo bem?

As tags <?php e ?> indicam o conteúdo que deve ser processado pelo PHP, tudo o que estiver fora delas será interpretado como texto pleno e enviado para frente, no caso do navegador pode ser interpretado como HTML, no caso de uma linha de comando pode ser interpretado como uma saída de texto e assim por diante.

O código

<?php include("cabecalho.php");?> <?php include("conecta.php"); ?> <?php

$nome = $_GET["nome"]; $preco = $_GET["preco"];

function insereProduto ($conexao,$nome,$preco) { $query =" insert into produtos (nome,preco) values('{$nome}',{$preco})"; return mysqli_query($conexao,$query); }

if (insereProduto($conexao,$nome,$preco)) { ?>

Produto <?= $nome; ?>, <?= $preco; ?> adicionado ocm sucesso!

<?php } else { $msg = mysqli_error($conexao); ?>
Produto <?= $nome; ?>, <?= $preco; ?> nao foi adicionado: <?= $msg ?>

<?php }
?>

Poderia ser escrito assim:

<?php 
  include("cabecalho.php");
  include("conecta.php");
  $nome = $_GET["nome"];
  $preco = $_GET["preco"];
  function insereProduto ($conexao,$nome,$preco) { 
    $query =" insert into produtos (nome,preco) 
                           values('{$nome}',{$preco})"; 
    return mysqli_query($conexao,$query); 
  }

  if (insereProduto($conexao,$nome,$preco)) { 
?>

Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!

<?php } else { $msg = mysqli_error($conexao); ?>

Produto <?= $nome; ?>, <?= $preco; ?> nao foi adicionado: <?= $msg ?>

<?php
   }
?>

O par de tags <?php e ?> indicam que o que estiver entre eles deve ser processado como código php, enquanto o par <?= e ?> indica que o que estiver entre eles deve ser processado como PHP e exibido em tela.

Você pode entender que o <?= $nome; ?> é uma versão reduzida de <?php echo $nome; ?>

Eu fechei as tags no código reescrito antes das partes que não deveriam ser processadas pelo PHP.

Ainda neste ponto é importante que embora determinadas partes não estejam entre o <?php e ?> elas ainda fazem parte do fluxo de execução, no exemplo que eu reescrevi você pode ver que há este trecho:

[...]
  if (insereProduto($conexao,$nome,$preco)) { 
?>

Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!

<?php } else { $msg = mysqli_error($conexao); ?>

Produto <?= $nome; ?>, <?= $preco; ?> nao foi adicionado: <?= $msg ?>

<?php
   }

Você pode notar que há duas linhas que exibem o rpoduto e uma mensagem, um deles de sucesso e uma deles de falha, embora as mensagens não estejam dentro do <?phpelas ainda estão envolvidas entre um if {} else {}, neste caso o se a condição do IF não for executada ele pula direto para o else, não exibindo nada que esteja entre as chaves ({ e }) que definem a execução do IF.

Sim isso eu entendi, eu nao entendi o porque do professor ter botado tantos abre e fecha <?php> vc fez o codigo com 1 so para começar o cabeçalho o conecta etc, ficaria mais didatico a aula com ele simplificado, por isso me confundi um pouco, a parte de o navegador identificar o que é php e html eu sei, o que me deu a duvida realmente foi o porque de tantas tags php ali no codigo sendo que poderia ter sido simplificada, enfim obrigado por tirar a duvida.