Условный PHP, встроенный в HTML


я делаю своего рода "корзину", и у меня есть несколько "предметов", как в Примере, в примере я поставил только один, но они 12.

у меня есть PHP-файл, который собирает данные из формы в HTML. Внутри этого PHP в содержимом, которое собирается из формы и отправляется по электронной почте, у меня есть структура HTML для формирования этого письма. Проблема в том, что внутри этой структуры HTML я хотел бы иметь возможность фильтровать div, если значение input равно или больше 1 (один) я хочу, чтобы div отображался, но если значение меньше 1(один) я хочу, чтобы оно было скрыто.

это будет образец input. Он имеет две кнопки для увеличения или уменьшения значения.

<div class="number">
<input type="button" value="-" id="minus-t2m12" class="minus" />
<input type="text" class="cant-t2m12" value="1" name="tr_2_12"/>
<input type="button" value="+" id="plus-t2m12" class="plus" />
</div>

Здесь я покажу вам часть кода файла PHP. У меня есть, с одной стороны, все переменные, а затем в $content HTML-структуру для форматирования электронной почты.

// ---- Correo donde se envía ---- //
$tr212 = trim($_POST["tr_2_12"]);
// ---- Envío de datos ---- //

#Contenido del correo ---

$content = "<html>
            <body>
              <h1></h1>
              // ---- Datos personales, etc. ---- //

              <?php if ($tr_212["tr_2_12"] >= 1): ?>
                 <div class='dato'style='background:#ffffff;;width:100%;padding:10px;display:flex;'>
                    <div style='margin: 0 3px 0 0;font-weight:600;'> " . $tr_212 . " </div>
                    <div style='margin: 0;'>x Transductor 2MHz 12mm</div>
                 </div>
              <?php elseif ($tr_212["tr_2_12"] < 1): ?>
                 // No mostrar nada
              <?php endif; ?>

              // ---- Más artículos como el ejemplificado ---- //

              // ---- Observaciones ---- //
            </body>
            </html>

// ---- Encabezados de correo ---- //
// ---- Enviar correo ---- //

я не знаю, что я буду делать неправильно, я не могу заставить его обнаружить значение переменной и правильно запустите условное условие, чтобы вы могли скрыть его, если он не соответствует условию. Это дает мне только ошибку 500 при отправке формы.

надеюсь, вы можете мне помочь. Большое спасибо заранее.

Author: Josep Querol, 2021-06-30

2 answers

Ошибки 500 находятся на стороне сервера. Подумайте, нет ли синтаксических ошибок в вашем PHP-коде (это одна из наиболее распространенных причин, вызывающих ошибку 500).

Кроме того, ваш код подвергается по крайней мере одному возможному Undefined index, Если данные, связанные с input, имя которого tr_2_12 не отправляются. Чтобы избежать этого, вы можете просто вытащить значение POST в переменную, а затем выполнить сравнение, используя эту переменную.

Кроме того, я рекомендую вам вы избегаете смешивания блоков PHP / HTML. Это создает код не только запутанный, но и трудный для отладки. Лучше всего объединить все в одну переменную, которую вы можете легко отладить. Или, если вам нужна эта информация для отправки по электронной почте, все упрощается, потому что вы можете использовать $content для отправки электронной почты.

Это мое предложение:

<?php
  $tr212 = !empty($_POST["tr_2_12"]) ? trim($_POST["tr_2_12"]) : NULL;

  $content = "<html>
              <body>
                <h1></h1>";
                
  if ($tr_212 >= 1) {
    $content.="<div class='dato'style='background:#ffffff;;width:100%;padding:10px;display:flex;'>
                      <div style='margin: 0 3px 0 0;font-weight:600;'> " . $tr_212 . " </div>
                      <div style='margin: 0;'>x Transductor 2MHz 12mm</div>
                   </div>";
  }
  $content.="</body>
              </html>";
  echo $content;
?>

Еще одним преимуществом написания вашего кода является то, что вы можете повторно использовать контент. Предположим, вам нужно несколько блоков с одним и тем же содержимое div, где единственное, что я бы изменил, - это значение переменной. Вы можете создать переменную с div и маркером, а затем использовать prinft или sprintf чтобы добавить этот повторяющийся контент в сочетании со значением изменяющейся переменной в каждом случае.

  2
Author: A. Cedano, 2021-06-30 21:56:50

Я вижу в коде некоторую ошибку, такую как использование $tr_212 в качестве string, когда это массив, я предполагаю, что это будет $tr_212["tr_2_12"]. Вставлять php в строку,которая затем будет записана как веб-страница, не ваша вещь. И if в php не имеет endif или двоеточия. Я предлагаю вам это решение ничего не выводит, если $tr_212["tr_2_12"] равно 0 или меньше, и выводит значение, если оно равно 1 или больше.

$content = "<html><body><h1></h1>";
if ($tr_212["tr_2_12"] >= 1){
    $content.= "<div class='dato'style='background:#ffffff;;width:100%;padding:10px;display:flex;'>
    <div style='margin: 0 3px 0 0;font-weight:600;'> " . $tr_212["tr_2_12"]  . " </div>
    <div style='margin: 0;'>x Transductor 2MHz 12mm</div></div>";
    }
$content .="</body></html>"; 
echo $content;
  0
Author: JuanCar, 2021-06-30 19:25:32