¿Se puede incrustar HTML dentro de la declaración "if" de PHP?

120

Me gustaría incrustar HTML dentro de una instrucción if de PHP, si es posible, porque creo que el HTML aparecerá antes que la instrucción if de PHP se ejecute.

Estoy intentando acceder a una tabla en una base de datos. Creé un menú desplegable en HTML que enumera todas las tablas en la base de datos y una vez que selecciono la tabla en el menú desplegable, presiono el botón enviar.

Utilizo la función isset para ver si se ha presionado el botón de envío y ejecuto un ciclo en PHP para mostrar el contenido de la tabla en la base de datos. Entonces, en este punto, tengo la tabla completa, pero quiero ejecutar algunas consultas más en esta tabla. De ahí la razón por la que estoy tratando de ejecutar más HTML dentro de la declaración if. En última instancia, estoy intentando actualizar (1 o más contenidos en una fila o varias filas) o eliminar (1 o más filas) el contenido de la tabla. Lo que estoy tratando de hacer es crear otro menú desplegable que corresponda a una columna en una tabla para facilitar la búsqueda de la tabla y botones de opción que correspondan a si me gustaría actualizar o eliminar el contenido de la tabla.

IMSoP
fuente

Respuestas:

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

A pedido, aquí hay elseif y else (que también puede encontrar en los 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; ?>

Es así de simple.

El HTML solo se mostrará si se cumple la condición.

Frank Farmer
fuente
"... (que también puede encontrar en [los documentos] [1])" ¿Dónde están exactamente estos documentos de los que habla?
gmeben
39

Si,

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

Si.

<?  if($my_name == 'someguy') { ?>
        HTML_GOES_HERE
<?  } ?>
caos
fuente
6
Algunos servidores no tienen libxml o pdo_mysql instalados, pero aún podemos recomendar soluciones que los utilicen.
caos
2
Creo que esto debería haber sido solo un comentario para la respuesta de Jon.
Rimas Kudelis
3
Mmmkay. ¿Quieres decirme exactamente cómo puedo incrustar código formateado en un comentario?
caos
3

Usar etiquetas PHP cerrar / abrir no es una muy buena solución debido a 2 razones: no puede imprimir variables PHP en HTML simple y hace que su código sea muy difícil de leer (el siguiente bloque de código comienza con un corchete final }, pero el lector tiene ni idea de lo que fue antes).

Mejor es usar la sintaxis heredoc . Es el mismo concepto que en otros lenguajes (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_TEXTes su delimitador (puede ser básicamente cualquier texto como EOF, EOT). Todo lo que está entre se considera cadena por PHP como si estuviera entre comillas dobles, por lo que puede imprimir variables, pero no tiene que escapar de las comillas, por lo que es muy conveniente para imprimir atributos html.

Tenga en cuenta que el delimitador de cierre debe comenzar al principio de la línea y el punto y coma debe colocarse justo después de él sin otros caracteres ( END_OF_TEXT;).

Heredoc con comportamiento de cadena entre comillas simples ( ') se llama nowdoc . No se realiza ningún análisis dentro de nowdoc. Lo usa de la misma manera que heredoc, solo coloca el delimitador de apertura entre comillas simples - echo <<< 'END_OF_TEXT'.

Marki555
fuente
Muchas gracias por recordarme esto. Heredoc es extremadamente útil para HTML más complejo con múltiples condiciones y mucho más fácil que escapar de atributos y comillas.
UTCWebDev
2

Entonces, si la condición es igual al valor que desea, el documento php ejecutará "include" e include agregará ese documento a la ventana actual, por ejemplo:

'

<?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')}
?>

'

Inicio de sesión rápido
fuente
0
<?php if ($my_name == 'aboutme') { ?>
    HTML_GOES_HERE
<?php } ?>
Govindak
fuente
1
Agregue una descripción a su respuesta.
Parixit
10
La descripción podría ser "copiar y pegar respuestas de 5 años": P
Erenor Paz
0

Sé que esta es una publicación antigua, pero realmente odio que solo haya una respuesta aquí que sugiera no mezclar html y php. En lugar de mezclar contenido, uno debería usar sistemas de plantillas o crear ellos mismos un sistema de plantillas básico.

En el 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;
?>

En el html (/path/to/file.html)

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

El resultado de esto sería:

Alice ate apples for lunch with Bob.
Bruce
fuente