Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/266: Рейтинг темы: голосов - 266, средняя оценка - 4.84
Даниэль
0 / 0 / 0
Регистрация: 21.08.2014
Сообщений: 5
1

Обмен готовыми решениями

02.07.2008, 12:02. Просмотров 48449. Ответов 91
Метки нет (Все метки)

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?PHP 
echo getfilesize($_GET['name']); 
 
// Функция для определения размера 
function getfilesize($filename) 
{ 
  // Проверяем, существует ли файл 
  if(!file_exists($filename)) return "файл не существует"; 
  // Определяем размер файла 
  $filesize = filesize($filename); 
  // Если размер файл превышает 1024 байта, 
  // пересчитываем размер в Кбайты 
  if($filesize > 1024) 
  { 
    $filesize = (float)($filesize/1024); 
    // Если размер файл превышает 1024 Кбайта, 
    // пересчитываем размер в Мбайты 
    if($filesize > 1024) 
    { 
      $filesize = (float)($filesize/1024); 
      // Округляем дробную часть до 
      // первого знака после запятой 
      $filesize = round($filesize, 1); 
      return $filesize." Мб"; 
    } 
  } 
  else 
  { 
    return $filesize." байт"; 
  } 
} 
?>
Взято с [Ссылка удалена!]

 Комментарий модератора 
Если хотите поделиться готовыми решениями, то выкладывайте их в эту тему, а не ссылки на Ваш форум и сайт
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2008, 12:02
Ответы с готовыми решениями:

Обсуждение класса постраничной навигации из темы "Обмен готовыми решениями"
Выделено из темы: http://www.cyberforum.ru/php/thread158262-page2.html Para...

Обмен между php и javascript
$.ajax({ url: './', type: 'POST', data: {reg_login:...

обмен данными между серверами
Всем доброго времени суток! Пишу дипломную работу, тема - модуль обмена...

Обмен сообщениями
Как отправить сообщение через свой сайт в браузер тому кто на сайте (без...

Обмен сообщениями (новичек)
Вопрос такой: как грамотно организовать обмен сообщениями между пользователями,...

91
popropusku
3 / 3 / 0
Регистрация: 19.10.2012
Сообщений: 123
10.04.2013, 11:25 21
Цитата Сообщение от Alex1OPS Посмотреть сообщение
Улучшенный вариант Загрузка файлов на сервер:
Форма:
HTML5
1
2
3
4
<form action="./upload.php" method="post" enctype="multipart/form-data">
<p><input type="file" name="userfile" id="file"></p>
<p><input type="submit" value="Загрузить фаил"></p>
</form>
Файл upload.php
PHP
1
2
3
4
5
6
7
8
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
<?php
 
$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); // Здесь мы перечисляем допустимые типы файлов
 
$max_filesize = 524288; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).
 
$upload_path = './files/'; // Место, куда будут загружаться файлы (в данном случае это папка 'files').
 
$filename = $_FILES['userfile']['name']; // В переменную $filename заносим точное имя файла (включая расширение).
 
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // В переменную $ext заносим расширение загруженного файла.
 
// Сверяем полученное расширение со списком допутимых расширений, которые мы определили в самом начале. Если расширение загруженного файла не входит в список разрешенных, то прерываем выполнение программы и выдаем соответствующее сообщение.
 
if(!in_array($ext,$allowed_filetypes))
die('Данный тип файла не поддерживается.');
 
// Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.
 
if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
die('Фаил слишком большой.');
 
// Проверяем, доступна ли на запись папка, определенная нами под загрузку файлов (папка files). Если вдруг недоступна, то выдаем сообщение, что на папку нужно поставить права доступа 777.
 
if(!is_writable($upload_path))
die('Невозможно загрузить фаил в папку. Установите права доступа - 777.');
 
// Загружаем фаил в указанную папку.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
{
echo 'Ваш фаил успешно загружен <a href="' . $upload_path . $filename . '">смотреть</a>'; 
}
else
{
echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
}
?>
Добавлено через 2 минуты
Можно использовать формирование имени загруженного файла таким образом:
PHP
1
$filename = $_FILES['userfile']['name'].time();
Не работает такое переименование
PHP
1
$filename = $_FILES['userfile']['name'].time();
0
Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 820
15.04.2013, 19:18 22
класс для работы с СУБД MySQL, с драйвером mysqli: http://www.phpinfo.su/articles/addit...ubd_mysql.html
1
fullzero
10 / 11 / 7
Регистрация: 20.05.2012
Сообщений: 116
30.05.2013, 13:45 23
Быстрый способ создать алфавитный указатель
PHP
1
2
3
4
5
6
<?php
//От A до Z
foreach(range('A', 'Z') as $letter) {
echo "<a href=\"".$letter."\">".$letter."</a> ";
}
?>
2
Dealiss
293 / 281 / 84
Регистрация: 10.05.2013
Сообщений: 920
28.07.2013, 05:52 24
Альтернатива str_split().
Данная функция умеет разбирать строку по символа в массив, с учетом русских и английских букв.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function getSimbol($text){
    /*
    $text - обрабатываемая строка
    */
    $count = strlen($text); // Подсчитывает к-тво символов
    $array = array(); // пустой массив
    $i = 1;     // текущий номер сивола
    $s = 0;     // указатель начала символа
    while($i <= $count)
     {
        if($i!=1)                   // отслеживаем 1 заход
                $s = $s +2 ;    // так как нужно начинать с 0 символа
        $check = substr($text,$s,1);        // зачитывем символ
        if($check != "")
          {                           
            if(mb_detect_encoding($check)=='UTF-8')     // определяем UTF-8 кодировку
                {                       // так как UTF-8 весит 2 байта
                $sim = substr($text,$s,2);          // зачитывать будем с $s до 2
                }                    
            elseif(mb_detect_encoding($check)=='ASCII') // определяем ASCII кодироку
                {                               // так как ASCII весит 1 байт
                $sim = substr($text,$s,1);                      // зачитывать будем с $s до 1
                $s--;                                // -1 от $s, так как ASCII = 1 байт
                }                                          
            array_push($array,$sim);    // записываем $sim в массив $array
        }   
        $i++;   // + 1 к текущему номеру символа
    }
    return $array; // Возвращаем массив с символами
}
Пример:
PHP
1
2
3
4
5
6
7
8
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
$str = "Привет мир! - Hello world!";
$r = getSimbol($str);
/*
Получим:
Array
(
    [0] => П
    [1] => р
    [2] => и
    [3] => в
    [4] => е
    [5] => т
    [6] =>  
    [7] => м
    [8] => и
    [9] => р
    [10] => !
    [11] =>  
    [12] => -
    [13] =>  
    [14] => H
    [15] => e
    [16] => l
    [17] => l
    [18] => o
    [19] =>  
    [20] => w
    [21] => o
    [22] => r
    [23] => l
    [24] => d
    [25] => !
)
*/
1
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16754 / 6645 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
28.07.2013, 12:58 25
Цитата Сообщение от Dealiss Посмотреть сообщение
так как UTF-8 весит 2 байта
Dealiss, это в корне неверно
во-первых, не весит, во-вторых, не все символы занимают по 2 байта..
PHP
1
var_dump(getSimbol('%@#№'));
1
Dealiss
293 / 281 / 84
Регистрация: 10.05.2013
Сообщений: 920
28.07.2013, 16:55 26
Не знал, что № = 3 байтам ...
Это только № может занимать 3 байта, или ещё и другие символы?
Я проверил "%@#№&*?/.,`+ё~^-=\|"... все кроме № равны 1 байту
1
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16754 / 6645 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
28.07.2013, 17:21 27
Dealiss, http://ru.wikipedia.org/wiki/UTF-8#.....D1.8B_Unicode
1
Camaro396
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
04.08.2013, 13:30 28
Класс для формирования карты сайта. Есть ещё для формирования идекса карт сайта, там почти то же самое.
PHP
1
2
3
4
5
6
7
8
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php
/*
* Класс карты сайта. Поддерживает toString.
* @todo Добавить сохранение/загрузку карты с поддержкой 10Мб / 50K лимита
* Пример использования:
* <code>
* date_default_timezone_set('UTC');
* $a = new SiteMap;
* $arImages = array (
*                 array (
*                     'loc' => 'http://www.ex.com/1.jpg',
*                     'title' => '<Me>',
*                     'geo_location' => 'Tver, Russia',
*                     'caption' => 'Me & my cat',
*                     'license' => 'http://www.ex.com/license'
*                 ),
*                 'http://www.ex.com/1.jpg'
*             );
* $a->pushItem('http://www.ex.com/example', time(), 0.7, 'daily', $arImages);
* $a->pushItem('http://www.ex.com/aboutus', time(), 0.5, 'weekly');
* // Записать в файл
* file_put_contents('./sitemap.xml', $a->getDocument());
* // Показать, что получилось
* echo $a;
* </code>
*
*/
class SiteMap
{
    const SITEMAP_NS = 'http://www.sitemaps.org/schemas/sitemap/0.9';
    const IMAGES_NS = 'http://www.google.com/schemas/sitemap-image/1.1';
 
    /*
    * Варианты частоты обновления URL, если будет подан неправильный вариант, он будет тихо проигнорирован
    */
    static $arChangeFreq = array('always',
                                    'hourly',
                                    'daily',
                                    'weekly',
                                    'monthly',
                                    'yearly',
                                    'never');
 
    /*
    * Объект для форматирования времени по W3C
    */
    private $datetime;
    private $xmlDoc;
    private $xmlRoot;
    private $bImagesEnabled = false;
 
    public function __construct() {
        $this->datetime = new DateTime;
        $this->xmlDoc = new DOMDocument('1.0', 'UTF-8');
        $root = $this->xmlDoc->createElementNS(self::SITEMAP_NS, 'urlset');
        $this->xmlRoot = $this->xmlDoc->appendChild( $root );
    }
 
    /*
    * @param float $priority - приоритет страницы
    * @param array $images - массив либо адресов картинок, либо массивов, содержащих параметры картинок
    */
    public function pushItem($url, $lastmod=null, $priority=null, $changefreq=null, $images=array()) {
        $xml =& $this->xmlDoc;
        $root =& $this->xmlRoot;
 
        if(!isset($url)) {
            return false;
        }
 
        array_walk_recursive($images, array(__class__, '_escapeAmp'));
        self::_escapeAmp($url);
 
        $el = $root->appendChild( $xml->createElement('url') );
        $el->appendChild( $xml->createElement('loc', $url ) );
 
        if(isset($lastmod)) {
            if(!is_numeric($lastmod)) {
                $lastmod = strtotime($lastmod);
            }
 
            if($lastmod == 0) {
                throw new Exception('Invalid last modification date supplied.');
            }
 
            $this->datetime->setTimestamp($lastmod);
            $el->appendChild( $xml->createElement('lastmod', $this->datetime->format(DateTime::W3C)) );
        }
 
        if(isset($priority) and is_float($priority)) {
            $priority = round($priority, 1);
            $el->appendChild( $xml->createElement('priority', (string)$priority ) );
        }
 
        if(isset($changefreq) && in_array($changefreq, self::$arChangeFreq)) {
            $el->appendChild( $xml->createElement('changefreq', $changefreq ) );
        }
 
        if(count($images) > 0) {
            $this->_enableImages();
            foreach($images as $image) {
                $img = $el->appendChild( $xml->createElement('image:image') );
 
                if(is_array($image)) {
                    if(isset($image['loc'])) {
                        $img->appendChild( $xml->createElement('image:loc', $image['loc']) );
                        isset($image['caption'])      ? $img->appendChild( $xml->createElement('image:caption', $image['caption']) )           : null;
                        isset($image['geo_location']) ? $img->appendChild( $xml->createElement('image:geo_location', $image['geo_location']) ) : null;
                        isset($image['title'])        ? $img->appendChild( $xml->createElement('image:title', $image['title']) )               : null;
                        isset($image['license'])      ? $img->appendChild( $xml->createElement('image:license', $image['license']) )           : null;
                    }
                } else {
                    $img->appendChild( $xml->createElement('image:loc', $image) );
                }
            }
        }
    }
 
    public function getDocument() {
        return $this->xmlDoc->saveXML();
    }
 
    public function __toString() {
        return $this->getDocument();
    }
 
    /* Добавляет пространство имён для картинок */
    private function _enableImages() {
        if(!$this->bImagesEnabled) {
            $this->xmlRoot->setAttribute('xmlns:image', self::IMAGES_NS);
            $this->bImagesEnabled = true;
        }
    }
 
    /*
    * Закодировать амперсанды, не повредив при этом HTML-сущности (а точнее повредить, но потом вернуть на место :))
    * Добавлено сюда только для самостоятельности класса
    */
    private static function _escapeAmp(&$str) {
        $str = str_replace('&', '&amp;', $str);
        $str = preg_replace('/&amp;(([a-z]+|([#][\dx]{1,10}));)/', '&$1', $str);
    }
}
1
Gauga
24 / 24 / 6
Регистрация: 04.07.2013
Сообщений: 260
18.08.2013, 21:10 29
Цитата Сообщение от nepster Посмотреть сообщение
.. все работает замечательно .. делал под себя, для меня очень удобно )
Можете доделать свою пагинацию так, чтоб она отображала перейти на первую страницу или в конец? Она была бы незаменима!
0
sqlnub
Заблокирован
16.10.2013, 13:37 30
Внеклассовая пока еще функция форматирования данных в хтмл тег. Насмотревшись на монструозные классы категории отображения, которые пристроить решительно невозможно, написал эту фишку которая в общем-то может одна, в последовательном применении, конечно, может сгенерить страницу без заголовка. Потому что в заголовках неформальные мета-теги и вообще выпадающий из схемы doctype.

Если есть нечто похожее, получше, интересно было бы посмотреть.

/*
На входе список аргументов по соглашению:
1-й всегда имя тега
2-й значение тега. Если тег подразумевается пустой - null обязателен.
затем атрибуты парами: имя - значение
если значение атрибута null - он будет пропущен целиком
атрибут длиной 0 - будет включен в тег
атрибуты типа checked, disabled, selected могут быть без пары
поэтому они по соглашению должны быть всегда последними
наличие такого атрибута означает что он true и в его значение
функция сама подставит его же имя, что соответствует спецификации
в функцию зашит список пустых тегов и дана ссылка откуда он взят

внутри каменты английскими буквами - так я пытаюсь каментить для себя

юзанье:

PHP
1
$var = tag('a', 'форум', 'href', 'http://www.cyberforum.ru/', 'title', 'Форум программистов');
HTML5
1
<a href="http://www.cyberforum.ru/" title="Форум программистов"</a>
PHP
1
$var = tag('img', null, 'src', 'http://www.cyberforum.ru/images/cyberforum_logo.jpg', 'alt', 'Лого');
HTML5
1
<img src="http://www.cyberforum.ru/images/cyberforum_logo.jpg" title="Лого" />
PHP
1
$check = tag('input', null, 'type', 'checkbox', 'name', 'checkitnow', 'value', '1', 'checked');
HTML5
1
<input type="checkbox" name="checkitnow" value="1" checked="checked"/>
*/

PHP
1
2
3
4
5
6
7
8
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
function tag() {
 
    $num = func_num_args();
    
    if($num < 2) 
        return '<del>ERROR TAG: TOO SHORT LIST</del>';
    
    $args = func_get_args();
    
    if(!$args[0])
        return '<del>ERROR TAG: NO ELEMENT NAME</del>';
 
    
    // check for an single (the last!) attribute like 'selected' 'checked' etc  
    // its name will be used as its value
    if($num % 2) 
        $args[] = $args[$num-1];
    
    $args[0] = strtolower($args[0]);
    
    $t = '<' . $args[0];
 
    // build attributes
    for($cnt = 2; $cnt < $num; $cnt += 2) {
        if($args[$cnt + 1] === null) continue;
        $t .= ' ' . $args[$cnt] . '="' . $args[$cnt+1] . '"';
    }
    
    // http://www.w3.org/TR/html-markup/syntax.html#void-element
    $void = in_array($args[0], array('area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'));
    
    if($void) // no text node, a void element 
        $t .=  ' />';
    else  // add text node
        $t .= '>' . $args[1] . '</' . $args[0] . '>';
        
    return $t;
    
}
0
nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
16.10.2013, 14:14 31
HTML5
1
<a href="http://www.cyberforum.ru/" title="Форум программистов"</a>
Чего то тут не хватает
0
Zvook
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
16.10.2013, 18:50 32
Цитата Сообщение от Даниэль Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?PHP 
echo getfilesize($_GET['name']); 
 
// Функция для определения размера 
function getfilesize($filename) 
{ 
  // Проверяем, существует ли файл 
  if(!file_exists($filename)) return "файл не существует"; 
  // Определяем размер файла 
  $filesize = filesize($filename); 
  // Если размер файл превышает 1024 байта, 
  // пересчитываем размер в Кбайты 
  if($filesize > 1024) 
  { 
    $filesize = (float)($filesize/1024); 
    // Если размер файл превышает 1024 Кбайта, 
    // пересчитываем размер в Мбайты 
    if($filesize > 1024) 
    { 
      $filesize = (float)($filesize/1024); 
      // Округляем дробную часть до 
      // первого знака после запятой 
      $filesize = round($filesize, 1); 
      return $filesize." Мб"; 
    } 
  } 
  else 
  { 
    return $filesize." байт"; 
  } 
} 
?>
Взято с [Ссылка удалена!]

Если хотите поделиться готовыми решениями, то выкладывайте их в эту тему, а не ссылки на Ваш форум и сайт
Жесть какая .....
Функция возвращает либо мегабайты, либо байты, либо "файл не существует"
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16754 / 6645 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
16.10.2013, 23:04 33
Цитата Сообщение от sqlnub Посмотреть сообщение
tag
все это делается при помощи нормальных ассоциативных массивов, а не при помощи бессвязных наборов слов. Почему я или кто-то еще должен всегда помнить, что надо писать именно так
PHP
1
tag('a', 'форум', 'href', 'http://www.cyberforum.ru/', ....
а не, к примеру, так
PHP
1
tag('a', 'href', 'http://www.cyberforum.ru/', 'форум', ....
? К чему здесь использование func_num_args и func_get_args ? Ведь именно из-за них ни один редактор кода (в том числе и IDE) не смогут программисту подсказать, какие аргументы можно передать в функцию. Почему я не могу вывести просто тег <br>, а обязан указать второй аргумент? Почему я при написании br получу в любом случае xhtml-овский тег? Что человеку делать, если он потерял это ваше "соглашение" ?

Зачем присваивать логическое значение в переменную $void, если она нужна только для проверки условия на выполнение?
Что будет при выполнении такого кода
PHP
1
tag(true, false)
PHP
1
tag(true, array())
PHP
1
tag(true, new StdClass())
PHP
1
tag(new StdClass(), false);
0
sqlnub
Заблокирован
24.10.2013, 09:57 34
Цитата Сообщение от KOPOJI Посмотреть сообщение
все это делается при помощи нормальных ассоциативных массивов
Которые еще сформировать надо. При чем тут вообще IDE и прочая тряхомудия. Я же четко указал на принципиальное отличие от нее. Это функция на соглашение. Если вы не согласны с предложенными соглашениями, то не пользуетесь. Вот и все.

Ну хорошо, вот самый простой пример соглашения: нельзя вымени файла использовать символы ? / : и еще какие-то. Вы не согласны? Не пользуйтесь файловой системой. Все просто. RFC все тотально построены на такого рода соглашениях.

Разумеется для облегчения кода половины проверок нет. Я знаю вы фанат проверок и с удовольствием будете проверять

PHP
1
2
$a = 2;
if($a != 2) trow new exception ('а не равно 2!');
Но я предложил меру, а вы - крайность.

Добавлено через 8 минут

Зашел сюда добавить простой эффективный класс коннекта как расширение mysqli. Которому на питание нужны опции из объекта с собственными умолчаниями. Вы можете поменять умолчания, или, как у меня сделано, закодировать опции коннекта через номер переключателя.

PHP
1
2
3
4
5
6
7
8
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
<?php
class Connect_Options {
 
    public $host ='localhost';
    public $user ='root';
    public $pass = '';
    public $dbname = 'unknown';
    public $port = 3306;
    public $sock = false;
 
    function __construct($_cur) {
    
        switch($_cur) {
 
            case 0:
                $this->host = 'ччччччч'; 
                $this->user = 'root'; 
                $this->pass = ''; 
                $this->dbname = 'чччччч';
            break;
            
            case 1:
        
            break;
            
            case 2:
                
            break;
            
        
        }
    
    }
 
}
 
?>
Коннект. Где-нибудь define('CONNECT_ENCODING', 'utf8'); или замените буквально.

PHP
1
2
3
4
5
6
7
8
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
52
53
54
55
56
57
58
<?php
 
class Link extends mysqli {
        
    public function __construct($op) {
 
        mysqli_report(MYSQLI_REPORT_STRICT); 
 
        try {
        
            @parent::__construct($op->host, $op->user, $op->pass, $op->dbname, $op->port, $op->sock);
            
            if($this->connect_errno) throw new mysqli_sql_exception($this->error);
            
            if (!$this->set_charset(CONNECT_ENCODING)) throw new mysqli_sql_exception($this->error);
    
            $this->host = $op->host;
            $this->db = $op->dbname;
        
        } catch(mysqli_sql_exception $e) {
        
            echo $e->getMessage();
            exit;   
            
        }
        
    }
 
    public function query($query) {
 
        $rst = parent::query($query);
 
        if($this->error) {
            throw new mysqli_sql_exception($this->error);
        }
        return $rst;
    }
 
    
    public function multi_query($query) {
 
        if (is_array($query)) $multi_query = implode('; ', $query);
        else $multi_query = $query . ';';
        
        $i = 0;
        if (parent::multi_query($multi_query)) {
            do { $i++;
            } while (parent::more_results() && parent::next_result());
        }
        
        if ($this->errno) {
            throw new Exception('Multi Query: ошибка в строке ' . $i . "\n" . '<br />');
        }
        
    }
    
}
?>

enjoy

PHP
1
$link = new Link(new Connect_Options(0));
Добавлено через 9 минут
----

Про tag

Цитата Сообщение от nepster Посмотреть сообщение
HTML5
1
<a href="http://www.cyberforum.ru/" title="Форум программистов"</a>
Чего то тут не хватает
Запросто. Это не копипаста, это я вручную соображал.

Вот так может выглядеть в применении

PHP
1
$table[] = tag('tfoot', tag('tr', tag('td', $table_info, 'colspan', $this->qinfo->field_count)));
Если я сюда сейчас правильные арраи воткну, или верные IDE члены, халява немедленно пропадет. В которой весь цимес.

Добавлено через 4 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
Почему я не могу вывести просто тег <br>, а обязан указать второй аргумент?
Потому что вы можете вывести тег <br> вот так: echo '<br>'; И вообще я как-то не думал о <br> потому что в дизайне их у меня ни одного нет.

Добавлено через 33 минуты
А еще вы обязаны окружать имя поля грависами. Или не обязаны?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16754 / 6645 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
24.10.2013, 21:00 35
Цитата Сообщение от sqlnub Посмотреть сообщение
Я знаю вы фанат проверок и с удовольствием будете проверять
Клевета, не знаете. Я не фанат идиотских проверок. Это вы до сих пор не знаете разницу между преждевременной оптимизацией и исправлением ошибок.

Не по теме:

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

0
sqlnub
Заблокирован
25.10.2013, 15:30 36
В общем предлагаю о мере. Коню ясно эта мулька сугубая, но зато полегче в стопицот раз монструозных view'ов от одного view'а которых хочется переквалифицироваться в дворники.

Когда я ее нарисовал, сперва в 5 строк, сразу почуйствовал большое облегчение. Чем отплатил развив ее до 20 строк, или сколько там за вычетом пробелов. Дальше - не буду. Потому что мера такая.
0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
21.11.2013, 13:08 37
Здравствуйте, ни у кого не найдется (может кто то хочет проверить свои знания и сделает сам) скрипт для создания скриншотов стороннего сайта, как например вот этот сервис www.s-shot.ru

только интересует рабочий скрипт, а не годовалой давности с 10 ошибками
0
cellse
65 / 65 / 20
Регистрация: 12.08.2013
Сообщений: 295
06.01.2014, 00:00 38
VLK, http://habrahabr.ru/post/62965/
1
Camaro396
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
07.08.2014, 17:56 39
Если вдруг кому понадобится перевести формат даты для ф-ии date в формат ICU (например, для IntlDateFormatter).
Всё неподдерживаемое вырезается.

PHP
1
2
3
4
5
6
7
8
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
function translateDateFormatToICUPattern($format) {
    $map = [
        "'" => "''",
        'd' => 'dd',
        'D' => 'eee',
        'jS' => 'd',
        'j' => 'd',
        'l' => 'eeee',
        'N' => 'c',
        'S' => '',
        'w' => 'e',
        'z' => 'D',
        'W' => 'w',
        'F' => 'MMMM',
        'm' => 'MM',
        'M' => 'MMM',
        'n' => 'M',
        't' => '',
        'L' => '',
        'o' => 'Y',
        'y' => 'yy',
        'Y' => 'y',
        'A' => 'a',
        'B' => '',
        'g' => 'h',
        'G' => 'H',
        'h' => 'hh',
        'H' => 'HH',
        'i' => 'mm',
        's' => 'ss',
        'u' => '',
        'e' => 'vv',
        'I' => '',
        'O' => 'xx',
        'P' => 'xxx',
        'T' => 'z',
        'Z' => '',
        'c' => "y-MM-dd'T'HH:mm:ssxxx",
        'u' => '',
        'r' => 'eee, dd MMM y HH:mm:ss xx'
    ];
 
    return strtr($format, $map);
}
0
Para bellum
Эксперт PHP
4152 / 3087 / 999
Регистрация: 06.01.2011
Сообщений: 9,021
24.04.2015, 08:29 40
Представляю Вашему вниманию класс постраничной навигации:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
<?php
    /*
    * Класс для генерации постраничной навигации
    */
    class Pagination
    {
        /**
        * 
        * @var Активных ссылок навигации на страницу.
        * Т.е. ссылок, помимо текущей (активной) ссылки и ссылок влево-вправо.
        * 
        */
        private $max = 6;
        
        /**
        * 
        * @var Ключ для GET, в который пишется номер страницы
        * 
        */
        private $index = 'page';
        
        /**
        * 
        * @var Текущий GET-запрос
        * 
        */
        private $query;
        
        /**
        * 
        * @var Текущая страница
        * 
        */
        private $current_page;
        
        /**
        * 
        * @var Общее количество записей
        * 
        */
        private $total; 
        
        /**
        * 
        * @var Записей на страницу
        * 
        */
        private $limit;
        
        /**
        * Запуск необходимых данных для навигации
        * @param integer $total - общее количество записей
        * @param integer $limit - количество записей на страницу
        * 
        * @return
        */
        public function __construct( $total, $limit )
        {
            # Устанавливаем общее количество записей
            $this->total  = $total;
            
            # Устанавливаем количество записей на страницу
            $this->limit  = $limit;
            
            # Устанавливаем количество страниц
            $this->amount = $this->amount();
            
            # Вызываем метод установки текущей страницы
            $this->setCurrentPage();
            
            # Вызываем метод установки текущего GET-запроса
            $this->setQueryString();
        }
        
        /**
        *  Для вывода ссылок
        * 
        * @return HTML-код со ссылками навигации
        */
        public function get()
        {
            # Для записи ссылок
            $pagination = null;
            
            # Получаем ограничения для цикла
            $limits = $this->limits();
 
            # Генерируем ссылки
            for($page=$limits[0]; $page<=$limits[1]; $page++)
            {
                # Формируем статус ссылки
                $status = $page == $this->current_page ? 'active' : null;
                    
                # Заносим ссылку
                $pagination .= $this->generateHtml($page, null, null, $status);
            }
            
            # Если текущая страница не первая
            if($this->current_page > 1){
                # Создаём ссылку "Предыдущая"
                $pagination = $this->generateHtml($this->current_page - 1, '&lt;', 'Предыдущая') . $pagination;
                
                # Создаём ссылку "Первая"
                $pagination = $this->generateHtml(1, '&lt;&lt;', 'Первая') . $pagination;
            }
            
            # Если текущая страница не первая
            if($this->current_page < $this->amount){
                # Создаём ссылку "Следующая"
                $pagination .= $this->generateHtml($this->current_page + 1, '&gt;', 'Следующая');  
                
                # Создаём ссылку "Следующая"
                $pagination .= $this->generateHtml($this->amount, '&gt;&gt;', 'Последняя');  
            }
            
            # Оборачиваем ссылки
            $pagination = '<ul class="pagination">'. $pagination .'</ul>';
 
            # Возвращаем ссылки
            return $pagination;
        }
        
        /**
        * Для получения, откуда начинать выборку
        * 
        * @return integer
        */
        public function skip(){
            return 
                $this->current_page * $this->limit - $this->limit;
        }
        
        /**
        * Для получение ограничения выборки
        * 
        * @return integer
        */
        public function take(){
            # Получаем, откуда начинаем
            $skip = $this->skip();
            
            # Возвращаем ограницение
            return
                $skip + $this->limit > $this->total ? $this->total - $skip : $this->limit;
        }
        
        /**
        * Для генерации HTML-кода ссылки
        * @param string $query - текущий GET-запрос
        * @param integer $page - номер страницы
        * 
        * @return
        */
        private function generateHtml( $page, $text=null, $title=null, $status=null ){
            # Если текст ссылки не указан
            if( is_null($text) )
                # Указываем, что текст - цифра страницы
                $text = $page;
            
            # Формируем ссылку
            $query = $this->index .'='. $page;
            
            # Формируем строку запроса (после вопроса)
            $query = $this->query ? $this->query .'&'. $query : $query;
            
            # Формируем статус ссылки
            $status = $status ? 'class="'. $status .'"' : null;
                
            # Формируем HTML код ссылки и возвращаем
            return 
                '<li '. $status .'><a href="?'. $query .'" title="'. $title .'">'. $text .'</a></li>';
        }
        
        /**
        *  Для получения, откуда стартовать вывод ссылок
        * 
        * @return массив с началом и концом отсчёта
        */
        private function limits()
        {
            # Вычисляем ссылки слева (чтобы активная ссылка была посередине)
            $left = $this->current_page - round($this->max / 2, 0, PHP_ROUND_HALF_DOWN);
 
            # Вычисляем начало отсчёта
            $start = $left > 0 ? $left : 1;               
 
            # Если впереди есть как минимум $this->max страниц
            if($start + $this->max <= $this->amount)
                # Назначаем конец цикла вперёд на $this->max страниц или просто на минимум
                $end = $start >= 1 ? $start + $this->max : $this->max;
            else{
                # Конец - общее количество страниц
                $end = $this->amount;
 
                # Начало - минус $this->max от конца
                $start = $this->amount - $this->max > 0 ? $this->amount - $this->max : 1;
            }
            
            # Возвращаем
            return [$start, $end];
        }
 
        /**
        * Для установки текущей страницы
        * 
        * @return
        */
        private function setCurrentPage()
        {
            # Получаем номер страницы
            $this->current_page = isset($_GET[$this->index]) ? (int) $_GET[$this->index] : 1;
            
            # Если текущая страница боле нуля
            if($this->current_page > 0)
            {
                # Если текунщая страница меньше общего количества страниц
                if($this->current_page > $this->amount)
                    # Устанавливаем страницу на последнюю
                    $this->current_page = $this->amount;
            }
            else
                # Устанавливаем страницу на первую
                $this->current_page = 1;
        }
        
        /**
        * Для получения и установки текущего GET-запроса
        * 
        * @return
        */
        private function setQueryString(){
            # Получаем параметры текущего запроса
            $query = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_QUERY );
            
            # Разбираем строку запроса
            parse_str( $query, $params );
            
            # Удаляем значение страницы, если есть
            unset( $params[$this->index] );
            
            # Формируем запрос
            $this->query = http_build_query( $params );
        }
        
        /**
        * Для получеия общего числа страниц
        * 
        * @return число страниц
        */
        private function amount()
        {
            # Делим и возвращаем
            return
                ceil( $this->total / $this->limit );
        }
    }

Он совместим с Twitter Bootstrap, поэтому не придётся специально для него прописывать стили, если Вы используете bootstrap для вёрстки. Если же Вы не используете bootstrap - то Вам достаточно будет прописать стили в Вашем CSS-файле для этих классов:
CSS
1
2
3
4
5
6
7
8
9
10
11
12
.pagination{
    /* Стиль для общего блока с постраничной навигацией */
}
.pagination li{
    /* Стиль для тегов LI (нужно задать float) */
}
.pagination .active{
    /* Стиль для тега LI с текущей ссылкой */
}
.pagination a{
    /* Стиль для ссылок */
}
Пользоваться классом очень просто, просто нужно передать в конструктор класса общее количество записей и количество записей на страницу. Пример:
PHP
1
2
3
4
5
6
7
8
9
# Получаем количество записей
$stmt     = $db->query('SELECT COUNT(*) `amount` FROM `table`')->execute();
$amount = $stmt->fetch(PDO::FETCH_ASSOC)['amount'];
 
# Создаём объект класса постраничной навигации
$pagination = new Pagination($amount, 10);
 
# Выводим ссылки навигации
echo $pagination->get();
Для того, чтобы сделать выборку из базы данных относительно текущей страницы, делаем так:
PHP
1
2
3
4
5
6
7
8
# Получаем записи для данной страницы
$stmt  = $db->query('SELECT * FROM `table` LIMIT ?, ?');
$result = $stmt->execute([
    $pagination->skip(),
    $pagination->take(),
]);
 
# Далее можно работать с $result
Как видите, нам не нужно работать с GET, класс навигации сделает всё за нас. Нам лишь нужно указать при выборке смещение ($pagination->skip()) и количество записей для выборки ($pagination->skip()).

Всё .
3
24.04.2015, 08:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2015, 08:29

Обмен информацией с Web-сервером
Создайте веб-приложение, которое формирует возрастающую последовательность из...

Обмен данными между процессами
Здравствуйте! Задача такая: есть скрипт на php который постоянно в памяти и...

Обмен-валюта через ВебМани
как создать скрипты обмен-валюта через ВебМани? Моете подсказать, где может...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru