PHP.SU

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

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

> Найдено сообщений: 20
keilman Отправлено: 17 Июня, 2014 - 10:20:00 • Тема: Как заполнить ассоциативный массив • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 2288
armancho7777777 пишет:
keilman пишет:
Ваш вариант вообще почему то не возвращал результат...

Исправить

на
CODE (javascript):
скопировать код в буфер обмена
  1. {massiv : $data.get()}


О, спасибо.

Блин, почему у меня нельзя нажимать кнопку "Спасибо", уже трем человекам Улыбка хотел нажать, а ругается что мало сообщений...
keilman Отправлено: 16 Июня, 2014 - 22:59:02 • Тема: Как заполнить ассоциативный массив • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 2288
tuareg пишет:
А так ?:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. // Создаем массив для номеров set-ов
  3.                 var arr  = [],obj = {},el;
  4.  
  5.  
  6.                 // Ищем ячейки таблицы с атрибутом "title"
  7.                 $("td[title]").each(function(i)
  8.                 {
  9.                        el = $(this);
  10.                        obj = {
  11.                            num_set : el.html(),
  12.                            settings  : el.attr('title')    
  13.                        }
  14.                        arr.push(obj);
  15.                 });
  16. $.ajax(
  17.                 {
  18.                         async: false,
  19.                         type: "POST",
  20.                         url: "ajax/handler.php",
  21.                         data:arr,
  22.                         success: function(html)
  23.                         {
  24.                                 $("#result").html(html);
  25.                         }
  26.                 });
  27.  


Спасибо! Но ваш вариант возвращает NULL.

Я решил другим способом, ниже смотрите.
(Добавление)
armancho7777777 пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. var $data = $("td[title]").map(function(){
  2.  
  3.     return {
  4.         id   : this.getAttribute('title'),
  5.         name : this.innerHTML
  6.     };
  7. });
  8.  
  9. $.post('ajax/handler.php', $data.get(), function(html){
  10.     $("#result").html(html);
  11. });


И Вам спасибо за наводку. Ваш вариант вообще почему то не возвращал результат...
Но зато натолкнуло на мысли, спасибо.

Я решил по другому, идея взята от Вас!
(Добавление)
Я решил вот так:

код скрипта:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(document).ready(function()
  3. {
  4.         // Выводим список партий
  5.         $("#button").click(function()
  6.         {
  7.                 // Создаем массив для напараметров
  8.                 var $massiv = [];
  9.  
  10.                 // Ищем ячейки таблицы с атрибутом "title"
  11.                 $("td[title]").each(function(i)
  12.                 {
  13.                         $massiv[i] =
  14.                         {
  15.                                 // Записываем из ячеек номера set-ов
  16.                                 num_set:$(this).html(),
  17.                                 // Записывем параметры set-ов
  18.                                 settings:$(this).attr("title")
  19.                         };
  20.                 });
  21.  
  22.                 // Отправляем на сервер данные
  23.                 $.ajax(
  24.                 {
  25.                         async: false,
  26.                         type: "POST",
  27.                         url: "ajax/handler.php",
  28.                         data:
  29.                         {
  30.                                 check:"yes",
  31.                                 massiv:$massiv
  32.                         },
  33.                         success: function(html)
  34.                         {
  35.                                 $("#result").html(html);
  36.                         }
  37.                 });
  38.         });
  39. });
  40.  


и обработчик на сервере (php):

PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_POST['check']) && $_POST['check'] == "yes")
  3. {
  4.         foreach ($_POST['massiv'] as $key => $massiv)
  5.         {
  6.                 echo 'SET: '.$massiv['num_set'].'<br />';
  7.                 echo 'Параметры: '.$massiv['settings'].'<br /><br />';
  8.         }
  9. }
  10.  


Теперь используется всего лишь один foreach Улыбка
А то приходиться парсить файл содержащий до 15000 строк.
keilman Отправлено: 16 Июня, 2014 - 17:14:20 • Тема: Как заполнить ассоциативный массив • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 2288
DelphinPRO пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. var k = $(this)... // то что должно быть ключом
  2. massiv[k] = $(this).attr("title");


Спасибо за ответ!

Но к сожалению не помогло, вид массива остался таким же почему то...

я решил проблему немного по другому:

CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function()
  2. {
  3.         // Выводим список партий
  4.         $("#button").click(function()
  5.         {
  6.                 // Создаем массив для номеров set-ов
  7.                 var num_set = [];
  8.                 // Создаем массив для напараметров
  9.                 var settings = [];
  10.  
  11.                 // Ищем ячейки таблицы с атрибутом "title"
  12.                 $("td[title]").each(function(i)
  13.                 {
  14.                         // Записываем из ячеек номера set-ов
  15.                         num_set[i]=$(this).html();
  16.                         // Записывем параметры set-ов
  17.                         settings[i]=$(this).attr("title");
  18.                 });
  19.  
  20.                 // Отправляем на сервер данные
  21.                 $.ajax(
  22.                 {
  23.                         async: false,
  24.                         type: "POST",
  25.                         url: "ajax/handler.php",
  26.                         data:
  27.                         {
  28.                                 num_set:num_set,
  29.                                 settings:settings
  30.                         },
  31.                         success: function(html)
  32.                         {
  33.                                 $("#result").html(html);
  34.                         }
  35.                 });
  36.         });
  37. });


И обработчик на сервере принимающий массив:

PHP:
скопировать код в буфер обмена
  1. foreach ($_POST['settings'] as $key1 => $settings)
  2. {
  3.         foreach ($_POST['num_set'] as $key2 => $num_set)
  4.         {
  5.                 if ($key1 == $key2)
  6.                 {
  7.                         echo 'SET: '.$num_set.'<br />';
  8.                         echo 'Параметры: '.$settings.'<br /><br />';
  9.                 }
  10.         }
  11. }


в скрипте jquery ничего критичного, а вот в обработчике php второй перебор не совсем удачно сделан... Он работает, но приходится много проходов делать, это из-за того что приходиться два массива по ключам сравнивать.

Может есть способ лучше это реализовать?
keilman Отправлено: 16 Июня, 2014 - 16:06:13 • Тема: Как заполнить ассоциативный массив • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 2288
Здравствуйте!

Прошу помощи с jQuery.
Требуется заполнить новый массив.

Вот код:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. // Создаем новый массив
  3. var massiv = new Array;
  4.  
  5. // Ищем ячейки таблицы с атрибутом "title"
  6. $("td[title]").each(function(i)
  7. {
  8.         massiv[i] = $(this).html();             // "Получаем содержимое ячейки"
  9.         massiv[i] = $(this).attr("title");      // "Получаем содержимое атрибута "title"
  10. });
  11.  


Я получаю значения в переменную "massiv" и посылаю аяксом на сервер, обрабатываю полученные данные функцией foreach.

Сейчас на сервер массив приходит такого вида:

PHP:
скопировать код в буфер обмена
  1.  
  2. {
  3.         [0]=>
  4.         string(314) "Значение 1"
  5.         [1]=>
  6.         string(311) "Значение 2"
  7.         [2]=>
  8.         string(314) "Значение 3"
  9. }
  10.  


А нужно чтобы был такого вида:

PHP:
скопировать код в буфер обмена
  1.  
  2. {
  3.         [0]=>
  4.         array(2)
  5.         {
  6.         ["id"]=>
  7.         string(1) "ключ1"
  8.         ["name"]=>
  9.         string(14) "значение1"
  10.     }
  11.     [1]=>
  12.     array(2)
  13.     {
  14.         ["id"]=>
  15.         string(1) "ключ2"
  16.         ["name"]=>
  17.         string(12) "значение2"
  18.     }
  19. }
  20.  


т. е. нужно получить ассоциативный массив с парой ключ1 => значение1, ключ2 => значение2

У меня пока в работает только эта строка
CODE (javascript):
скопировать код в буфер обмена
  1. massiv[i] = $(this).attr("title");

Я так понимаю эта
CODE (javascript):
скопировать код в буфер обмена
  1. massiv[i] = $(this).html();
не работает потому что происходит перезапись массива.

Как сделать чтобы в массив записывались и содержимое атрибута "title" и содержимое ячейки "TD"?

Пробовал так:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. massiv[i][] = $(this).html();   // "Получаем содержимое ячейки"
  3. massiv[i][] = $(this).attr("title");    // "Получаем содержимое атрибута "title"
  4.  
keilman Отправлено: 30 Марта, 2013 - 16:26:32 • Тема: Вывод уникальных записей из базы Mysql по условию • Форум: Работа с СУБД

Ответов: 1
Просмотров: 1091
Здравствуйте!

Подскажите как реализовать такую задачу:

допустим имеем вывод из базы:

Название|код|остаток
==========================
Первый товар|1|4
Второй товар|1|0
Третий товар|2|5
Четвертый товар|3|0
Пятый товар|4|2

Как создать запрос чтобы товары с одинаковым кодом товара и с условием нулевого остатка не выводились из базы, остальные с тем же кодом но с положительным остатком отображались, и также отображались остальные товары с нулевым остатком если они существуют по одной записи в базе.
Т. е. нужно скрыть отображение товаров которых по коду больше чем одна запись, и у которых нулевой остаток.

Пробовал GROUP BY и DISTINCT, но они применяют условие ко всем записям, а надо только к тем товарам которых в базе больше одной записи по коду
keilman Отправлено: 13 Марта, 2013 - 08:29:07 • Тема: PEAR::Spreadsheet_Excel_Writer обновление ячеек файла excel, а не перезапись • Форум: PEAR и PECL

Ответов: 0
Просмотров: 1372
Здравствуйте уважаемые форумчане!

Подскажите кто работал с библиотекой PEAR::Spreadsheet_Excel_Writer и кто знает как сделать что бы с помощью этой библиотеки не создавать файл excel, а обновлять ячейки у существующего файла с заранее созданной разметкой и форматированием ячеек?
keilman Отправлено: 04 Марта, 2013 - 07:35:11 • Тема: UPDATE сразу нескольких строк в таблице • Форум: Вопросы новичков

Ответов: 3
Просмотров: 182
DeepVarvar спасибо за ссылку, но к сожалению в данном материале я не нашел ответ на свой вопрос..
Там есть только функции добавления товара, изменения кол-ва, удаления. Эти функции я уже написал, они работают, а вот чтобы когда пользователь окончательно отредактировал количество товаров, поудалял ненужные товары в корзине и потом нажал "Купить" на этой же странице, то после этого чтобы передались id товаров и их количество в таблицу товаров, а в таблице товаров у соответветствующих товаров чтобы изменилось количество.
Не знаю, правильно ли я объяснил... Нет у меня способности правильно излагать мысль Улыбка

Можно посмотреть [url]3gs.su/s/[/url], это раздел сайта над которым ведутся разработки. Зайдите как логин и пароль - test, накидайте что-нибудь в корзину и перейдите в неё, посмтрите может поймете что я хочу реализовать.

Есть ли еще варианты решения по моему вопросу?
keilman Отправлено: 04 Марта, 2013 - 02:10:05 • Тема: UPDATE сразу нескольких строк в таблице • Форум: Вопросы новичков

Ответов: 3
Просмотров: 182
Здравствуйте!

Подскажите как реализовать данную задачку.

Есть две таблицы в базе MySql - "korzina" и "tovary", у них есть поле "kolvo".

Есть страница корзины покупателя, на ней циклом из таблицы "korzina" выводится список товаров данного покупателя и ниже кнопка "Купить".

Так вот как мне сделать так чтобы после нажатия на кнопку "Купить" у товаров в таблице "tovary" в поле "kolvo" уменьшилось значение на соответствующее из таблицы корзины. Т. е. это нужно чтобы количество товаров было постоянно актуальным в магазине, а не в ручную менять у соответствующих товаров их количество после заказа покупателем.

Я могу делать обновление значения количества только одной строки:

PHP:
скопировать код в буфер обмена
  1. $update_kolvo = "UPDATE tovary SET `kolvo`='$edit_kolvo' WHERE `id` = '$id_tovara'";


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

Подскажите как сформировать запрос к базе или может вообще он должен формироваться динамически. И в каком виде лучше передавать параметры на страницу обработчика где будет произведен запрос UPDATE количества товаров, массивом или значения id товара и количества просто разделенные запятыми.

Передаваемые параметры после нажатия кнопки "Купить" - id товара и количество этого товара.

Прошу от Вас помощи!
keilman Отправлено: 28 Февраля, 2013 - 16:19:17 • Тема: Вычисление суммы товаров одного столбца по их количеству в другом столбце MySql • Форум: Вопросы новичков

Ответов: 2
Просмотров: 203
SAD пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT SUM(cena * kolvo) AS summ FROM shop


Вот это я тупанул.. Радость

Сказывается наверное неспание две ночи подряд.
Спасибо огромное!
keilman Отправлено: 28 Февраля, 2013 - 15:46:00 • Тема: Вычисление суммы товаров одного столбца по их количеству в другом столбце MySql • Форум: Вопросы новичков

Ответов: 2
Просмотров: 203
Здравствуйте!

Есть проблемка.

Суть такая:

есть таблица MySql такой структуры

name |cena|kolvo|
-------------------------------- ---------
тра та та...|2000| 3 |
тра та та...|1000| 5 |
тра та та...|3000| 2 |

Подскажите уважаемые гуру PHP, как мне получить сумму всех товаров по столбцу "cena" с учетом их количества по столбцу "kolvo"? Т. е. подскажите как должен выглядеть запрос к базе MySql.

Результат должен получиться таким - 17000 руб.

Мои знания в PHP средние и их как оказалось не хватает чтобы получить нужный результат.

Я делал вот так:

PHP:
скопировать код в буфер обмена
  1. $sql_summa = mysql_query("SELECT SUM(`cena`) AS `cena` FROM shop");

Такой запрос выводит общую сумму по столбцу "cena" но без учета количества т. е. всего 6000 руб.
keilman Отправлено: 11 Февраля, 2013 - 21:11:36 • Тема: Помогите с результатом вывода данных Ajax • Форум: Вопросы новичков

Ответов: 3
Просмотров: 366
DeepVarvar пишет:
Ответ на ваш вопрос: JSON


А можно попросить Вас примерчик по этой теме средствами Ajax и JSON? Или другими способами, главное чтобы эффективными.

Выглядеть это должно вот так:

Есть две страницы главная и обработчик.

На главной форма авторизации и три блока:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <div id="block1">Форма авторизации</div>
  2. <div id="block2">Список товаров</div>
  3. <div id="block3">Статистика корзины</div>


В обработчике к примеру три сообщения:

PHP:
скопировать код в буфер обмена
  1. echo 'Сообщение для блока №1';
  2. echo 'Сообщение для блока №2';
  3. echo 'Сообщение для блока №3';


И вот при нажатии кнопки "Войти", если юзер найден в базе то одновременно в указанных выше трех блоках выводятся соответствующие им сообщения из файла обработчика без перезагрузки страницы на Ajax.

Я пока научился (вернее подсказали) делать только с одним блоком, таким синтаксисом:

CODE (javascript):
скопировать код в буфер обмена
  1. <script language="javascript" type="text/javascript">
  2. $(document).ready(function()
  3. {
  4.         $("form.forma1").each(function()
  5.         {
  6.                 var $this = $(this);
  7.                 $this.submit(function ()
  8.                 {
  9.                         $.ajax(
  10.                         {
  11.                                 type: "POST",
  12.                                 url: "switch.php?action=test1",
  13.                                 data:
  14.                                 {
  15.                                         par1:$('input.param1',$this).val(),
  16.                                         par2:$('input.param2',$this).val()
  17.                                 },
  18.                                 success: function (html)
  19.                                 {
  20.                                         $("div#resultat1").html(html);
  21.                                 }
  22.                         });
  23.                         return false;
  24.                 });
  25.         });
  26. });
  27. </script>


Прошу подсказать мне на примерах, уверен что Вы знакомы с данной темой и синтаксисом.
keilman Отправлено: 11 Февраля, 2013 - 01:14:11 • Тема: Неправильно выводится принятый от обработчика ответ, Ajax • Форум: Вопросы новичков

Ответов: 1
Просмотров: 91
Проблема такая:

Есть на странице 20-ть товаров, они сгенирированны циклом WHILE PHP, у них кнопка "купить". С помощью Ajax при нажатии на нее товар добавляется в корзину и я написал в обработчике сообщение "Товар добален", так вот после того как данные отправлены, это сообщение отображается во всех двадцати товарах, а должно только у того где была нажата кнопка "Купить".

Вот код скрипта Ajax Jquery:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $("form.tovar").each(function() {
  2.     var $this = $(this);
  3.    
  4.     $this.submit(function () {
  5.         $.ajax({
  6.             type: "POST",
  7.             url: "cart.php",
  8.             data: {
  9.                 name: $('input.name_tov', $this).val(),
  10.                 kolvo: $('input.kolvo_tov', $this).val()
  11.             },
  12.             success: function (html) {
  13.                 $("div#korzina").html(html);
  14.             }
  15.         });
  16.         return false;
  17.     });
  18. });


В обработчике "cart.php" запросы к базе на добавление в корзину товара и сообщение о добавлении товара выводимое эхом.
keilman Отправлено: 11 Февраля, 2013 - 00:57:49 • Тема: Помогите с результатом вывода данных Ajax • Форум: Вопросы новичков

Ответов: 3
Просмотров: 366
Есть скрипт Ajax авторизации:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <script language="javascript" type="text/javascript">
  2. /* Авторизация */
  3. $(document).ready(function()
  4. {
  5.         $("form#vhod").submit(function()
  6.         {
  7.                 $.ajax(
  8.                 {
  9.                         type: "POST",
  10.                         url: "ajax/autorise_block.php",
  11.                         data:
  12.                         {
  13.                                 user_login:$("input#login").val(),
  14.                                 user_parol:$("input#parol").val()
  15.                         },
  16.                         success: function(data)
  17.                 {
  18.                         $("div#autorise").html(data);
  19.                 }
  20.         });
  21.         return false;
  22.         });
  23. });
  24. </script>


Работает исправно, получает логин и пароль из формы входа, посылает php скрипту, тот проверяет по базе, если найден юзер, выводит инфу о нем, типа л/к, если не найден - выводит ошибку. Все результаты действий он выводит в том же блоке где и была форма, без перезагрузки страницы, блок div #vhod

Есть всего три блока:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div id="vhod">Вывод форму входа или инфы о юзере</div>
  2. <div id="tovary">вывод товаров</div>
  3. <div id="statistic">вывод статистики</div>


Так вот, как мне дописать верхний скрипт или написать еще дополнительный что бы можно было указать еще параметр url обработчика и блок для вывода результатов?

Должно получиться что то типа этого:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <script language="javascript" type="text/javascript">
  2. /* Авторизация */
  3. $(document).ready(function()
  4. {
  5.         $("form#vhod").submit(function()
  6.         {
  7.                 $.ajax(
  8.                 {
  9.                         type: "POST",
  10.                         url: "ajax/autorise_block.php",
  11.                         data:
  12.                         {
  13.                                 user_login:$("input#login").val(),
  14.                                 user_parol:$("input#parol").val()
  15.                         },
  16.                         success: function(data)
  17.                 {
  18.                         $("div#autorise").html(data);
  19.                 }
  20.         });
  21.         return false;
  22.         });
  23. });
  24. </script>
  25.  
  26. <script language="javascript" type="text/javascript">
  27. /* Авторизация */
  28. $(document).ready(function()
  29. {
  30.         $("form#vhod").submit(function()
  31.         {
  32.                 $.ajax(
  33.                 {
  34.                         type: "POST",
  35.                         url: "ajax/другой обработчик №2.php",
  36.                         success: function(data)
  37.                 {
  38.                         $("div#второй блок вывода товаров").html(data);
  39.                 }
  40.         });
  41.         return false;
  42.         });
  43. });
  44. </script>
  45.  
  46. <script language="javascript" type="text/javascript">
  47. /* Авторизация */
  48. $(document).ready(function()
  49. {
  50.         $("form#vhod").submit(function()
  51.         {
  52.                 $.ajax(
  53.                 {
  54.                         type: "POST",
  55.                         url: "ajax/обработчик №3.php",
  56.                         success: function(data)
  57.                 {
  58.                         $("div#блок №3 вывод статистики").html(data);
  59.                 }
  60.         });
  61.         return false;
  62.         });
  63. });
  64. </script>


Т. е. смысл такой чтобы все три скрипта Jquery Ajax реагировали на одну кнопку в форме входа по действию submit, и после этого каждый из них обращался к своему обработчику и выводил результат в указанном в скрипте блоке как примере.
keilman Отправлено: 09 Февраля, 2013 - 13:32:06 • Тема: Формы и Jquery • Форум: Вопросы новичков

Ответов: 4
Просмотров: 230
SAD пишет:
у меня все работает. проверил на вашей же странице

сделайте так на всякий случай.


Сорри!!! Белый флаг

МОЙ КОСЯК!

Первый Ваш код рабочий!

Это я тупанул... Не понял

Я вставил Ваш код просто заменив свой при этом не включил мозги! Торопился..

Не провел отличия.

Я забыл строку написать:
PHP:
скопировать код в буфер обмена
  1. $(document).ready(function()
  2. {
  3. ....
  4. }


Премного благодарен!
Спасибо пока не могу на этом форуме нажимать..
Классный форум и его обитатели!
keilman Отправлено: 09 Февраля, 2013 - 13:15:56 • Тема: Формы и Jquery • Форум: Вопросы новичков

Ответов: 4
Просмотров: 230
SAD пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. $("form.forma1").each(function() {
  2.     var $this = $(this);
  3.    
  4.     $this.submit(function () {
  5.         $.ajax({
  6.             type: "POST",
  7.             url: "switch.php?action=test1",
  8.             data: {
  9.                 par1: $('input.param1', $this).val(),
  10.                 par2: $('input.param2', $this).val()
  11.             },
  12.             success: function (html) {
  13.                 $("div#resultat").html(html);
  14.             }
  15.         });
  16.         return false;
  17.     });
  18. });
  19.  


Спасибо за то что отреагировали на сообщение, думал как раз то что нужно и Вы правильно поняли мою проблему, но..
Странно... Почему то не работает... Проверил все.
С приведенным Вами кодом при нажатии на кнопку страница вся перезагружается, ajax не работает, хотя результаты должны были вывестись в блоке div #resultat

С моим кодом ajax работал, но параметры только первой формы передавались.
(Добавление)
А хотя может оно и рабочее..

У меня в обработчике данные принимаются так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. switch ($_REQUEST['action'])
  3. {
  4.         case 'test1':
  5.         echo '<hr />';
  6.         echo "\n";
  7.         echo 'Первый параметр - '.$_POST['par1'].'<br />';
  8.         echo "\n";
  9.         echo 'Второй параметр - '.$_POST['par2'].'<br />';
  10.         break;
  11.         case 'test2':
  12.         echo '<hr />';
  13.         echo "\n";
  14.         echo 'Тестовый вывод 2';
  15.         break;
  16. }
  17. ?>


Все правильно с Вашим кодом также должно быть или по другому?

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB