Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не пойму как сделать эту проверку и...
Til_Seier  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 24
Пользователь №: 42746
На форуме: 8 месяцев, 15 дней
Карма:




Всем привет,
Хочу сделать проверку, наверное простая и я сам мог бы сделать ее, но голова сейчас просто не варит.

Проверка заключается в следующем:

Например я принял значения со силки $link = "/logo/fer43-sdf23-df22/logo"

Мне нужно, чтобы если эта ccылка выглядит так

 /logo/hash/logo (например /logo/fer43-sdf23-df22/logo)
или
/hash/logo (например /fer43-sdf23-df22/logo)
или
/logo/hash (например /logo/fer43-sdf23-df22)
или
/hash (например /fer43-sdf23-df22)


тогда выводило например ОК!

а если ccылка не имеет такого вида тогда WRONG LINK!

Помогите мне пожалуйста

и еще чтобы например в переменную $hash записывалось значение хэша.
В данном случае $hash должен равняться fer43-sdf23-df22
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5911
Пользователь №: 1
На форуме: 10 лет, 10 месяцев, 3 дня
Карма: 125

Не пью :
22 года, 3 месяца, 4 дня


Критерий хеша?
Если длина (слова "logo" и "hash" всего по 4 буквы, а хеш длинный), то можно так:
$link = "/logo/fer43-sdf23-df22/logo";
$hash = "";
$result = "Нету хешу";
$link_arr = explode('/', $link);
foreach($link_arr as $v)
{
if(strlen($v) > 4)
{
$hash = $v;
$result = "OK";
}
}


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Til_Seier  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 24
Пользователь №: 42746
На форуме: 8 месяцев, 15 дней
Карма:




Дело в том, что пользователь может ввести вместо logo другое значение которое может иметь более символов чем 4 или даже больше чем в хэша. Поэтому вряд ли этот способ подходит.
У кого есть еще какие мысли по поводу этой задачи?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5911
Пользователь №: 1
На форуме: 10 лет, 10 месяцев, 3 дня
Карма: 125

Не пью :
22 года, 3 месяца, 4 дня


Как отличить введенное пользователем слово от хеша?


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Til_Seier  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 24
Пользователь №: 42746
На форуме: 8 месяцев, 15 дней
Карма:




Хотя, я не учел что сначала будет проверка, а затем уже хэш считывается, и как вариант этот способ считывания хэша подходит.

Пожалуйста если имеете возможность, помогите с проверкой

или какие еще есть варианты взять хеш?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 28 дней
Карма: 7




Цитата
В данном случае $hash должен равняться fer43-sdf23-df22

Til_Seier
А как ты вообще передаешь этот $hash? Через GET, POST или ты
вообще просто взял и приписал его к ссылке?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Til_Seier  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 24
Пользователь №: 42746
На форуме: 8 месяцев, 15 дней
Карма:




Хорошо, давайте так

Предположим что есть такой код

$String1 = "/company/fer43-sdf23-df22/ company/";
$String2 = "/some_text/fer43-sdf23-df22";
$String3 = "/company/fer43-sdf23-df22";
$String4 = "/fer43-sdf23-df22";
$String5 = "/fer43-sdf23-df22/some_text/";
$String6 = "/fer43-sdf23-df22/company/";
$String7 = "/sdf/company/fsd/fsdf/sdfgsd";

$logo = "company";

ПРОВЕРКА, что строка должна выглядеть или так
"/$logo/регулярное выражение для хэша/$logo/"
или так
"/регулярное выражение для хэша/$logo/"
или так
"/$logo/регулярное выражение для хэша/"
или так
"/регулярное выражение для хэша"


Так вот если в проверку попадет $String1 результат должен быть OK!
если $String2 тогда WRONG!
если $String3 тогда OK!
если $String4 тогда OK!
если $String5 тогда WRONG!
если $String6 тогда OK!
если $String7 тогда WRONG!

Как должна выглядеть проверка?

* Надеюсь так будет понятнее

Это сообщение отредактировал Til_Seier - 1.06.2016 - 10:25
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 10 дней
Карма: 9




Цитата (Til_Seier @ 1.06.2016 - 10:21)
Надеюсь так будет понятнее


Лично я нихрена не понял biggrin.gif


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22695
Пользователь №: 20039
На форуме: 7 лет, 3 дня
Карма: 599




Til_Seier
Тебе задали единственно важный вопрос сейчас выше:
Цитата
Как отличить введенное пользователем слово от хеша?


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Til_Seier  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 24
Пользователь №: 42746
На форуме: 8 месяцев, 15 дней
Карма:




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

8 символов - 4 символа - 4 символа - 4 символа - 12 символов


пример:

8020d7fe-fs46-4jqc-ai61-a46x92eu947d


Как сделать так чтобы пропускало только такие хэши?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 28 дней
Карма: 7




Слушай Til_Seier тебе задали вопросы
Цитата
А как ты вообще передаешь этот $hash? Через GET, POST или ты
вообще просто взял и приписал его к ссылке?

и
Цитата
Как отличить введенное пользователем слово от хеша?

Ты ответить на них можешь?

А твой хеш можно особо и не придумывать, просто возьми и захишируй свой ник
вот так
echo md5('Til_Seier');

И увидишь какой хеш у тебя получился, вот и используй его
Твой хеш 95a7d1d61006cb1c6073efa52138e934

И еще раз
Цитата
А как ты вообще передаешь этот $hash? Через GET, POST или ты
вообще просто взял и приписал его к ссылке?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
lancelot8097  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43030
На форуме: 6 месяцев, 8 дней
Карма:




1 зачем тебе это ? ты думаешь твои ресурсы будит использовать кто-то другой ?
2 Самодельная хеш ???? ты серьёзно ?
3 процедурный код ?
4 что такое htacces знаете ?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
[x] Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









function extractHash($string, $name) {
$regex = '/\/?'.preg_quote($name).'\/([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\/'.preg_quote($name).'\/?/';
if (preg_match($regex, $string, $m)) {
return $m[1];
}
return null;
}

//test
$strings = [
"/company/fer43d31-sd23-df22-224d-w2d45g5f6d32/company/",
"/logo/fer43-sdf23-df22",
"/company/fer43d31-sd23-df22-224d-w2d45g5f6d32",
"/logo/fer43d31-sd23-df22-224d-w2d45g5f6d32/logo",
"/fer43-sdf23-df22/some_text/",
"/fer43-sdf23-df22/company/",
"/sdf/company/fsd/fsdf/sdfgsd",
];


$logos = [
'company',
'logo'
];

foreach ($logos as $logo) {
foreach ($strings as $string) {
$hash = extractHash($string, $logo);
echo sprintf("%s\t%55s\t%s\t%s\n", $logo, $string, ($hash ? 'OK' : 'WRONG'), $hash);
}

}


Live demo.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









А блин, понял в чем сложность – несколько шаблонов: logo/hash/logo, logo/hash, hash/logo.
Ну это тоже не проблема. Вот вариант, который находит все https://glot.io/snippets/ef92920g94
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Til_Seier  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 24
Пользователь №: 42746
На форуме: 8 месяцев, 15 дней
Карма:




Всем спасибо, ваша помощь очень важна для меня. Особенно порадовал Гость, который предпочел остаться анонимным. Огромное тебе спасибо.

Вот код который я сделал
Если у вас есть какие-то предложения, замечания или вы видите что в коде можно было бы организовать лучше, напишите пожалуйста, буду рад любой помощи. Хорошо?

class Route {
function __construct() {

}


public static function Start() {

$Controller = new Controller();

//параметры по умолчанию
$controller_name = '404';
$action_name = 'index';

$hach = "";
$company = "logo";

//преобразуем строку запроса в массив
$route_array = explode('/', urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));

$route_array = array_values(array_filter($route_array));
$right_link = true;
$route_count = count($route_array);
if($route_count > 3){
header('Location: /404');
exit;
}

foreach ($route_array as $key => $value) {
if (preg_match('/^([a-z0-9A-Z]{8}-[a-z0-9A-Z]{4}-[a-z0-9A-Z]{4}-[a-z0-9A-Z]{4}-[a-z0-9A-Z]{12})$/i',$value,$m)) {
if($key != 3){
$hash = $m[1];
}
}
else if($value == $company){
if(
!((
$route_count == 3) && ($key == 0 || $key == 2)) &&
!((
$route_count == 2) && ($key == 0 || $key == 1)) &&
!(
$route_count == 1)
)
{
$right_link = false;
}
}
else{
$right_link = false;
}
}


if($Controller->checkHash($hash) && $right_link){
$controller_name = "index";
}else{
$controller_name = "404";
}
// добавляем префиксы
$model_name = 'Model_' . $controller_name;
$controller_name = 'Controller_' . $controller_name;
$action_name = 'Action_' . $action_name;

if(file_exists(Q_PATH.'/application/models/'.$model_name.'.php')) {
include Q_PATH.'/application/models/'.$model_name.'.php';
}

if(file_exists(Q_PATH.'/application/controllers/'.$controller_name.'.php')) {
include Q_PATH.'/application/controllers/'.$controller_name.'.php';
}
else {
header('Location: /404');
exit;
}

$controller = new $controller_name();
$controller->$action_name();
}

}


P.S.
Astin вряд ли мне нужна была бы помощь с тем чтобы записать хэш в какую то переменную, если бы я передавал его через POST или GET
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса