Показать сообщение отдельно
  #12 (permalink)  
Старый 15.05.2017, 23:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Niliya
потомучто я не поняла как переделать на живом я убираю скобку и оно вообще не выводит
В db_connection.php (надо полагать там соединение с базой) определите кодировку соединения, как было написано ранее. В нем же можно определить и режим отладки - вывод ошибок сервера в режиме отладки (на локальном сервере) и вывод "нейтрального сообщения" на удаленном сервере. Например:

define('DEBUGER', 1); //режим отладки: 1 - вывод ошибок MySQL, 0 - вывод сообщения
define('SQLERROR', 'Что-то не срослось...'); //сообщение, которое будет выводиться при ошибках БД на удаленном сервере


Запросы при этом могут быть такими

$q = mysql_query('тело запроса') or die(DEBUGER ? __FILE__.'/'.__LINE__.'/'.mysql_error() : SQLERROR);


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

die - это синоним exit, то есть выход из скрипта, что не приведет к выводу дальнейших неизбежных ошибок.

Если нет ошибок, значит можно безопасно производить разборку запроса - если запрос вернул записи одно действие, иначе иное.

Сообщение от Niliya
Да будет всего 15 и больше не предвидется и не будет...
Я это поняла но я не поняла сам код как написать
Я тоже затрудняюсь как писать, так как вы не знаете SQL. Пусть у вас 15 значений и вы их опишите полем ENUM (в phpmyadmin сделать это не сложно). Только учтите, сразу описать и без ошибок - правка текста, смена позиций в описании приведет к тому, что уже назначенные значения из списка у субъектов пропадут, примут значение по умолчанию.

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

Получить параметры полей таблицы можно посредством запроса:

'SELECT перечисление параметров
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = "имя базы" AND TABLE_NAME = "имя таблицы"'

Например для поля ENUM, которое нас интересует, нам нужен только один параметр (примем по умолчанию, что это поле в sql таблице последнее) - COLUMN_TYPE, которое для примера выше вернется в массиве под последним индексом

[COLUMN_TYPE] => enum('Шеф','Бухгалтер','Бригади р','Рабочий')

которое можно извлечь из всех полей функцией array_pop(). Далее получив это значение сформировать список:

preg_match_all("/(?<=')[^',]+(?=')/ui", $array['COLUMN_TYPE'], $enum);
$select = '<select name="...">' . implode(array_map(function($k, $v) use($set) {
     return '<option value="'.$k.'">' . $v . '</option>';   
}, range(1, count($enum[0])), $enum[0])) . '</select>';

echo $select;


Если редактирование, то в use передается значение поля enum для записи (числовое, либо строковое), которое сравнивается в анонимной функции с соответствующим значением ($k или $v) и определяя выбранной соответствующую опцию. В случае добавления субъекта в базу этого не надо, но нужно добавлять опцию "Выберите" с пустым значением (если только не определено значение по умолчанию отличное от "нет" или null).

Если это затруднительно, то можно построить список и по основной таблице - выбрать отдельным запросом из основной таблицы только уникальные числовые и текстовые значения этого поля и построить по ним список. Понятно, что такое возможно только в том случае, что все 15 значений определены для субъектов. Но и понятно, что такое состояние таблицы не является гарантией.

Если же не ENUM, а отдельной таблицей, то запрос к этой таблице, и строить по ее данным список, принцип такой же будет как и в случае ENUM.

Последний раз редактировалось laimas, 16.05.2017 в 06:42.
Ответить с цитированием