CodeIgniter / PHP - вывод результатов MySQL без повторения кода - я делаю это правильно? - PullRequest
0 голосов
/ 21 октября 2011

Вот ситуация: у меня есть веб-сайт со сложной формой адреса с несколькими входами для номера дома, улицы, телефона и т. Д. Эта форма используется во многих местах по всему сайту.

Существует несколькоразличные сценарии, которые будут влиять на эту форму:

  1. Иногда форма должна отображаться «свежей», при этом все входные данные остаются пустыми в ожидании добавления нового адреса
  2. В других случаях,форма должна будет pre заполнить себя адресом, извлеченным из базы данных, для редактирования
  3. Наконец, форма может потребовать re - заполнить себя, еслипользователь ввел адрес, отправил форму, но забыл добавить номер своего дома - в этом случае ему нужно вернуть только что введенное, но отобразить предупреждение о проверке формы.

Однако ...

  • Я хочу иметь только одну HTML-форму для адресов, используемых по всему сайту - для сохранения повторяющегося кода
  • Я хочу этоодна форма для обработки каждого другого сценария, показанного выше - для сохранения повторяющегося кода

Вот как выглядит пример ввода для формы:

<div class="input">
    <input id="house_number" name="house_number" value="<?php echo set_value('house_number', $details->row('house_number'));?>"/>
    <label for="house_number">House Number</label>
</div>

Как видите, это решает сценарий 2 и сценарий 3 - код echo set_value($house_number, $details->row('house_number'));?> по умолчанию предварительно заполнит себя данными, взятыми из MySQL Resultset (1), или - если обнаружит, что что-то уже былопредставил - заново заполните себя предыдущими данными, хранящимися в house_number.

Мой вопрос: Как я могу встроить в это сценарий 1, в идеале, без повторения какого-либо кода, добавив nested-ifs и т. д.?Всякий раз, когда вы загружаете форму «с нуля», PHP по понятным причинам выводит ошибки о том, что $details не задано - потому что нечего тянуть из базы данных или моей модели.

Моя модель возвращает MySQL Resultset, ноЯ думал, вы могли бы инициализировать этот набор результатов с пустой строкой?Но я не был уверен, что это правильный путь.

Спасибо!

Джек

1 Ответ

0 голосов
/ 21 октября 2011

Чтобы избежать ошибок вывода о том, что $ details не установлены, вы должны сначала проверить, имеет ли $ details значение NULL, прежде чем использовать его.Таким образом, вы можете иметь -

$house_number = '';
if($details)
{
    $house_number = $details->row('house_number');
} 

, а затем

<input id="house_number" name="house_number" value="<?php echo set_value('house_number', $house_number);?>"/>

Во-вторых, вам также нужно будет сохранить опубликованные значения в сеансе, чтобы в случае возникновения ошибки пользователь мог вернуться кВ форме вы можете сохранить ранее опубликованные значения.Помните, что эти значения еще не сохранены в базе данных.

Так что вы можете изменить свой код:

$house_number = '';
if(isset($_SESSION['house_number']))
{
    $house_number = $_SESSION['house_number'];
}
else if($details)
{
    $house_number = $details->row('house_number');
} 

Надеюсь, это поможет.

...