PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (3): « 1 [2] 3 »

> Найдено сообщений: 45
madlabel Отправлено: 22 Марта, 2016 - 18:40:04 • Тема: mysqli обертка • Форум: Вопросы новичков

Ответов: 5
Просмотров: 454
Так так, не могу победить..

PHP:
скопировать код в буфер обмена
  1.  
  2.         public function query($query){
  3.         if ($query = $this->mysqli->prepare($query)) {
  4.             if (func_num_args() > 1) {
  5.                 $x = func_get_args();
  6.                 $args = array_merge(array(func_get_arg(1)),
  7.                     array_slice($x, 2));
  8.                 $arguments = array();
  9.                 foreach($args as $k => $arg) {
  10.                     $arguments[$k] = &$arg;
  11.                 }
  12.                 call_user_func_array(array($query, 'bind_param'), $arguments); //ругается
  13.             }
  14.             $query->execute();
  15.                         //etc...
  16.         }
  17.  


Пробую:
$db = $this->db->query('SLECT name, value FROM table WHERE id = ? AND name =?', 1 , 2);

Выдает мне:
Number of variables doesn't match number of parameters in prepared statement
Пришло 3 аргумента, а ушел массив параметров из 2х аргументов.
Как быть?
madlabel Отправлено: 21 Марта, 2016 - 18:00:12 • Тема: mysqli обертка • Форум: Вопросы новичков

Ответов: 5
Просмотров: 454
OrmaJever пишет:
и что в ней удивительного? чистый mysql умеет так же


Понятно, что и с обычными запросами тоже можно работат, без плейсхолдеров. Но именно в данной реализации нравятся плейсхолдеры. Посмотрел подобные библиотеки, мало их, и все не то. Хотелось бы что-то подобное.
madlabel Отправлено: 21 Марта, 2016 - 14:46:52 • Тема: mysqli обертка • Форум: Вопросы новичков

Ответов: 5
Просмотров: 454
Понравилась обертка, но на ней лежат авторские права скрипта simpla cms.
Имеется ли подобное детище? Обыскался уже.

Пример обертки от симплы:
Спойлер (Отобразить)


Примеры запросов:
.... $db->placehold(SELECT * FROM __table WHERE id = ? AND name = ?, 1, Misha);
.... $db->placehold(SELECT * FROM __cities WHERE region_id = ?, array('id' = 1, 'id' = 2));
madlabel Отправлено: 06 Октября, 2015 - 15:27:18 • Тема: Шаблонизатор dle (вывод подменю) • Форум: Вопросы новичков

Ответов: 1
Просмотров: 306
Если же выводить так:

CODE (php):
скопировать код в буфер обмена
  1.  
  2. $submenu = null;
  3. $sql = $db->super_query("SELECT ..... FROM `".PREFIX."_submenu`", 1);
  4. foreach($sql AS $row){
  5. $submenu .= '<div>' . $row['title'] . '</div>';
  6. }
  7.  
  8. //Собираем в кучу основное меню
  9. $tpl_module->load_template('menu/a.tpl');
  10. if(!empty($row['submenu'])){
  11. $tpl_module->set('[submenu]', '');
  12. $tpl_module->set('[/submenu]', '');
  13. } else {
  14. $tpl_module->set_block("'\\[submenu\\](.*?)\\[/submenu\\]'si","");
  15. }
  16. $tpl_module->set('{id}', $row['id']);
  17. $tpl_module->set('{title}', $row['title']);
  18. $tpl_module->set('{link}', $row['link']);
  19. if($row['status'] == 1) {
  20. $tpl_module->set('[disable]', '');
  21. $tpl_module->set('[/disable]', '');
  22. } else {
  23. $tpl_module->set_block("'\\[disable\\](.*?)\\[/disable\\]'si","");
  24. }
  25. $tpl_module->set('{submenu}', isset($submenu) ? $submenu : null); //Вывод подменю ($submenu -> выше)
  26. $tpl_module->compile('a');
  27. }
  28.  
  29. //Собираем основной шаблон меню
  30. $tpl_module->load_template('menu/menu.tpl');
  31. $tpl_module->set('{menu}', isset($tpl_module->result['a']) ? $tpl_module->result['a'] : null); //Вывод меню и их подменю
  32. $tpl_module->compile('content');


То все прекрасно выводится. Но не хочется смешивать php с html. Есть же какой-то выход.
madlabel Отправлено: 05 Октября, 2015 - 18:28:50 • Тема: Шаблонизатор dle (вывод подменю) • Форум: Вопросы новичков

Ответов: 1
Просмотров: 306
Ситуация следующая, не могу вывести подменю в меню(dle шаблонизатор).

Спойлер (Отобразить)


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $menu = $db->super_query("SELECT `id`,`title`,`link`,`submenu`,`status` FROM `".PREFIX."_menu` ORDER by `position` ASC", 1);
  3. if($menu){
  4. foreach($menu As $row){
  5.  
  6. //Собираем в кучу подменю
  7. $sql = $db->super_query("SELECT `id`,`title`,`link` FROM `".PREFIX."_submenu` WHERE `menu_id` = '".$row['id']."' ORDER by `position` ASC", 1);
  8. if($sql){
  9. foreach($sql AS $rows){
  10. $tpl_module->load_template('menu/submenu.tpl');
  11. $tpl_module->set('{id}', $rows['id']);
  12. $tpl_module->set('{title}', $rows['title']);
  13. $tpl_module->set('{link}', $rows['link']);
  14. $tpl_module->compile('submenu');
  15. }
  16. }
  17.  
  18. //Собираем в кучу основное меню
  19. $tpl_module->load_template('menu/a.tpl');
  20. if(!empty($row['submenu'])){
  21. $tpl_module->set('[submenu]', '');
  22. $tpl_module->set('[/submenu]', '');
  23. } else {
  24. $tpl_module->set_block("'\\[submenu\\](.*?)\\[/submenu\\]'si","");
  25. }
  26. $tpl_module->set('{id}', $row['id']);
  27. $tpl_module->set('{title}', $row['title']);
  28. $tpl_module->set('{link}', $row['link']);
  29. if($row['status'] == 1) {
  30. $tpl_module->set('[disable]', '');
  31. $tpl_module->set('[/disable]', '');
  32. } else {
  33. $tpl_module->set_block("'\\[disable\\](.*?)\\[/disable\\]'si","");
  34. }
  35. $tpl_module->set('{submenu}', isset($tpl_module->result['submenu']) ? $tpl_module->result['submenu'] : null); //Вывод подменю
  36. $tpl_module->compile('a');
  37. }
  38.  
  39. //Собираем основной шаблон меню
  40. $tpl_module->load_template('menu/menu.tpl');
  41. $tpl_module->set('{menu}', isset($tpl_module->result['a']) ? $tpl_module->result['a'] : null); //Вывод меню и их подменю
  42. $tpl_module->compile('content');
  43.  


На выходе:
# Главная
# Новости
> Зарубежные
> Спортивные
> Еще

# Тестовое меню
> Зарубежные
> Спортивные
> Еще

> Еще 2
> Еще 3
Почему-то данные дублируются.. (отмечено красным)
madlabel Отправлено: 05 Октября, 2015 - 18:21:01 • Тема: Сравнение массивов • Форум: Вопросы новичков

Ответов: 12
Просмотров: 611
Мелкий пишет:
madlabel пишет:
Мне нужно вывести флажки всех атрибутов для категории id которой равен $_GET['id'] при этом отметить (checked) те, которые находятся в таблице связке.

Вывести всё из properties, при этом пометить те строки, для которых в categories_properties есть связь с определённой категорией.
Верно?

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT  `c`.`category_id`,
  2.              `p`.`id`,
  3.              `p`.`description`,
  4.              `c`.`property_id` IS NOT NULL AS is_checked
  5.         FROM `".PREFIX."_properties` AS p
  6.         LEFT JOIN `".PREFIX."_categories_properties` AS c ON `c`.`property_id` = `p`.`id` AND c.category_id = ?
  7.               ORDER BY `p`.`position` DESC


madlabel пишет:
Таблица:_categories_properties: |id|category_id|property_id|

Нафига поле id? Оно лишнее, category_id и property_id более чем достаточно и являются хорошим первичным ключом. Плюс индекс по property_id для обратного поиска.


Все верно, спасибо!!! Радость
madlabel Отправлено: 04 Октября, 2015 - 06:03:06 • Тема: Сравнение массивов • Форум: Вопросы новичков

Ответов: 12
Просмотров: 611
Мелкий пишет:
Конечно можно и нужно запросом. Банальное условие в where


WHERE не подходит.
Суть вот в чем:

Категории:
Таблица: _categories : |id|description|

Атрибуты:
Таблица: _properties: |id|description|

Связь категории и атрибута:
Таблица:_categories_properties: |id|category_id|property_id|

Мне нужно вывести флажки всех атрибутов для категории id которой равен $_GET['id'] при этом отметить (checked) те, которые находятся в таблице связке.

Делаю так:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT  `c`.`category_id`,
  3.              `p`.`id`,
  4.              `p`.`description`,
  5.              `c`.`property_id` IS NOT NULL AS is_checked
  6.         FROM `".PREFIX."_properties` AS p
  7.         LEFT JOIN `".PREFIX."_categories_properties` AS c ON `c`.`property_id` = `p`.`id`                        
  8.               ORDER BY `p`.`position` DESC
  9.  


Далее разбираю:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach($rows AS $row){
  2. if(($row['is_checked']) && $row['category_id'] == $_GET['id']){
  3. // Отмечаю флажок
  4. }
  5. }
  6.  


На выходе почему-то получаю повторяющиеся значения атрибутов. DISTINCT и GROUP by не помогают, как быть? Может я что-то не так делаю..
madlabel Отправлено: 30 Сентября, 2015 - 05:51:54 • Тема: Сравнение массивов • Форум: Вопросы новичков

Ответов: 12
Просмотров: 611
Мелкий пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT a.id, a.description, s.id IS NOT NULL AS is_selected
  2. FROM table_all_options AS a
  3. LEFT JOIN table_selected_options s ON a.id = s.id

PHP:
скопировать код в буфер обмена
  1. foreach (/**/) {
  2. if ($row['is_selected']) {
  3. // такой пункт выбран
  4. } else {
  5. // такой пункт не выбран
  6. }
  7. }


А как вывести отмеченные для определённой категории?
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. foreach(/**/){
  3. if($row[’is_selected'] && ($row['category_id'] == $_GET['id'])){
  4. // пункт выбран
  5. } else {
  6. // пункт не выбран
  7. }
  8. }
  9.  

Или можно запросом это сделать?
madlabel Отправлено: 21 Сентября, 2015 - 12:14:01 • Тема: Сравнение массивов • Форум: Вопросы новичков

Ответов: 12
Просмотров: 611
Мыслей нет ни у кого? Хм
madlabel Отправлено: 21 Сентября, 2015 - 12:13:03 • Тема: include_once() • Форум: Вопросы новичков

Ответов: 6
Просмотров: 294
KudasovD пишет:
Пишу тупо файл в котором четыре переменных для БД.
Затем выполняю include_once(); и подключаю этот файл в другой, где создаю PDO.
В итоге все подключается но выдает ошибку Undefined variable: db_host и для всех остальных переменных тоже.
Имена переменных не перепутаны
Файл точно подключается
Пробовал из разных мест, не отрабатывает даже если файлы в одном каталоге.
Единственное, что приходит в голову, что может где какие-то права нужно настраивать?
Пользуюсь xampp на windows,
Спасите кто-нибудь, а то как-то не знаю куда копать. Заранее спасибо большое.


E_NOTICE - замечания
Notice: Undefined variable - не критично, курим в сторону isset(); - должно вылечить.
+Можно убрать ошибки с помощью
CODE (htmlphp):
скопировать код в буфер обмена
  1. error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);

Вставляем в шапку (или же index.php)
На виндовозе права 777 вроде бы всегда для всех файлов.
Может где-то я не прав, поправьте если это так. Улыбка
madlabel Отправлено: 21 Сентября, 2015 - 09:26:42 • Тема: склонение имен и фамилий • Форум: Вопросы новичков

Ответов: 4
Просмотров: 384
Выдрал из vii-engine:
PHP:
скопировать код в буфер обмена
  1.  
  2. function gramatikName($source){
  3.         $name_u_gram = $source;
  4.         $str_1_name = strlen($name_u_gram);
  5.         $str_2_name = $str_1_name-2;
  6.         $str_3_name = substr($name_u_gram, $str_2_name, $str_1_name);
  7.         $str_5_name = substr($name_u_gram, 0, $str_2_name);
  8.         $str_4_name = strtr($str_3_name,array(
  9.                                         'ай' => 'ая',
  10.                                         'ил' => 'ила',
  11.                                         'др' => 'дра',
  12.                                         'ей' => 'ея',
  13.                                         'кс' => 'кса',
  14.                                         'ша' => 'ши',
  15.                                         'на' => 'ны',
  16.                                         'ка' => 'ки',
  17.                                         'ад' => 'ада',
  18.                                         'ма' => 'мы',
  19.                                         'ля' => 'ли',
  20.                                         'ня' => 'ни',
  21.                                         'ин' => 'ина',
  22.                                         'ик' => 'ика',
  23.                                         'ор' => 'ора',
  24.                                         'им' => 'има',
  25.                                         'ём' => 'ёма',
  26.                                         'ий' => 'ия',
  27.                                         'рь' => 'ря',
  28.                                         'тя' => 'ти',
  29.                                         'ся' => 'си',
  30.                                         'из' => 'иза',
  31.                                         'га' => 'ги',
  32.                                         'ур' => 'ура',
  33.                                         'са' => 'сы',
  34.                                         'ис' => 'иса',
  35.                                         'ст' => 'ста',
  36.                                         'ел' => 'ла',
  37.                                         'ав' => 'ава',
  38.                                         'он' => 'она',
  39.                                         'ра' => 'ры',
  40.                                         'ан' => 'ана',
  41.                                         'ир' => 'ира',
  42.                                         'рд' => 'рда',
  43.                                         'ян' => 'яна',
  44.                                         'ов' => 'ова',
  45.                                         'ла' => 'лы',
  46.                                         'ия' => 'ии',
  47.                                         'ва' => 'вой',
  48.                                         'ыч' => 'ыча',
  49.                                         'ич' => 'ича'
  50.                                         ));
  51.         $name_user_gram = $str_5_name.$str_4_name;
  52.         return $name_user_gram;
  53. }
  54.  
madlabel Отправлено: 20 Сентября, 2015 - 01:00:40 • Тема: Сравнение массивов • Форум: Вопросы новичков

Ответов: 12
Просмотров: 611
PHP:
скопировать код в буфер обмена
  1.  
  2. $categories = SELECT id, description FROM table1;
  3. $checkeds = SELECT id FROM table2;
  4. $diff = array_intersect($checkeds, $categories);
  5. foreach($categories AS $row){
  6. if(in_array(array('id' => $row['id']), $diff)){
  7. $all_properties .= '<input type="checkbox" name="properties[]" value="'.$row['id'].'" checked>';
  8. } else {
  9. $all_properties .= '<input type="checkbox" name="properties[]" value="'.$row['id'].'">';
  10. }


in_array(array('id' => $row['id']), $diff) - я так понимаю это сопли, как их убрать так и не понял, но - работает! Может у кого есть идеи? Или я что-то не доглядел.
madlabel Отправлено: 18 Сентября, 2015 - 14:22:38 • Тема: Сравнение массивов • Форум: Вопросы новичков

Ответов: 12
Просмотров: 611
Panoptik пишет:
array_intersect, array_diff

только учтите что функции работают с одномерными массивами. так что как вы будете их преобразовывать на ваших плечах


И как же все таки их преобразовать в одномерный?
madlabel Отправлено: 18 Сентября, 2015 - 11:45:53 • Тема: Сравнение массивов • Форум: Вопросы новичков

Ответов: 12
Просмотров: 611
Есть 2 массива

1. Значения свойств из бд
Array ( [0] => Array ( [id] => 2 ) [1] => Array ( [id] => 1 ) )

2. Значения всех свойств из бд
Array ( [0] => Array ( [id] => 11 ) [1] => Array ( [id] => 2 ) [2] => Array ( [id] => 1 ) [3] => Array ( [id] => 9 ) [4] => Array ( [id] => 10 ) )

Нужно их как-то сравнить, имеются ли значения 1го во 2м.
Пробовал in_array & array_search.
madlabel Отправлено: 14 Сентября, 2015 - 21:28:17 • Тема: Объединение 4х таблиц • Форум: SQL и Архитектура БД

Ответов: 5
Просмотров: 64
Спасибо за ответы, подсмотрел реализацию в cms simpla. Но всплывает ещё вопрос. Как вывести все доп свойства в каталог? Причём сделать это красиво.
В симпла выводится так:
--- цикл ---
название товара
картинка
цена
--- конец цикла ---
(Название, картинка, цена - отдельные поля в таблице товаров, т.е не доп свойства, в шаблон каталога можно вывести как нужно, т.е:
$tpl->set('{name}', $row['name']) и так далее, но как быть с доп свойствами? Таким же макаром хочу их вывести в шаблон каталога, дабы можно было их красиво расположить, а не просто кучей вывести.

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

Если дергать свойства для каждого объекта в каталоге, то лично у меня получается так:
(Пример на колене)

PHP:
скопировать код в буфер обмена
  1. $sql = "select * from realty";
  2. foreach($sql as $row){
  3. $sql = "Select * from attributes where realty_id = $row['id']";
  4. foreach($sql as $attr){
  5. $attr .= $attr['name']
  6. }
  7.  

В шаблон атрибуты (свойства) вывожу так:
$tpl->set('{attributes}', $attr);
Но все свойства будут в куче один за другим, т.е расположить в шаблоне их не получится, т.к выводится все в {attributes}.

Буду рад любым советам!

Страниц (3): « 1 [2] 3 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB