È possibile incorporare HTML all'interno dell'istruzione "if" di PHP?


120

Vorrei incorporare HTML all'interno di un'istruzione if di PHP, se è possibile, perché penso che l'HTML apparirebbe prima che venga eseguita l'istruzione if di PHP.

Sto cercando di accedere a una tabella in un database. Ho creato un menu a discesa in HTML che elenca tutte le tabelle nel database e una volta selezionata la tabella dal menu a discesa, ho premuto il pulsante di invio.

Uso la funzione isset per vedere se il pulsante di invio è stato premuto ed eseguo un ciclo in PHP per visualizzare il contenuto della tabella nel database. Quindi a questo punto ho la tabella completa ma desidero eseguire altre query su questa tabella. Da qui il motivo per cui sto cercando di eseguire più HTML all'interno dell'istruzione if. In definitiva, sto cercando di aggiornare (1 o più contenuti in una riga o più righe) o eliminare (1 o più righe) i contenuti nella tabella. Quello che sto cercando di fare è creare un altro menu a discesa che corrispondesse a una colonna in una tabella per semplificare la ricerca nella tabella e pulsanti di opzione che corrispondono a se desidero aggiornare o eliminare i contenuti nella tabella.


Risposte:


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

Su richiesta, ecco elseif e else (che puoi trovare anche nella documentazione )

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

È così semplice.

L'HTML verrà visualizzato solo se la condizione è soddisfatta.


"... (che puoi trovare anche in [i documenti] [1])" Dove sono esattamente questi documenti di cui parli?
gmeben

39

Sì,

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

15

Sì.

<?  if($my_name == 'someguy') { ?>
        HTML_GOES_HERE
<?  } ?>

6
Alcuni server non hanno libxml o pdo_mysql installati, ma possiamo comunque consigliare soluzioni che li utilizzano.
caos

2
Penso che questo avrebbe dovuto essere solo un commento per la risposta di Jon.
Rimas Kudelis

3
Mmmkay. Vuoi dirmi esattamente come incorporo codice formattato in un commento?
caos

3

L'uso dei tag PHP di chiusura / apertura non è una soluzione molto buona per 2 motivi: non è possibile stampare variabili PHP in HTML semplice e rende il codice molto difficile da leggere (il blocco di codice successivo inizia con una parentesi graffa finale }, ma il lettore ha nessuna idea di cosa fosse prima).

È meglio usare la sintassi heredoc . È lo stesso concetto di altre lingue (come 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è il tuo delimitatore (può essere praticamente qualsiasi testo come EOF, EOT). Tutto ciò che è compreso tra è considerato stringa da PHP come se fosse tra virgolette doppie, quindi puoi stampare variabili, ma non devi sfuggire alle virgolette, quindi è molto conveniente per la stampa di attributi html.

Notare che il delimitatore di chiusura deve iniziare all'inizio della riga e il punto e virgola deve essere posizionato subito dopo senza altri caratteri ( END_OF_TEXT;).

Heredoc con comportamento di stringa tra virgolette singole ( ') è chiamato nowdoc . Nessuna analisi viene eseguita all'interno di nowdoc. Lo usi allo stesso modo di heredoc, basta inserire il delimitatore di apertura tra virgolette singole - echo <<< 'END_OF_TEXT'.


Grazie mille per avermelo ricordato. Heredoc è estremamente utile per HTML più complesso con più condizioni e molto più semplice dell'escape di attributi e virgolette!
UTCWebDev

2

Quindi, se la condizione è uguale al valore che desideri, il documento php verrà eseguito "include" e include aggiungerà quel documento alla finestra corrente, ad esempio:

`

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

`


0
<?php if ($my_name == 'aboutme') { ?>
    HTML_GOES_HERE
<?php } ?>

1
Per favore aggiungi una descrizione alla tua risposta.
Parixit

10
La descrizione potrebbe essere "copia-incolla delle risposte di 5 anni": P
Erenor Paz

0

So che questo è un vecchio post, ma odio davvero che ci sia solo una risposta qui che suggerisce di non mescolare html e php. Invece di mescolare i contenuti, si dovrebbero usare sistemi di modelli o creare essi stessi un sistema di modelli di base.

Nel 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;
?>

Nell'html (/path/to/file.html)

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

L'output di questo sarebbe:

Alice ate apples for lunch with Bob.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.