Czy HTML można osadzić w instrukcji „if” PHP?

120

Chciałbym osadzić HTML wewnątrz instrukcji PHP if, jeśli jest to w ogóle możliwe, ponieważ myślę, że kod HTML pojawiłby się przed PHP, jeśli instrukcja zostanie wykonana.

Próbuję uzyskać dostęp do tabeli w bazie danych. Utworzyłem menu rozwijane w HTML, które zawiera listę wszystkich tabel w bazie danych i po wybraniu tabeli z menu rozwijanego klikam przycisk przesyłania.

Używam funkcji isset, aby sprawdzić, czy przycisk przesyłania został naciśnięty i uruchamiam pętlę w PHP, aby wyświetlić zawartość tabeli w bazie danych. W tym momencie mam pełną tabelę, ale chcę uruchomić więcej zapytań na tej tabeli. Stąd powód, dla którego próbuję wykonać więcej kodu HTML w instrukcji if. Ostatecznie próbuję zaktualizować (1 lub więcej zawartości w wierszu lub w wielu wierszach) lub usunąć (1 lub więcej wierszy) zawartość tabeli. To, co próbuję zrobić, to utworzyć kolejne menu rozwijane odpowiadające kolumnie w tabeli, aby ułatwić wyszukiwanie w tabeli, oraz przyciski opcji odpowiadające temu, czy chcę zaktualizować, czy usunąć zawartość tabeli.

IMSoP
źródło

Odpowiedzi:

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

Na życzenie, oto elseif i else (które można również znaleźć w dokumentacji )

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

To takie proste.

Kod HTML zostanie wyświetlony tylko wtedy, gdy warunek zostanie spełniony.

Frank Farmer
źródło
„... (które można również znaleźć w [dokumentach] [1])„ Gdzie dokładnie są te dokumenty, o których mówisz?
gmeben
39

Tak,

<?php
if ( $my_name == "someguy" ) {
    ?> HTML GOES HERE <?php;
}
?>
jgallant
źródło
15

Tak.

<?  if($my_name == 'someguy') { ?>
        HTML_GOES_HERE
<?  } ?>
chaos
źródło
6
Niektóre serwery nie mają zainstalowanego libxml lub pdo_mysql, ale nadal możemy polecić rozwiązania, które je wykorzystują.
chaos
2
Myślę, że to powinien być tylko komentarz do odpowiedzi Jona.
Rimas Kudelis
3
Mmmkay. Chcesz mi powiedzieć, jak dokładnie osadziłem sformatowany kod w komentarzu?
chaos
3

Używanie tagów zamknij / otwórz PHP nie jest dobrym rozwiązaniem z dwóch powodów: nie możesz drukować zmiennych PHP w zwykłym HTML i sprawia to, że kod jest bardzo trudny do odczytania (następny blok kodu zaczyna się od nawiasu końcowego }, ale czytnik ma nie mam pojęcia, co było wcześniej).

Lepiej jest użyć składni heredoc . Jest to ta sama koncepcja, co w innych językach (np. 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_TEXTjest twoim ogranicznikiem (może to być w zasadzie dowolny tekst, taki jak EOF, EOT). Wszystko pomiędzy jest traktowane przez PHP jako ciąg znaków, tak jakby było w cudzysłowie, więc możesz drukować zmienne, ale nie musisz uciekać przed cudzysłowami, więc jest to bardzo wygodne do drukowania atrybutów HTML.

Zauważ, że ogranicznik zamykający musi zaczynać się na początku wiersza, a średnik musi być umieszczony zaraz po nim, bez innych znaków ( END_OF_TEXT;).

Heredoc z zachowaniem łańcucha znaków w pojedynczych cudzysłowach ( ') nazywa się nowdoc . W nowdoc nie jest wykonywane żadne analizowanie. Używasz go w taki sam sposób jak heredoc, po prostu umieszczasz otwierający separator w pojedynczych cudzysłowach - echo <<< 'END_OF_TEXT'.

Marki555
źródło
Bardzo dziękuję za przypomnienie mi o tym. Heredoc jest niezwykle pomocny w przypadku bardziej złożonego kodu HTML z wieloma warunkami i znacznie łatwiejszy niż ucieczka przed atrybutami i cudzysłowami!
UTCWebDev
2

Więc jeśli warunek jest równy żądanej wartości, dokument php uruchomi się „include” i dołączenie doda ten dokument do bieżącego okna, na przykład:

`

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

`

Szybkie logowanie
źródło
0
<?php if ($my_name == 'aboutme') { ?>
    HTML_GOES_HERE
<?php } ?>
govindak
źródło
1
Dodaj opis do swojej odpowiedzi.
Parixit
10
Opis może brzmieć „skopiuj i wklej odpowiedzi sprzed 5 lat”: P
Erenor Paz
0

Wiem, że to stary post, ale naprawdę nienawidzę, że jest tu tylko jedna odpowiedź, która sugeruje nie mieszanie html i php. Zamiast mieszać treści, należy skorzystać z systemów szablonów lub samodzielnie stworzyć podstawowy system szablonów.

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

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

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

Wynik tego byłby:

Alice ate apples for lunch with Bob.
Bruce
źródło