Интеграция PHP и HTML - PullRequest
       13

Интеграция PHP и HTML

0 голосов
/ 18 декабря 2009

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

Я пытаюсь получить значения из формы в некоторую логику проверки php в нижней части страницы (но до нижнего колонтитула), используя <?php VALIDATION LOGIC HERE ?>.

проблема в том, что когда проверка обнаружит ошибку, логика php умрет () и, следовательно, мой нижний колонтитул HTML не будет выполнен.

есть ли способ заставить мой HTML-колонтитул выполняться, несмотря на мой php die () ;? ... или есть лучший способ интегрировать мой HTML и PHP? Спасибо! Любая помощь будет принята с благодарностью.


EDIT: У меня фактически есть die () почти везде в моем коде, где я собираюсь подключиться к базе данных. Если учетные данные пользователя верны, они подключаются .. если учетные данные неверны, то он умрет () ..

Это хорошая практика и использование die ()? Похоже, что решение моей проблемы заключается в использовании return () INSTEAD OF die () ... для продолжения обработки нижнего колонтитула HTML.

Кроме того, у меня есть ситуации, такие как mysql_connect () или die (). Как я могу продолжить обработку оставшейся HTML-страницы, когда die () выполняется перед обработкой HTML? ..я не думаю, что mysql_connect () или возврат; хорошая практика правильно?

Большое спасибо заранее! Отзывы были очень полезны!

Ответы [ 5 ]

2 голосов
/ 18 декабря 2009

Как и в других штатах, у вас должно быть несколько файлов; header.php, index.php, footer.php, formvalidator.php. В вашем файле index.php вы должны включить header.php и footer.php. В теге формы действие устанавливается для загрузки formvalidator.php

В скрипте валидатора формы вы можете получить что-то вроде этого:

  // All form fields are identified by '[id]_[name]', where 'id' is the 
  // identifier of the form type.
  // The field identifier we want to return is just the name and not the id.
  public function getFormData() {
    $formData = array();
    foreach ($_POST as $key => $value) 
    {
      // Remove [id]_ 
      $name = preg_replace('!.*_!', '', $key);

      if (is_array($value)) {
        $formData[$name] = implode(',', $value);
      } else {
        $formData[$name] = $value;
      }
    }
    return $formData;
  } 

Теперь вы можете перебирать массив и проверять каждое поле. Если вы нашли ошибку, выведите сообщение об ошибке, в противном случае обработайте форму.

Обновление
Ответьте на ваше обновление.

Вы не должны "никогда" использовать die (). Вместо этого выйдите из функции, в которой вы находитесь, и верните сообщение об ошибке. Если ты просто умрешь (), то никогда не узнаешь, что пошло не так.

Невозможно выполнить проверку формы на сервере, если вы не нажмете кнопку отправки. Вы можете поместить код, который я дал вам, в тот же PHP-файл, что и форма, и когда вы отправляете, вы просто перезагрузите ту же страницу (просто установите action="<?= $_SERVER['PHP_SELF'] ?>")

Если вы хотите проверить поля перед отправкой, вы должны сделать это с помощью javascript, например, например. jQuery.validate .

Хм ... похоже, вам нужно больше знаний о том, как смешивать PHP с HTML. Взгляните на это руководство для начинающих о том, как работать с формами в PHP.

2 голосов
/ 18 декабря 2009

Я бы использовал внешний файл для обработки и проверки формы, а затем перенаправил бы обратно на страницу формы при ошибке / успехе, отображая сообщение об ошибке / успехе.

1 голос
/ 18 декабря 2009

Я просто делаю один файл header.php и один файл footer.php. Если есть ошибка, просто вернитесь вместо die.

Таким образом, вверху вашей страницы вы можете просто поставить:

<?php include('header.php');?>

///put in whatever html there may be


<?php 
/// put your form and processing info here
///just return if you need to prevent further processing
?>

///put in whatever html there may be
<?php include('footer.php');?>
0 голосов
/ 18 декабря 2009

Использование die () не является хорошей практикой, поскольку оно не будет показывать дружественное сообщение пользователю, посещающему ваш сайт. Вы должны быть абсолютно уверены, что хотите использовать die. Например, вы можете использовать его в процедурах, когда вы подозреваете, что есть попытка взлома. Вместо этого попробуйте использовать структуру if else, чтобы показать или скрыть вещи. Вот возможный прототип, который вы можете реализовать:

  // if there is a validation error, show it, otherwise not
  if ($error == true)
  {
    // show footer
  }

  <!-- Your footer goes normally here -->
0 голосов
/ 18 декабря 2009

Есть много лучших способов сделать то, что вы делаете. но чтобы ответить на ваш первый вопрос, вы можете создать функцию с именем footer, которая возвращает строку с html, которая должна отображаться в нижнем колонтитуле, и вызывает die (footer ()); но ... зачем ты умрешь? Вы не можете просто посчитать ошибки и отобразить их где-нибудь в результате? Вы не должны убивать сценарий таким образом.

И второй вопрос. Вы можете использовать, как сказал BenTheDesigner, html-страницу с действием формы, указывающим на скрипт php, который проверяет и либо возвращает форму, если что-то пошло не так, либо идет куда-то еще, если нет. но и там вы должны удалить функцию die () и вызвать что-то еще, чтобы перенаправить вас. Вы можете использовать систему шаблонов, такую ​​как smarty, чтобы отделить свою логику от html-презентации. Вы можете написать все это в одном файле, но попробуйте написать всю логику вверху файла и все HTML внизу. и используйте <? = $ var?> для отображения php-содержимого или простых условных выражений для разных html-результатов. но не используйте die (). я думаю, это просто усложняет вещи.

...