O HTML pode ser incorporado na instrução "if" do PHP?

120

Gostaria de incorporar HTML dentro de uma instrução PHP if, se for possível, porque estou pensando que o HTML apareceria antes da instrução PHP if for executada.

Estou tentando acessar uma tabela em um banco de dados. Criei um menu suspenso em HTML que lista todas as tabelas no banco de dados e, depois de selecionar a tabela no menu suspenso, clico no botão enviar.

Eu uso a função isset para ver se o botão enviar foi pressionado e executo um loop em PHP para exibir o conteúdo da tabela no banco de dados. Portanto, neste ponto, tenho a tabela completa, mas quero executar mais algumas consultas nesta tabela. Daí a razão pela qual estou tentando executar mais HTML dentro da instrução if. No final das contas, estou tentando atualizar (1 ou mais conteúdo em uma linha ou várias linhas) ou excluir (1 ou mais linhas) o conteúdo da tabela. O que estou tentando fazer é criar outro menu suspenso que corresponda a uma coluna em uma tabela para tornar a pesquisa da tabela mais fácil e botões de opção que correspondam se eu gostaria de atualizar ou excluir o conteúdo da tabela.

IMSoP
fonte

Respostas:

371
<?php if($condition) : ?>
    <a href="http://yahoo.com">This will only display if $condition is true</a>
<?php endif; ?>

A pedido, aqui está o elseif e o else (que também pode ser encontrado nos documentos )

<?php if($condition) : ?>
    <a href="http://yahoo.com">This will only display if $condition is true</a>
<?php elseif($anotherCondition) : ?>
    more html
<?php else : ?>
    even more html
<?php endif; ?>

É simples assim.

O HTML só será exibido se a condição for satisfeita.

Frank Farmer
fonte
"... (que você também pode encontrar em [os documentos] [1])" Onde exatamente estão esses documentos de que você fala?
gmeben
39

Sim,

<?php
if ( $my_name == "someguy" ) {
    ?> HTML GOES HERE <?php;
}
?>
jgallant
fonte
15

Sim.

<?  if($my_name == 'someguy') { ?>
        HTML_GOES_HERE
<?  } ?>
caos
fonte
6
Alguns servidores não têm libxml ou pdo_mysql instalado, mas ainda podemos recomendar soluções para usá-los.
caos
2
Acho que isso deveria ser apenas um comentário para a resposta de Jon.
Rimas Kudelis,
3
Mmmkay. Você quer me dizer exatamente como eu incorporo código formatado em um comentário?
caos
3

Usar tags de fechar / abrir PHP não é uma solução muito boa por 2 motivos: você não pode imprimir variáveis ​​PHP em HTML simples e torna seu código muito difícil de ler (o próximo bloco de código começa com um colchete final }, mas o leitor não tenho ideia do que era antes).

Melhor é usar a sintaxe heredoc . É o mesmo conceito que em outras linguagens (como bash).

 <?php
 if ($condition) {
   echo <<< END_OF_TEXT
     <b>lots of html</b> <i>$variable</i>
     lots of text...
 many lines possible, with any indentation, until the closing delimiter...
 END_OF_TEXT;
 }
 ?>

END_OF_TEXTé o seu delimitador (pode ser basicamente qualquer texto como EOF, EOT). Tudo entre aspas é considerado pelo PHP como se estivesse entre aspas duplas, então você pode imprimir variáveis, mas não precisa escapar de aspas, por isso é muito conveniente para imprimir atributos html.

Observe que o delimitador de fechamento deve começar no início da linha e o ponto-e-vírgula deve ser colocado logo depois dele, sem outros caracteres ( END_OF_TEXT;).

Heredoc com comportamento de string entre aspas simples ( ') é chamado de nowdoc . Nenhuma análise é feita dentro do nowdoc. Você o usa da mesma maneira que o heredoc, bastando colocar o delimitador de abertura entre aspas simples - echo <<< 'END_OF_TEXT'.

Marki555
fonte
Muito obrigado por me lembrar disso. Heredoc é extremamente útil para HTML mais complexo com várias condições e muito mais fácil do que caracteres de escape e aspas!
UTCWebDev
2

Portanto, se a condição for igual ao valor que você deseja, o documento php executará "include" e o include adicionará esse documento à janela atual, por exemplo:

`

<?php
$isARequest = true;
if ($isARequest){include('request.html');}/*So because $isARequest is true then it will include request.html but if its not a request then it will insert isNotARequest;*/
else if (!$isARequest) {include('isNotARequest.html')}
?>

`

Login rápido
fonte
0
<?php if ($my_name == 'aboutme') { ?>
    HTML_GOES_HERE
<?php } ?>
govindak
fonte
1
Adicione alguma descrição à sua resposta.
Parixit de
10
A descrição poderia ser "copy-paste de 5 anos de respostas": P
Erenor Paz 14/01/2015
0

Eu sei que este é um post antigo, mas eu realmente odeio que haja apenas uma resposta aqui que sugere não misturar html e php. Em vez de misturar conteúdo, deve-se usar sistemas de modelo ou criar um sistema de modelo básico.

No php

<?php 
  $var1 = 'Alice'; $var2 = 'apples'; $var3 = 'lunch'; $var4 = 'Bob';

  if ($var1 == 'Alice') {
    $html = file_get_contents('/path/to/file.html'); //get the html template
    $template_placeholders = array('##variable1##', '##variable2##', '##variable3##', '##variable4##'); // variable placeholders inside the template
    $template_replace_variables = array($var1, $var2, $var3, $var4); // the variables to pass to the template
    $html_output = str_replace($template_placeholders, $template_replace_variables, $html); // replace the placeholders with the actual variable values.
  }

  echo $html_output;
?>

No html (/path/to/file.html)

<p>##variable1## ate ##variable2## for ##variable3## with ##variable4##.</p>

A saída disso seria:

Alice ate apples for lunch with Bob.
Bruce
fonte