Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помощь по проекту

 PHP.SU

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


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

> Описание: Сократить или нет
Ammy
Отправлено: 08 Января, 2010 - 16:15:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Имеется код, обрабатывающий входящие POST данные, и формирующий массив исходя из кол-ва помеченных checkbox'ов на странице. Есть ли ему более производительная замена? Разумеется, на ваш взгляд.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.             $options = array('dcore', 'idle', 'jcache', 'hle', 'jrec', 'intpret', 'ttco', 'quant', 'dspt');
  4.             $extract = array();
  5.  
  6.             foreach ($options as $key => $value) {
  7.  
  8.                 if (isset($_POST[$value]) && $_POST[$value] == 'on') $extract[$value] = 'on';
  9.  
  10.             }
  11.  
  12.        
  13.  
  14.             echo serialize($extract); // подготовка для занесения в базу
  15.  
  16.  

(Отредактировано автором: 08 Января, 2010 - 16:35:23)

 
 Top
Ch_chov
Отправлено: 08 Января, 2010 - 16:46:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)





(Добавление)
Если нужно, что бы ключами массива были значения $options то:
 
 Top
Ammy
Отправлено: 08 Января, 2010 - 17:03:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Спасибо вам, здорово (суперски) составили! ::smile24.gif:: Первой функцией (array_keys) выбрали все ключи из $_POST массива, затем вычислили схождение массивов $_POST и $options, используя опять таки всего одну функцию, имя которой array_intersect(), тем самым получив нужный в данном случае результат! Гениальный подход к проблеме! Ещё раз благодарю!
 
 Top
Ammy
Отправлено: 09 Января, 2010 - 10:50:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Ниндзя Здесь было сообщение. Всё решилось автоматически, хотя проблема была аномального характера.

Код:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $file = 'file0.txt';
  4.  
  5.     if (file_exists($file)) {
  6.  
  7.         $num = (int) str_replace('file', '', basename(array_pop(glob('*.txt')), '.txt'));
  8.         echo $file = 'file' . ($num + 1) . '.txt';
  9.  
  10.     }
  11.  
  12.     $h = fopen($file, "w+");
  13.     fwrite($h, $data);
  14.     fclose($h);
  15.  
  16.  

(Отредактировано автором: 09 Января, 2010 - 10:58:02)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Января, 2010 - 11:02:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Выведите $num
Есть мнение, что последний элемент массива не максимальный fileN, и переписывается что-то из существующих.

ну, тем не менее, всё равно проверьте сортировку массива.

(Отредактировано автором: 09 Января, 2010 - 11:03:46)



-----
PostgreSQL DBA
 
 Top
Ch_chov
Отправлено: 09 Января, 2010 - 11:06:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




PHP:
скопировать код в буфер обмена
  1. $file = 'file' . ($num + 1) . '.txt';
 
 Top
Ammy
Отправлено: 09 Января, 2010 - 11:16:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Проблема решилась немного раньше, но тем не менее спасибо вам! Не хватало именно скобок, а без них имя будущего файла получалось как "1.txt". Улыбка
 
 Top
Ch_chov
Отправлено: 09 Января, 2010 - 11:21:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Если файлы нумеруются по порядку, то можно просто их посчитать:
 
 Top
movEAX
Отправлено: 09 Января, 2010 - 11:24:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




PHP:
скопировать код в буфер обмена
  1. $file = 'file0.txt';
  2. is_file($file) or die('Not found '.$file);
  3. $f = substr(array_pop(glob('file*.txt')),4) + 1;
  4.  
  5. file_put_contents('file'.$f.'.txt', $data);

(Отредактировано автором: 09 Января, 2010 - 11:29:25)



-----
армия.. самое убогое место
 
 Top
Ammy
Отправлено: 09 Января, 2010 - 11:33:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Ch_chov, да, по порядку. Отличный вариант! Улыбка Мне понравилась замена трёх функций fopen(), fwrite() и fclose() одной file_put_contents(), а так же отказ от прилегающих: str_replace, basename, array_pop. Получилось более короче и производительнее, чем у меня.

movEAX, ваш вариант тоже очень классный. Выбрали последний элемент массива, задав подходящий шаблон, и выделили нужное в подстроке. И опять же очень кратко. Улыбка

Спасибо вам!!!

(Отредактировано автором: 09 Января, 2010 - 11:45:21)

 
 Top
Ammy
Отправлено: 11 Января, 2010 - 20:35:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Описываю создание регистрации / аутентификации в виде урока, и столкнулась с одной ранее не попадавшейся проблемой, которую пока решить не смогла, потому что проблема демонстративно делает show/hide при незначительных изменениях: небольшой набросок:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $action = $_GET['do'];
  4.  
  5. if ($action == 'register') {
  6.  
  7.     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  8.    
  9.           // обработчик формы
  10.  
  11.     } else {
  12.  
  13.           // форма
  14.  
  15.     }
  16.  
  17.  die(); // период вымирания
  18. }
  19.  
  20. if ($action = 'login') {
  21.  
  22.  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  23.    
  24.           // обработчик формы
  25.  
  26.     } else {
  27.  
  28.           // форма
  29.  
  30.     }
  31.  
  32.  die(); // период вымирания
  33. }
  34.  
  35.  
  36. if ($action = 'logout') {
  37.  
  38.  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  39.    
  40.           // обработчик формы
  41.  
  42.     } else {
  43.  
  44.           // форма
  45.  
  46.     }
  47.  
  48.  die(); // период вымирания
  49. }
  50.  
  51. // Много, знаю, но от использования switch-case отказалась, захотелось так
  52.  


Проблема:
.php?do=register - работает
.php?do=login - работает
.php?do=logout - не работает, и показывает то, что предыдущая

Аномалия. Ниндзя
(Добавление)
elseif ветвления использовать не хочется - не красиво!

(Отредактировано автором: 11 Января, 2010 - 20:47:46)

 
 Top
Мелкий Супермодератор
Отправлено: 11 Января, 2010 - 20:45:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Вопрос: почему .php?do=logout а параметр берёте $_GET['action']?

И решение вопроса: первое условие - сравнение, 2 других - присваивание!


-----
PostgreSQL DBA
 
 Top
Ammy
Отправлено: 11 Января, 2010 - 20:47:10
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Нет-нет, я просто здесь напутала, когда переписывала (вручную)
(Добавление)
Точно, благодарю! А то 10 минут на сонную голову искала ошибку. Значит, пора идти спать.

(Отредактировано автором: 11 Января, 2010 - 20:51:59)

 
 Top
Ammy
Отправлено: 11 Января, 2010 - 22:56:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Закончила код пуленепробиваемой регистрации! Хотелось бы, чтобы тихо потестили, пока урок заканчиваю. Champion, поддержишь продукт?
(Добавление)
Ушла спать. Ниндзя
 
 Top
EuGen Администратор
Отправлено: 11 Января, 2010 - 23:01:50
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ammy пишет:
пуленепробиваемой регистрации

не бывает программ, которые нельзя сломать, но бывают такие, взлом которых дороже самой цели взлома (хакеры-энтузиасты, создающие вещи вроде myDoom - исключение).
А тест "по-тихому" может и не дать желаемых результатов


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Наработки по собственным проектам »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB