• PHP / MySQL (VDS CentOS) - Как подключиться к удаленному серверу?

    shaks
    @shaks
    ОШИБКИ НАДО ЧИТАТЬ!
    > Но при подключении выдает довольно таки странную ошибку:
    Access denied for user 'someuser'@'23.252.*.*'
    В чем странность, доступ запрещен для юзера такого-то с такого-то IP. Если логин/пасс верные, то логично предположить что проблема в IP. Значит на стороне сервера, к которому вы хотите подключиться, нужно разрешить обращения с вашего IP.
    Как это сделать уже другой вопрос, дам наводку - dev.mysql.com/doc/refman/5.0/en/server-options.htm...
    Ответ написан
    Комментировать
  • Как лучше хранить параметры multiselect-формы в БД?

    shaks
    @shaks
    В отдельной таблице, и связать по id
    Ответ написан
    Комментировать
  • Как убрать из массива все значения за исключением заданных? (Для PHP-программистов)

    shaks
    @shaks
    Сначала правда надо обратно собрать строку из массива )

    <?php
    $string = 'Param pam pam DS{FP}$%@@#[]]][[]#$';
    
    echo preg_replace('/[^\(\)\[\]\{\}]/', '', $string); # => {}[]]][[]
    Ответ написан
    2 комментария
  • Как сделать подгрузкe контента при скроллинге?

    shaks
    @shaks
    jscroll.com - Плагин для jquery, делает то что вам нужно.
    Ответ написан
    Комментировать
  • Hack by Four ALSZ

    shaks
    @shaks
    Школота. Или сам зарегал, или в логах ботнета стянул.
    Ответ написан
    Комментировать
  • Как справиться с проблемой разбиения файла?

    shaks
    @shaks
    Ну как бы да) для таких целей принято использовать БД (sqlite например)
    Либо хранить информацию в файле в json или xml формате.

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

    1|Read|20/05/2014 15:31:38 +0600|+7xxxxx Number2: +7xxxxx|test test
    2|Read|20/05/2014 15:31:38 +0600|+7xxxxx Number2: +7xxxxx|test test
    3|Read|20/05/2014 15:31:38 +0600|+7xxxxx Number2: +7xxxxx|test test
    4|Read|20/05/2014 15:31:38 +0600|+7xxxxx Number2: +7xxxxx|test test

    В данном случае меткой является знак "|" Программист открывает файл, функцией explode разбивает строку на массив (через метку), и получает данные, заведомо зная что на первой позиции у него id, на второй статус и так далее..
    Но к такому методу прибегают тогда, когда запись может уместиться в одну строчку, и программист знает что одна строка == одной записи. У Вас же имеется тектовое поле, которое может содержать как перевод коретки на новую строку, так и "случайным образом" туда может попасть ваша метка. В таком случае удобнее и практичнее будет использовать какую либо легкую базу данных - sqlite яркий пример такой.
    Ответ написан
  • Java Script + HTML - как повторить действие на странице?

    shaks
    @shaks
    как-то так.
    Яваскрипт должен быть или под всеми тэгами с которыми он будет работать, или же должен вызываться по событию загрузки страницы.
    <html>
    <body>
    
    <img class="bg-image" src="http://s.pikabu.ru/images/logo2013.png" width="155" height="52">
    <img class="bg-image" src="http://s.pikabu.ru/images/logo2013.png" width="155" height="52">
    <img class="bg-image" src="http://s.pikabu.ru/images/logo2013.png" width="155" height="52">
    
    <script>
    
        imgs = document.getElementsByClassName('bg-image'); // получаем массив <img'ов
    
        if(imgs.length>0)
        {
            for(var i=imgs.length-1; i >= 0 ; i--)  // в цикле идем задом наперед, чтоб корректно срабатывало удаление элемента
            {
                var div_img = document.createElement('div') // создаем новый DOM  элемент (div)
                div_img.className='slides-fullscreen-img overlay-black' // даем нужные классы
                div_img.style.background= "url('"+imgs[i].src+"')"; // прописываем нужные стили
                div_img.style.backgroundSize= "cover";
                div_img.style.width= imgs[i].width+"px ";
                div_img.style.height= imgs[i].height+"px ";
                document.body.appendChild(div_img); // подсовываем созданный <div> внутрь body
                document.body.removeChild(imgs[i]) // удаляем картинку
            }
        }
    </script>
    
    </body>
    </html>
    Ответ написан
  • Как заменить коды UTF8 на символы в URL?

    shaks
    @shaks
    $params = array('date'=>'day', 'sort'=>'rating');
    
    echo(http_build_query($params, null, ";")); # => date=day;sort=rating


    Функция возвращает строку с не урлкодированным сепаратором, значит проблема не в пхп
    Ответ написан
  • Как реализовать подобный вывод с помощью php или jquery?

    shaks
    @shaks
    $data = $db->query(SELECT * FROM .... ORDER BY `name` ASC)->fetchAll(PDO::FETCH_ASSOC)

    Пережевываем полученный массив
    $result = array();
    foreach($data as $d)
    {
    $first = mb_strtoupper($d['name']{0});
    if(isset($result[$first]))
    array_push($result[$first], $d);
    else
    $result[$first] = array($d);
    }

    ----
    Во вьюхе:
    <?php foreach($result as $char=>$values): ?>
    <tr>
    <td class='большая буква'><?php echo $char ?></td>
    .........а тут уже все названия будут в массиве $values, как это все выводить - дело верстки.........
    </tr>
    <?php endforeach;?>
    Ответ написан
    Комментировать
  • Crossdomain sessions in php, использование?

    shaks
    @shaks
    Я так и не понял причем тут кроссдоменность.
    Кроссдоменный обмен сессиями это когда на сайте A нужно работать с сессией сайта Б (яркий пример чтоб не терялась сессия между www.domain.com и domain.com).
    Вы же спрашиваете, почему приложение, обращающееся на сервер не получает сессию.
    Чтобы ответить нужно для начала понять что такое сессия. В двух словах это: файлик (или запись в БД зависит от типа хранения сессии), который находится на стороне сервера, и в котором хранится информация о посетителе. Идентификатор сессии (session_id) устанавливается посетителю как cookies. Т.е. по факту сессия это cookie имя которой по умолчанию PHPSSID если я правильно помню, а значение - идентификатор сессии.
    Таким образом, получая в кукисах идентификатор сессии, сервер ищет файлик у себя, и если находит то данные сессии пишет в $_SESSION.

    Ваше приложение поддерживает cookie ?

    Также убедитесь в том что на стороне сервера сессия устанавливается. Проверьте наличие session_start() и просмотрите заголовки которые отдает сервер.
    Ответ написан
  • Проблема с разработкой доски объявлений

    shaks
    @shaks
    Советую глянуть в сторону NoSQL решений, например MongoDB.
    А по поводу mysql щас подумаю, чуть позже отпишу.

    ** подумал..
    4 таблицы:
    items - товары
    categories - список категорий (под-категории не учитываю для простоты изъяснения)
    options - характеристики товаров (связь один ко многим)
    items_categories - категории товаров (связь один ко многим)

    Суть вот в чем, у каждого товара может быть ноль или много характеристик. Характеристики имеют ключ и значение, значение может быть типа integer или varchar. В этом заключается проблема, не знаю как её можно решить изящно. Как вариант делать два поля string_value и int_value с соответствующим типом. А при поиске выбирать поле по типу искомого.

    items_categories содержит в себе поля category_id и item_id, таким образом список категорий того или иного товара достигается элементарным запросом с inner join

    Пример выборки категорий товара
    SELECT `categories`.* FROM `categories` INNER JOIN `items_categories` ON `categories`.`id` = `items_categories`.`category_id` WHERE `items_categories`.`item_id` = 123


    Пример выборки товара с его характеристиками
    SELECT `items`.* , `options`.* FROM `items`, `options` WHERE `items`.`id` = 123 AND `options`.`item_id` = `items`.`id`


    В общем как-то так..
    Ответ написан
  • Где найти документацию по phpunit + selenium?

    shaks
    @shaks
    Не в тему конечно.. Но переходи на Ruby )
    Ruby самая тестолюбивая тусовка ;)
    Ответ написан
  • Как правильно избавиться от ошибки Invalid byte sequence in utf-8 ?

    shaks
    @shaks Автор вопроса
    Решил вопрос через глубокий анус, как у меня к сожалению часто бывает.
    Т.к. у меня упорно не получалось пользоваться :invalid=>:replace, :undef=>:replace (менялись все символы не попадающие в ascii) пришлось сделать это самому. Я пробежался по каждому символу строки, и отсек невалидные символы.
    source.each_char do |char|
    	enc_char = char.force_encoding('utf-8')
    	if enc_char.valid_encoding?
    		content << enc_char
    	else
    		log.debug(char) 
    	end
    end


    Если у когото есть более изящное решение, буду признателен если поделитесь.
    Ответ написан
  • Разбор XML. ': namespace error: Namespace prefix ss '. Что за ошибка?

    shaks
    @shaks
    Два варианта решения "проблемы".
    1. Убрать namespace, раз Вы не знаете что это, значит он Вам не нужен.
    2. Описать namespace в корневом теге хмл. или вроде как даже в самом теге его можно описывать, в котором он применяется.

    Подробнее про второй пункт
    <root xmlns:ss = 'popka'>
    <Row>
    <Cell ss:Index="1">
    <Data ss:Type="String">Продукт1</Data>
    </Cell>
    </Row>
    </root>
    Ответ написан
    Комментировать
  • Как правильно организовать обработку ошибок на PHP?

    shaks
    @shaks
    Ошибки в лог надо писать все

    Вот простой быдлокодинг логирования ошибок. В лог попадает абсолютно всё, даже "засобаченное".
    error_reporting(E_ALL);
    ini_set('display_errors',0);
    ini_set('log_errors',1);
    set_error_handler("errorsLog");
    
    function errorsLog($errno, $errmsg, $file, $line)
    {
        $fp=fopen('log.txt', 'a+');
        fwrite($fp, "errno: $errno\ntext: $errmsg\nfile: $file\nline: $line\n (".date("r").") \n===========================================\n\n");
        fclose($fp);
    }


    Самому туда посылать ошибки можно функцией trigger_error()
    Ответ написан
    Комментировать