PHP.SU

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

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

> Найдено сообщений: 18
nooblamer Отправлено: 02 Декабря, 2016 - 21:25:25 • Тема: Вопрос по edit 1 • Форум: Вопросы новичков

Ответов: 4
Просмотров: 273
ivan_zudilov если я правильно понял, то так:

PHP:
скопировать код в буфер обмена
  1. $input = explode(' ', 'echo 123 cmd'); //во второй параметр вставлять GET/POST переменную
  2. $allowed = array('echo', 'cmd'); // известные значения
  3.  
  4. $del_allowed = array_diff ($input, $allowed);
  5.  
  6. foreach ($del_allowed as $key => $val)
  7. {
  8.         echo $val;     
  9. }
nooblamer Отправлено: 02 Декабря, 2016 - 20:05:42 • Тема: Изменение типа переменной • Форум: Вопросы новичков

Ответов: 6
Просмотров: 258
squirr так объявляется строковая переменная: $var = ''; так цифровая: $var = 0;

Код этого метода еще покажите getCycleOfArticles
nooblamer Отправлено: 02 Декабря, 2016 - 16:26:36 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
NeuroZ пишет:
Так тогда у вас как раз первый случай: "роутинг с привязкой по правилам маршрутизации компонентов"
Получается можно роутить вообще без БД Улыбка
(Добавление)
Впрочем переделывать роутинг будет смысл только тогда, когда вы сами почувствуете, что он дает просадки в скорости или не удовлетворяет каким-нибудь специфическим задачам


Так я и роутил изначально без БД по правилам, но мне это не подходит как выяснилось позже, так как добавился функционал, где удобнее именно так, как сделал роутить)

Скорость с роутингом из БД практически никак не влияет, 0.003 секунды разве можно ощутить?) А тестировал на 400к. записей в другой таблице по строковому полю, но думаю и с миллионом записей скорость не на много упадёт, раз на 400к все нормально, тут же не все правила подгружаются, а только одно на документ.

Ой, даже не 0.003, а 0.0004 сек)
nooblamer Отправлено: 02 Декабря, 2016 - 14:42:23 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
NeuroZ пишет:
А еще не очень хорошо если есть страница site.ru/catalog/items/page/2/
но при этом нет например страницы site.ru/catalog/items/
На сколько я знаю поисковики это не сильно любят
(Добавление)
А отсюда вытекает, что иметь роутинг с привязкой по правилам маршрутизации компонентов лучше, чем иметь "свободно редактируемый" роутинг


так структуру ЧПУ можно выстроить правильно, у меня во всяком случае она правильно выстраивается, на уровне компонента ссылки генерируются так: catalog, на уровне категории: catalog/cat, на уровне подкатегории: catalog/cat/subcat, и на уровне документа: catalog/cat/subcat/docname, так что всё правильно и по уровню вложенности.

Мне удобнее иметь именно такой роутер, нагрузок на базу никаких почти нет, поле с ЧПУ в таблице алиасов сделал индексируемым, запрос выполняется 0.003 сек Улыбка
nooblamer Отправлено: 02 Декабря, 2016 - 14:35:15 • Тема: Внести в 2-ую таблицу значения 1-ой • Форум: Вопросы новичков

Ответов: 3
Просмотров: 167
leshiy

PHP:
скопировать код в буфер обмена
  1. $result5 = mysql_query("insert into t_title (ti_date,ti_title,t_login)
  2. values ('".date("Y-m-d H:i:s")."',
  3. '".$_POST[ti_title]."','".$_SESSION[log]."')");
  4.  
  5. $last_insert_id = mysql_insert_id();
  6.  
  7. $result = mysql_query("insert into tickets (date,login,message,post)
  8. values ('".date("Y-m-d H:i:s")."',
  9. '".$_SESSION[log]."','".$_SESSION[comment_user_text]."','".$last_insert_id ."')");
nooblamer Отправлено: 02 Декабря, 2016 - 13:26:31 • Тема: Дынные из txt файла в БД и затем в таблицу на HTML страницу • Форум: Вопросы новичков

Ответов: 15
Просмотров: 756
Gost12345 так значит файл data.txt не правильно оформлен изначально, он должен быть в таком формате:
CODE (htmlphp):
скопировать код в буфер обмена
  1. название|цена|количество|цвет
  2. Роза|100|6|красный
  3. Пион|150|50|красный
  4. Роза|80|50|желтый
  5. Пион|100|20|желтый
  6.  


не должно быть подчеркиваний после каждой строки, да и лишние | после последнего столбца не нужны, но это не критично, а вот подчеркиваний быть не должно.

мой пример на основе файла, который привёл выше формирует запрос так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. INSERT INTO `Rosa`(`id`, `name`, `price`, `count`, `color`) VALUES (NULL, 'Роза', '100', '6', 'красный '),(NULL, 'Пион', '150', '50', 'красный '),(NULL, 'Роза', '80', '50', 'желтый '),(NULL, 'Пион', '100', '20', 'желтый');


Ошибок никаких нет при этом, да и быть не должно, чекайте свой файл data.txt

Но если нужно работать с файлом из 1-го поста, то можно сделать так:

PHP:
скопировать код в буфер обмена
  1. //тут открываем соединени с БД
  2.  
  3. $file=file("data.txt");
  4.  
  5. $i=0;
  6. $sql = 'INSERT INTO `Rosa`(`id`, `name`, `price`, `count`, `color`) VALUES ';
  7. foreach($file as $str_num => $str)
  8. {
  9. if($i>0) //пропускаем 1-ю строку
  10. {
  11.         if (!strstr($str, '---'))
  12.         {
  13.                 $str = explode("|", $str);
  14.                 $sql .= "(NULL, '".trim($str[0])."', '".trim($str[1])."', '".trim($str[2])."', '".trim($str[3])."'),";
  15.         }
  16. }
  17. $i++;
  18. }
  19. $sql = rtrim($sql, ',').';';
  20.  
  21.  
  22.  
  23. //id должен быть AUTO_INCREMENT
nooblamer Отправлено: 02 Декабря, 2016 - 13:13:22 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
miketomlin я уже решил то, что мне надо было, на входе получаю ЧПУ урл, вытаскиваю из базы json объект по этому улру, и работаю с ним, на мой взгляд это куда удобнее, чем работать с параметрами из ЧПУ пути, так как отпадает необходимость привязываться к структуре ЧПУ урл, урл может иметь такой, например, вид: blalba/blabla/catname/subcatname /articleblabla для любого компонента и, например, параметра id документа, а если работать с параметрами в самом ЧПУ урла, то нужно было бы эксплодить его и быть привязанным к явному обозначению в первом параметре, как к компоненту (blalba/), во втором к опции компонента (blalba/) и т.д., а с моим примером нет этой необходимости, урл может быть любым для любого компонента, опции, параметров. Улыбка

И проблему дублей страниц тоже предусмотрел, в случае если не находится запись по ЧПУ, отдаю хедер 404 и показываю страницу ошибки, а ЧПУ и json объект формируется еще при добавлении/редактировании документа, поэтому там изначально никаких ошибок нет, и если ЧПУ найден, то значит всё в порядке и дальше. Но благодарю! Улыбка
nooblamer Отправлено: 30 Ноября, 2016 - 22:36:27 • Тема: Помогите!!!Калькулятор с помощью формы • Форум: Напишите за меня, пожалуйста

Ответов: 4
Просмотров: 91
Aleksei_Lymar пишет:
Как можно привязать checkbox к функции if, что бы при выборе нужной ячейки обсчитывалась нужная функция???

echo '<input type="checkbox" name="operation" checked value="+"/> + </Br>';
if ($operation="on")
{
$result = $a + $b;
}
echo '<input type="checkbox" name="operation" checked value="-"/> - </Br>';
if ($operation="on")
{
$result = $a - $b;
}
echo '<input type="checkbox" name="operation" checked value="*"/> / </Br>';
if ($operation="on")
{
$result = $a / $b;
}
echo '<input type="checkbox" name="operation" checked value="/"/> * </Br>';
if ($operation="on")
{
$result = $a * $b;
}


Улыбка

PHP:
скопировать код в буфер обмена
  1. ini_set('display_errors',0);
  2.  
  3. $a = intval($_POST['a']);
  4. $b = intval($_POST['b']);
  5.  
  6. $operation = $_POST['operation'];
  7.  
  8.  
  9. echo '<form action="/t.php" method="post">';
  10.  
  11. echo '<input type="text" name="a" value="'.$a.'"/> <input type="text" name="b" value="'.$b.'"/><br>';
  12.  
  13. echo '<input type="radio" name="operation" value="+"/> + </Br>';
  14. if ($operation == '+')
  15. {
  16. $result = $a + $b;
  17. }
  18. echo '<input type="radio" name="operation" value="-"/> - </Br>';
  19. if ($operation == '-')
  20. {
  21. $result = $a - $b;
  22. }
  23. echo '<input type="radio" name="operation" value="/"/> / </Br>';
  24. if ($operation == '/')
  25. {
  26. $result = ($a/$b);
  27. }
  28. echo '<input type="radio" name="operation" value="*"/> * </Br>';
  29. if ($operation == '*')
  30. {
  31. $result = $a * $b;
  32. }
  33.  
  34.  
  35. echo '<input type="submit" value="считать">';
  36.  
  37. echo '</form>';
  38.  
  39.  
  40. echo $result;
nooblamer Отправлено: 30 Ноября, 2016 - 14:01:14 • Тема: Дынные из txt файла в БД и затем в таблицу на HTML страницу • Форум: Вопросы новичков

Ответов: 15
Просмотров: 756
Gost12345 пишет:
В начале файла подключения к базе
"config.php"в котором прописано подключения, здесь все работает. Только ошибку теперь выдает
Notice: Undefined offset:1 ...
Чего то ему не нравиться в $srt[1] в Insert?



А так:

PHP:
скопировать код в буфер обмена
  1. //тут открываем соединени с БД
  2.  
  3. $file=file("data.txt");
  4.  
  5. $i=0;
  6. $sql = 'INSERT INTO `Rosa`(`id`, `name`, `price`, `count`, `color`) VALUES ';
  7. foreach($file as $str_num => $str)
  8. {
  9. if($i>0) //пропускаем 1-ю строку
  10. {
  11. $str = explode("|", $str);
  12. $sql .= "(NULL, '".$str[0]."', '".$str[1]."', '".$str[2]."', '".$str[3]."'),";
  13. }
  14. $i++;
  15. }
  16. $sql = rtrim($sql, ',').';';
  17.  
  18.  
  19. //id должен быть AUTO_INCREMENT
nooblamer Отправлено: 30 Ноября, 2016 - 13:42:56 • Тема: Подскажите пожалуйста по БЭК-энду • Форум: Вопросы новичков

Ответов: 2
Просмотров: 146
Apache должен быть настроен тогда на интерпретирование html файлов как php, проще расширение файла сделать .php, тогда код будет интерпретироваться.

И зачем тут использовать do while?

PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. $link = mysql_connect('localhost','root','pass') or die("Ошибка соединения с БД: " . mysql_error());
  4. mysql_select_db('db_name');
  5.  
  6. $result = mysql_query("SELECT * FROM dbo", $link);
  7.  
  8. while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  9. {
  10.         printf ("<div class='commentBlock'>\n<div class='name'>%s</div>\n<div class='comment'>%s</div></div>\n", $row["name"], $row["comment"]);
  11. }
  12.  
  13. ?>
nooblamer Отправлено: 29 Ноября, 2016 - 12:38:36 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
NeuroZ пишет:
nooblamer пишет:
А если страниц будет много, например, 10 к и более, запрос же будет долго выполняться...

Ну а в JoomlaSEF разве не по такой же логике работает?

Я, конечно, не знаю, что у вас за велосипед и какие задачи он(а) должна решать... Но я бы для удобства использования таблиц - использовал отдельное поле для хранения GET в виде json, отдельно ЧПУ линк, отдельно линк без ЧПУ. + может какие-то служебные данные типа кастомных мета-данных или еще что-либо... И конечно кэшировал бы всё, что существенно влияло бы на скорость обработки таких url.


JoomSEF не знаю все ли правила сразу подгружает, если все, то это не логично конечно.

А на счёт вашего совета, благодарю, так и поступлю, нет смысла по идее хранить линк с гет параметрами, можно всё в json объекте хранить, и ЧПУ в отдельном поле, можно было бы и титлы, кейвордсы с дескрипшн хранить тут же, но смысла не вижу, так как они уже хранятся в таблицах компонентов, и в шаблон из компонента подставляются. Сделаю в общем отдельную таблицу алиасов, и буду все правила хранить в ней, обращаться по 1-му запросу на документ, парсить json, его, кстати, можно загнать и в массив GET, чтобы получилось то, как в JoomSEF реализовано)) но не буду, смысла в этом не вижу, просто с объектом json и буду дальше работать. Плюсанул бы вам, но форум говорит, что недостаточно для этого отправленных сообщений. Улыбка
nooblamer Отправлено: 29 Ноября, 2016 - 11:46:49 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
NeuroZ пишет:
Палка о 2 концах: либо используйте БД (но тогда будут просадки при большом кол-ве страниц), и JoomlaSEF не застрахована от этого как и любое приложение работающее с ЧПУ через БД. (а сама реализация - уже дело вашей фантазии)
Либо использовать правила роутинга для вашей CMS (будет выигрывать в скорости перед БД)
(Добавление)
А у вас получается задача:
Хочу чтобы сайт грузился за 1 сек, при этом там 5 слайдров с неограниченным числом картинок с разрешением в 4к, и все это работало на бесплатном хостинге при посещении 100к уников
Ну в общем аллегорию вы поняли...

Ну в JoomSEF вроде не возникает проблем с большим количеством страниц, думаю, что правила перенаправлений нет смысла грузить сразу все, зачем это, когда можно при обращении по ЧПУ вытащить 1 правило, и уже с ним работать?
Сейчас пришла мысль, вытаскивать по ЧПУ из базы ссылку с гет параметрами, парсить их, и заносить в массив, и уже с ним работать в компонентах, буду пробовать в общем)
nooblamer Отправлено: 29 Ноября, 2016 - 11:26:09 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
Sail пишет:
nooblamer пишет:
перенаправления ссылок с параметрами на ЧПУ, но при этом, чтобы в скриптах были доступны GET/POST переменные

Однако, для того, чтобы GET/POST переменные были доступны в скриптах, сервер должен получить соответствующую ссылку с параметрами и/или post-форму...
Иначе, в случае с семантическим URL - параметры определяются при обработке этого URL и пишутся в соответствующие 'хранилища' (параметры вызываемой далее функции, переменные, объекты, сессии, базу, etc).
Не писать же их в глобальные массивы $_GET и $_POST, в самом-то деле... Закатив глазки


Я тоже это так понимаю, но вот в случае с JoomSEF всё как-то иначе реализовано, вызываешь документ по ЧПУ урлу, и при этом GET становится доступным внутри компонентов)
(Добавление)
NeuroZ пишет:
1. POST доступен только если он был передан на конкретную страницу
2. GET доступен аналогично (но тогда рушится сам ЧПУ). Т.е. будет site.ru/catalog/page?id=3&param=somedata&...
3. Чтобы избежать проблем в пункте 2 нужно создать с вой роутинг с правилами. Я могу расписать пример работу роутинга J! может это наведет вас на какие-то идеи, касательно вашей CMS.

Итак,
-При выключенном ЧПУ в url содержится весь GET запрос страницы и ее параметров.
-При включенном ЧПУ подключается файл router.php который переопределяется для каждого компонента.
А. Если такого файла нет, то действует стандартный J! роутинг.
В. Если нет пунктам меню (ItemID в GET), то первой частью url будет /component/
С. Далее (точно не помню) подставляется значения option из GET /option/
Д. Затем значение view из GET
Е. Все остальные GET переменные либо обрабатываются согласно правилам router.php либо идут как обычные GET параметры (как я описал выше в п.2)

Если надо отправить POST- то ничего общего с роутингом он не имеет. Есть опредленные правила парсинга переменных. Если в POST есть option и task разделенный точкой, то это значит, что запрос пойдет на контроллер с именем (первая часть task (до точки)) компонента option и вызовет там метод task (после точки).
Для наглядности
CODE (html):
скопировать код в буфер обмена
  1. <form action="#" method="post">
  2. <input type="hidden" name="option" value="com_test" />
  3. <input type="hidden" name="task" value="user.create" />
  4. </form>

в action можно также подставить строку index.php?option=com_test&task=user.create - а в метод добавить переменную отвечающую за способ отправки get/post. И таким образом, если будет выбран get, то функционировать код не перестанет.
Но возвращаясь к описанию:
будет вызван метод create контроллера user.php из компонента com_test. Вот и все)


Благодарю конечно, но это тоже знаю, хотелось бы избежать создания роутинга для каждого компонента, и добиться того, как это реализовано в JoomSEF) а в нём при обращении к документу по ЧПУ урлу доступен GET со всеми сохраненными в нём переменными. Ладно, буду пробовать раскурить всё-таки JoomSEF изнутри, и ждать, может кто-то подскажет тут, как это реализовано в JoomSEF)

Благодарю всех, кто откликнулся! Улыбка
nooblamer Отправлено: 29 Ноября, 2016 - 10:08:40 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
NeuroZ пишет:
nooblamer пишет:
В Joomla 1.0 есть такой замечательный компонент JoomSEF, который позволяет делать именно подобное, в нём можно настроить переадресацию, в поле "Внутренняя сылка" занести любой внутренний URL с GET параметрами, а в поле "Новая SEF-ссылка" занести произвольный ЧПУ URL, и при обращении по этому произвольному ЧПУ URL в компоненте будут доступны те самые GET параметры.

1. В современной J! есть компонент SH404SEF но и он не панацея.
2. Как один из простых вариантов - можно еще попробовать использовать REQUEST вместо GET (но это не самый лучший выход при работе с ЧПУ)
nooblamer пишет:
в своей самописной CMS

А при чем тут тогда J! и его расширения? Или может имеется в виду самописный компонент?
nooblamer пишет:
Не понятно, как JoomSEF с этим справляется, пока не хватает уровня знаний, чтобы разобрать его осознанно)

Зато хватает, чтобы написать свою CMS ))) по-моему не с того вы начали))

А теперь самое главное: зачем все эти БД и прилюдии? Придумайте правило роутинга. У J! помимо сторонних компонентов есть своя система роутинга, которая прекрасно работает вообще без БД


Компонент не для Joomla, а для своей CMS)
Она полностью написана, на это действительно хватило знаний))
И есть роутинг более-менее приемлемый, но хотелось бы реализовать что-то подобное, как в JoomSEF, а цель этой реализации в том, чтобы автоматом генерировать ЧПУ для разных компонентов из генератора компонентов, который уже тоже дописал, и чтобы не быть привязанным к структуре генерируемых ЧПУ.
На мой взгляд это очень удобно, генерировать внутреннюю ссылку, и ЧПУ ссылку, вопрос только в том, как сделать перенаправления ссылок с параметрами на ЧПУ, но при этом, чтобы в скриптах были доступны GET/POST переменные. Улыбка
nooblamer Отправлено: 28 Ноября, 2016 - 22:38:26 • Тема: помощь по ЧПУ • Форум: Вопросы новичков

Ответов: 17
Просмотров: 896
andrewkard пишет:
Создаете табличку с алиасами, получаете на вход произвольный сео урл, ищете по нему в БД рабочий урл с гет параметрами, с ним и работаете.


Я примерно так и хочу сделать, но не понятно, как это реализовать в самих скриптах, нужно роутер какой-то писать, в котором подгружать все правила перенаправлений?
А если страниц будет много, например, 10 к и более, запрос же будет долго выполняться...
Не понятно, как JoomSEF с этим справляется, пока не хватает уровня знаний, чтобы разобрать его осознанно)

Может, подскажите, как это в коде именно реализовать, в htaccess я так понял, все запросы надо переадресовывать на индексный файл так:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php

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

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB