Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145

$_POST в именные placeholder`s

05.10.2013, 13:51. Показов 2816. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день ,ни как не получается сделать следующую штуку.
постом отправлю на сервер массив, ловлю и хочу запихнуть в БД использую PDO
но как можно избежать вот такого перечисления.

PHP
1
2
3
4
$Data = array(
    'cmd' => $_POST['cmd']
     ...
);
потом соответсвенно
$STH->execute($Data);
но у меня больше 50 полей в POST, подскажите как все их перебрать, что бы ручками не писать.
с php совсем недавно начал иметь дело =)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2013, 13:51
Ответы с готовыми решениями:

Именные пространства файлов
Мой сайт обладает следующей структурой: ---(страницы сайта) ---php ------brain.php ------writer.php ---blocks ------(куски...

$_post и $_session в форме index.php. передача переменных из $_post в $_session
пока начал это делать... это в качестве примера. есть: <? session_save_path($_SERVER.'/session'); session_start(); if...

placeholder
Как к данному скрипту placeholder задать определенный цвет? .a { background-color:#999999; border:0px; color:#FFFFFF;} <div...

20
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
05.10.2013, 14:31
Поскольку в $_POST только данные формы и имена полей совпадают с placeholder'ами, то:
PHP
1
$STH->execute($_POST);
При этом фильтрация входных данных конечно Ваше дело.
0
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
05.10.2013, 15:24  [ТС]
Цитата Сообщение от TAB Посмотреть сообщение
Поскольку в $_POST только данные формы и имена полей совпадают с placeholder'ами, то:
PHP
1
$STH->execute($_POST);
При этом фильтрация входных данных конечно Ваше дело.
добрый день, $STH->execute($_POST); не работает , есть подозрение , что в $_POST приходит массив типа ['key'] => value
а в PDO нужно 'key' => 'value'
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
05.10.2013, 15:44
Судя по Вашей же записи приходит 'key' => 'value'.
PHP
1
'cmd' => $_POST['cmd']
Так что же приходит в $_POST?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.10.2013, 19:34
Можно динамически в цикле обойти массив и заполнить поля, как-то так, если без всяких проверок
PHP
1
2
3
$fields = array('field1', 'field2', 'field3'); //возможные названия полей
foreach($fields as $field)
    $values[':' . $field] = in_array($field, $_POST) ? $_POST[$field] : '';
а дальше подставлять в параметры массив $values. Можно и продолжить, чтобы запрос также формировать
PHP
$query = 'INSERT INTO `table_name` (`' . join('`, `', $fields) . '`) VALUES(' . join(', ', $values) . ')';
Добавлено через 2 минуты
Цитата Сообщение от TAB Посмотреть сообщение
и имена полей совпадают с placeholder'ами
у именованных параметров обычно двоеточие перед именем..
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
05.10.2013, 19:46
Цитата Сообщение от KOPOJI Посмотреть сообщение
у именованных параметров обычно двоеточие перед именем..
Безусловно!
PHP
1
2
3
$_POST = array_combine(array_map(function($k) {
    return ":$k";
}, array_keys($_POST)), $_POST);
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.10.2013, 20:05
Цитата Сообщение от TAB Посмотреть сообщение
Безусловно!
не рекомендуется перезаписывать суперглобальные массивы..
Ну и тогда добавьте проверку, существует ли такое поле в таблице, а то поназаписываете до ошибки
0
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
05.10.2013, 20:50  [ТС]
Цитата Сообщение от TAB Посмотреть сообщение
Судя по Вашей же записи приходит 'key' => 'value'.
PHP
1
'cmd' => $_POST['cmd']
Так что же приходит в $_POST?

var_dump:

это если массив руками создавать
PHP
1
2
3
4
array(1) {
  ["cmd"]=>
  string(9) "adjective"
}
это из $_POST
PHP
1
2
3
{
  ["cmd"]=>
  string(9) "adjective"
Добавлено через 4 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
Можно динамически в цикле обойти массив и заполнить поля, как-то так, если без всяких проверок
PHP
1
2
3
$fields = array('field1', 'field2', 'field3'); //возможные названия полей
foreach($fields as $field)
    $values[':' . $field] = in_array($field, $_POST) ? $_POST[$field] : '';
а дальше подставлять в параметры массив $values. Можно и продолжить, чтобы запрос также формировать
PHP
$query = 'INSERT INTO `table_name` (`' . join('`, `', $fields) . '`) VALUES(' . join(', ', $values) . ')';
Добавлено через 2 минуты

у именованных параметров обычно двоеточие перед именем..
а можно как то обойти $_POST так что типо вот этого
PHP
1
2
3
foreach ($_POST as $key => $value) {
       $Data[$key] = "'$value'";
}
что бы потом этот массив можно сразу $STH->execute($Data);
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.10.2013, 20:59
serg3091, можно. А чем не устраивает предложенный мной вариант, с проверкой на существование этого поля в БД ?

Добавлено через 58 секунд
там только небольшая ошибка, вместо
Цитата Сообщение от KOPOJI Посмотреть сообщение
PHP
1
in_array($field, $_POST)
должно быть
PHP
1
isset($_POST[$field])
1
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
05.10.2013, 21:32  [ТС]
KOPOJI,
что-то совсем запутался, можете показать ,что не правильно делаю
PHP
1
2
3
4
5
6
7
8
9
10
11
12
    $fields = array('cmd','nominative_singular_masculine','genitive_singular_masculine','dative_singular_masculine','accusative_singular_masculine','prepositional_singular_masculine','nominative_singular_feminine','genitive_singular_feminine','dative_singular_feminine','accusative_singular_feminine','prepositional_singular_feminine','nominative_singular_neuter','genitive_singular_neuter','dative_singular_neuter','accusative_singular_neuter','prepositional_singular_neuter','full_form-nominative_plural_masculine','full_form-genitive_plural_masculine','full_form-dative_plural_masculine','full_form-accusative_plural_masculine','full_form-prepositional_plural_masculine','full_form-nominative_plural_feminine','full_form-genitive_plural_feminine','full_form-dative_plural_feminine','full_form-accusative_plural_feminine','full_form-prepositional_plural_feminine','full_form-nominative_plural_neuter','full_form-genitive_plural_neuter','full_form-dative_plural_neuter','full_form-accusative_plural_neuter','full_form-prepositional_plural_neuter','short_form-singular-masculine','short_form-singular-feminine','short_form-singular-neuter','short_form-plural','comparative_degree_of_comparison','superlative_degree_of_comparison'); //возможные названия полей
        foreach($fields as $field){
            $adjectiveData[] = isset($_POST[$field]) ? $_POST[$field] : '';
        }
                            $STH = $DBH->prepare("
                                INSERT INTO `tbl_form_adjective` 
                                    (id,form_adjectiveid,cmd)
                                VALUES 
                                    (NULL,2,:cmd)
                            ");
        $STH->execute($adjectiveData);
        echo json_encode(array('success'=>true));
$adjectiveData[] тут : специально убрал, так как массив же должен быть без них, а : уже в VALUES в SQL подставляются.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.10.2013, 21:39
Цитата Сообщение от serg3091 Посмотреть сообщение
так как массив же должен быть без них
т.е., я их туда добавил просто так, от нечего делать?
Я вам, по сути, дал готовый код, надо было лишь изменить переменные, и все.
Офигеть, у вас сколько полей в таблице!? И почему в таком случае в запросе фигурируют всего лишь четыре поля? Ничего не понимаю
0
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
06.10.2013, 15:41  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Офигеть, у вас сколько полей в таблице!? И почему в таком случае в запросе фигурируют всего лишь четыре поля? Ничего не понимаю
в целях простоты сделал только 1 значение.
получается в цикле и сам запрос будет формироватся? или как ?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
06.10.2013, 17:22
нет, запрос не в цикле. Я же написал код выше..
Почему вы до сих пор не попробовали проверить..?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$POST = array('username'=>'admin', 'password'=>'adminPassword'); // имитация отправленной формы с полями логин и пароль
$fields = array('username', 'password', 'email'); //возможные названия полей (email пускай необязательный
foreach($fields as $field)
    $values[':' . $field] = isset($POST[$field]) ? $POST[$field] : '';
var_dump($values);
/*
array(3) {
  [":username"]=>
  string(5) "admin"
  [":password"]=>
  string(13) "adminPassword"
  [":email"]=>
  string(0) ""
}
*/
$query = 'INSERT INTO `table_name` (`' . join('`, `', $fields) . '`) VALUES(' . join(', ', array_keys($values)) . ')';
echo $query;
/*
INSERT INTO `table_name` (`username`, `password`, `email`) VALUES(:username, :password, :email)
*/
0
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
06.10.2013, 18:43  [ТС]
KOPOJI,
PHP
1
2
3
4
5
6
7
    $fields = array('cmd','form_adjectiveid','nominative_singular_masculine','genitive_singular_masculine','dative_singular_masculine','accusative_singular_masculine','prepositional_singular_masculine','nominative_singular_feminine','genitive_singular_feminine','dative_singular_feminine','accusative_singular_feminine','prepositional_singular_feminine','nominative_singular_neuter','genitive_singular_neuter','dative_singular_neuter','accusative_singular_neuter','prepositional_singular_neuter','full_form-nominative_plural_masculine','full_form-genitive_plural_masculine','full_form-dative_plural_masculine','full_form-accusative_plural_masculine','full_form-prepositional_plural_masculine','full_form-nominative_plural_feminine','full_form-genitive_plural_feminine','full_form-dative_plural_feminine','full_form-accusative_plural_feminine','full_form-prepositional_plural_feminine','full_form-nominative_plural_neuter','full_form-genitive_plural_neuter','full_form-dative_plural_neuter','full_form-accusative_plural_neuter','full_form-prepositional_plural_neuter','short_form-singular-masculine','short_form-singular-feminine','short_form-singular-neuter','short_form-plural','comparative_degree_of_comparison','superlative_degree_of_comparison'); //возможные названия полей
        foreach($fields as $field){
            $adjectiveData[':' . $field]= isset($_POST[$field]) ? $_POST[$field] : '';
        }
        $query = 'INSERT INTO `tbl_form_adjective`  (`' . join('`, `', $fields) . '`) VALUES(' . join(', ', array_keys($adjectiveData)) . ')';
        $STH = $DBH->prepare($query);
        $STH->execute($adjectiveData);
простите, но не догоняю , сделал, как Вы показали, не отправляется, в логах PDO

Code
1
SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
06.10.2013, 20:42
зачем вы называли поля через дефис?
Тогда либо вручную, либо говнокодить мудрить..
PHP
1
2
3
4
5
$fields = array('cmd','form_adjectiveid','nominative_singular_masculine','genitive_singular_masculine','dative_singular_masculine','accusative_singular_masculine','prepositional_singular_masculine','nominative_singular_feminine','genitive_singular_feminine','dative_singular_feminine','accusative_singular_feminine','prepositional_singular_feminine','nominative_singular_neuter','genitive_singular_neuter','dative_singular_neuter','accusative_singular_neuter','prepositional_singular_neuter','full_form-nominative_plural_masculine','full_form-genitive_plural_masculine','full_form-dative_plural_masculine','full_form-accusative_plural_masculine','full_form-prepositional_plural_masculine','full_form-nominative_plural_feminine','full_form-genitive_plural_feminine','full_form-dative_plural_feminine','full_form-accusative_plural_feminine','full_form-prepositional_plural_feminine','full_form-nominative_plural_neuter','full_form-genitive_plural_neuter','full_form-dative_plural_neuter','full_form-accusative_plural_neuter','full_form-prepositional_plural_neuter','short_form-singular-masculine','short_form-singular-feminine','short_form-singular-neuter','short_form-plural','comparative_degree_of_comparison','superlative_degree_of_comparison');
foreach($fields as $key=>$field){
            $adjectiveData[':' . str_replace('-','_', $field)]= isset($_POST[$field]) ? str_replace('-','_', $_POST[$field]) : '';
        }
$query = 'INSERT INTO `tbl_form_adjective`  (`' . join('`, `', $fields) . '`) VALUES(' . join(', ', array_keys($adjectiveData)) . ')';
1
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
06.10.2013, 21:31  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
зачем вы называли поля через дефис?
Тогда либо вручную, либо говнокодить мудрить..

Не по теме:

ещё мал и глуп и не видал больших @==8


заменил и в бд и в коде все на подчеркивание, ни каких дефисов.
но ни как не помогло.

Добавлено через 9 минут
Цитата Сообщение от serg3091 Посмотреть сообщение

Не по теме:

ещё мал и глуп и не видал больших @==8


заменил и в бд и в коде все на подчеркивание, ни каких дефисов.
но ни как не помогло.
забыл поправить в массиве.
- помогло.спасибо огромное
0
Заблокирован
08.10.2013, 07:11
PHP
1
2
3
4
$Data = array(
    'cmd' => $_POST['cmd']
     ...
);
Храните, передавайте и отгружайте данные в формате таблицы.

table => fields => values

Если таблиц несколько начинайте с db

db => tables => fields => values

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

Кстати, тут было уже подобное обсуждение с господином KOPOJI и как начинающий я только недавно обнаружил что переменная $_FILES, оказывается, организована именно табличным образом. Другими словами я изобрел велосипед и потратил время на споры, а доказательство было в соседнем namespace.
0
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
08.10.2013, 14:25  [ТС]
Цитата Сообщение от sqlnub Посмотреть сообщение
PHP
1
2
3
4
$Data = array(
    'cmd' => $_POST['cmd']
     ...
);
Храните, передавайте и отгружайте данные в формате таблицы.

table => fields => values

Если таблиц несколько начинайте с db

db => tables => fields => values

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

Кстати, тут было уже подобное обсуждение с господином KOPOJI и как начинающий я только недавно обнаружил что переменная $_FILES, оказывается, организована именно табличным образом. Другими словами я изобрел велосипед и потратил время на споры, а доказательство было в соседнем namespace.
добрый день, а пример можно?
0
Заблокирован
08.10.2013, 16:11
Пример того что mysqli_result устроен крайне дубово? Вот, пожалуйста:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    // fpopulate $this->db_tables
    private function pop_table_list() {
        
        $q = 'SELECT `table_name`, `table_type`, `table_rows` 
        FROM `information_schema`.`tables`
        WHERE `table_schema` = "' . $this->db . '"' .
        'ORDER BY TABLE_NAME ASC;';
        
        if(!$res = $this->query($q)) die('Ошибка чтения списка таблиц');
 
        $this->db_tables = new stdClass();
        
        while($finfo = $res->fetch_field()){
            $this->db_tables->{$finfo->name} = array();
        }
        
        while($row = $res->fetch_assoc()) {
            foreach($row as $key => $value) {
                $this->db_tables->{$key}[] = $value;
            }
        }
 
    }
0
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 145
08.10.2013, 20:45  [ТС]
Цитата Сообщение от sqlnub Посмотреть сообщение
Пример того что mysqli_result устроен крайне дубово? Вот, пожалуйста:
очень странно ,потому что я спрашивал, про PDO.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2013, 20:45
Помогаю со студенческими работами здесь

Placeholder
Привет! Проблема вот в чем: по клику кнопки заполняю плэйсхолдер динамически контролами - текстбоксами и лэйблами. В текстбоксы...

Placeholder
В общем,у меня возникли трудности с placeholder'ом. Текст внутри input type="text" находится по середине,а мне надо изменить его...

Атрибут placeholder
мужики может кто подскажет есть код поиска внтри стрки где искать надо вставть текст, знаю что делается через атрибут placeholder, ну куда...

Разноцветный Placeholder
Добрый день! Подскажите как сделать вот такой placeholder Я сделал с помощью js вот так: document.documentElement.id =...

Сокращение placeholder
text-overflow: ellipsis; white-space: nowrap; overflow: hidden; Возможно выполнить таким образом, чтобы содержимое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru