Архив метки: php

Сортировка в MySQL кириллицы utf8-general-ci

загруженное (1)Дано: MySQL 5.1.72, таблицы созданные в utf8-general-ci, установка соединения вызывается следующей функцией:

function connect($host,$name,$pass,$base){
 $this->idsqlconnection=new mysqli($host,$name,$pass,$base);
 if (mysqli_connect_errno()) {
 $serr=mysqli_connect_error();
 die("Error connect to Mysql or select base: $serr");
 } 
 $result = mysqli_query($this->idsqlconnection,"SET NAMES utf8_general_ci"); 
 mysqli_set_charset($this->idsqlconnection, "utf8_general_ci");
 
 }

И хоть ты тресни, запрос вида:

$SQL = "SELECT * FROM places WHERE orgid='$orgid' AND active=1 ORDER BY name";
 $result = $sqlcn->ExecuteSQL( $SQL ) or die("Не могу выбрать список помещений!".mysqli_error($sqlcn->idsqlconnection));

Сортировался по непонятно каким критериям. Потеряв на поиск причины  несколько часов, перепробовав кучу «рецептов», пришлось заворачивать сортировку запросов в команду binary(), т.е. вот так:

$SQL = "SELECT * FROM places WHERE orgid='$orgid' AND active=1 ORDER BY binary(name)";

Костыль конечно.. И сортирует различая большие и маленькие буквы. Но таки лучше так чем никак. Ищу лучшее решение.

Получение данных из Active Directory посредством PHP

Сам за себя лучше всего расскажет мой кусок кода. Все сдобрено максимально большим количеством комментариев. По формату построения LDAP запросов полезно почитать вот этот мануал. Ничего толковее к сожалению найти не смог.

Вот результат:

Снимок-12Вот код:

$ldap_user='gribov.p';
$ldap_pass='ргшкуцудцс';
$filter = "(telephonenumber=*9657400222*)";   // устанавливаем фильтр выборки из AD
//(company=*Русский Север*)
$attr=array("displayname","useruid2","title","telephonenumber","department","mail","jpegphoto","homephone"); // устанавливаем какие поля нам нужно получить из AD

// устанавливаем соединение с ldap сервером
$ldap_con = ldap_connect($cfg->ldap) or die("Could not connect to LDAP server.");
echo "-Соеденяюсь с LDAP сервером: OK</br>";

// Устанавливаем флажки протокола
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);  // AD Windows 2003 и выше
ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);         //Определяет, следовать ли автоматически рефералам, возвращенным сервером LDAP. Зачем нужно - не понятно

// авторизуемся в AD
$dn="$cfg->domain1\\$ldap_user";
$ldapbind = ldap_bind($ldap_con, $dn, $ldap_pass) or die("LDAP bind failed...");
echo "-Авторизуюсь на LDAP сервере: OK</br>";

// Пытаемся чтото получить из AD
$base_dn = "DC=$cfg->domain1, DC=$cfg->domain2";  
$search=ldap_search($ldap_con, $base_dn, $filter,$attr);  // Ищем эти поля, получаем ссылку на результат
$number_returned = ldap_count_entries($ldap_con,$search); // Получаем количество записей
echo "-Получаю записи из AD: $number_returned</br>";
$info = ldap_get_entries($ldap_con, $search);             // получаем результат в переменную $info

// дальше парсим полученный массив
// Результирующий массив с пользователями из AD
// "displayname","useruid2","title","telephonenumber","department","mail","jpegphoto","homephone"
  for ($i=0; $i<$info["count"]; $i++) {             
        $res=$info[$i];
        $m_name=$res["displayname"];
        echo "Имя: $m_name[0]</br>";
        $m_tab=$res["useruid2"];
        echo "Табельный: $m_tab[0]</br>";        
        $m_title=$res["title"];
        echo "Должность: $m_title[0]</br>";        
        $m_tel=$res["telephonenumber"];
        echo "Телефон: $m_tel[0]</br>";        
        $m_dep=$res["department"];
        echo "Департамент: $m_dep[0]</br>";        
        $m_mail=$res["mail"];
        echo "Email: $m_mail[0]</br>";        
        $m_photo=$res["jpegphoto"];
        $m_hometel=$res["homephone"];
        echo "Дом.тел: $m_hometel[0]</br>";               
        file_put_contents('img.jpg',$m_photo[0]);
        echo "<img src='img.jpg'>";                       
         echo "<hr>";       

    };

Jquery form или отслыка POST без обновления страницы

Для реализации сего необходимо подключить плагин jquery.form к своему проекту. Как использовать? Вот пример (взято из проекта ГдеМои):

Оформление формы:

        <form id="myForm" class="well"  ENCTYPE="multipart/form-data" action="controller/saveimei.php" method="post" name="myForm" target="_self">
            <label>Название маячка</label>
            <input name="dvname" id="dvname" type="text" class="span12" placeholder="Как будем его называть?">
            <label>Его IMEI</label>
            <input name="imeicode" id="imeicode" type="text" class="span12" placeholder="IMEI код устройства">            
            <p align="center">
            <button type="submit" class="btn">Сохранить</button>
            </p>
        </form>

Читать далее Jquery form или отслыка POST без обновления страницы

Нарезаем изображение «кубиками» на PHP

Итак, задача: есть файл PNG, его нужно порезать на заданное количество «кубиков» — файлов (забегая вперед — например это нужно при создании своих карт при помощи API Яндекс-карт). В реализации этой задачи нам поможет библиотека GD, а точнее её функции

  • imagecreatefrompng — создать изображение из файла
  • getimagesize — дать информацию по размерам изображения из файла
  • imagecreatetruecolor — создать изображение с заданными размерами
  • imagecopy — скопировать часть изображения
  • imagepng — сохранить изображение в файл
function cuttingimg($fn,$sz){
    $img=imagecreatefrompng("$fn);  // получаем идентификатор загруженного изрбражения которое будем резать
    $info=getimagesize("$fn);                          // получаем в массив информацию об изображении
    $w=$info[0];$h=$info[0];    // ширина и высота исходного изображения
    $sx=round($w/$sz,0);        // длинна куска изображения
    $sy=round($w/$sz,0);        // высота куска изображения
    $px=0;$py=0;                // координаты шага "реза"
    for ($y = 1; $y <= $sz; $y++) {        
        for ($x = 1; $x <= $sz; $x++) {            
             $imgcropped=imagecreatetruecolor($sx,$sy);
             imagecopy($imgcropped,$img,0,0,$px,$py,$sx,$sy);
             imagepng($imgcropped,"$y."-".$x."-".$fn);
             $px=$px+$sx;
            };
            $px=0;$py=$py+$sy;            
        };
};

Выложена первая публичная версия «Учет ТМЦ»

Собственно этот продукт предназначен в основном для системных администраторов и иже с ними. Однако можно вести учет и столов/стульев/чего угодно. Преимущество: WEB интерфейс. Не нужно ставить клиентские программы у конечных пользователей. Пользователи всегда могут посмотреть что находится у них в кабинете, а вы в свою очередь можете свершать операции над ТМЦ с любого ПК (планшета/сотового) который находится в сети организации…

Подробное описание здесь