Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

[PHP] [SQL] Вопросы

Статус пользователя miRror
сообщение 3.8.2014, 14:45
Сообщение #1


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Я думаю часто у вас возникают мелкие вопросы, ради которых создавать новую тему нет смысла. Надеюсь меня не покарают модераторы.

Вопросы можно задавать прямо в этой теме. Естественно крупные скрипты никто переписывать не будет.

Мой первый вопрос:

Нужно выполнить подобный запрос:
Код
SELECT * FROM `users` WHERE `login` = 'логин' AND `password` = md5(CONCAT(`salt`, 'пароль' ))

Я не знаю хеш, но знаю пароль и мне нужно найти запись по неизвестному хешу. Возможно ли так?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя jtiq
сообщение 3.8.2014, 14:54
Сообщение #2


Иконка группы

Стаж: 18 лет

Сообщений: 1717
Благодарностей: 767
Полезность: 979

Меценат Меценат

да, можно, но весь прикол в том, как были зашифрованы пароли
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 3.8.2014, 14:57
Сообщение #3


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Проверка идет вот такая:
Код:
if($row['password'] != md5($row['salt'].$this->post['password'])) return 'К примеру ошибка';


$this->post['password'] - введенный пароль
$row['salt'] - соль из бд
$row['password'] - пароль из бд (уже хешированный с солью)

Мой запрос не канает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 3.8.2014, 15:11
Сообщение #4


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Всё таки обошелся без него, сделал чуток по другому, но факт того, что запрос не работает меня смутил, может такая конструкция вообще не предусмотрена в sql, не знаю. Можете задавать и свои вопросы.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zippel
сообщение 3.8.2014, 17:44
Сообщение #5


Стаж: 17 лет

Сообщений: 918
Благодарностей: 105
Полезность: 1

cls, затупил.. все нормально.

Отредактировал: zippel, - 3.8.2014, 18:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 18.8.2014, 21:29
Сообщение #6


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Вопрос.
Дан любой запрос.
Задача: узнать позицию элемента (например с id=1337) в этом запросе.
То есть есть там 40 элементов к примеру, а мне нужно получить что элемент с id=1337 идет в этом запросе например 8 по счету.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 18.8.2014, 21:46
Сообщение #7


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Кажется это делается так:
Код
SELECT COUNT(*) FROM `table` WHERE `id` > (SELECT `id` FROM `table` WHERE `id` = '1337')

Поправьте, если ошибаюсь.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Johnny
сообщение 18.8.2014, 21:57
Сообщение #8


Стаж: 13 лет

Сообщений: 2470
Благодарностей: 1086
Полезность: 515

Цитата(miRror @ 18.8.2014, 23:46) *
Поправьте, если ошибаюсь.

Все верно.

Встречается еще вот такой метод определения позиции:
Код
SET @recNo:=0;
SELECT n FROM (SELECT @recNo := @recNo+1 n, id FROM table ORDER BY time DESC) s WHERE id=22;

Не пробовал, говорят работает, но медленнее, чем первый.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя miRror
сообщение 19.8.2014, 15:22
Сообщение #9


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Есть регулярка:

Входящая строка
Код
'#\[size=50\](.+?)\[\/size\]#is',    
'#\[size=85\](.+?)\[\/size\]#is',    
'#\[size=100\](.+?)\[\/size\]#is',    
'#\[size=150\](.+?)\[\/size\]#is',    
'#\[size=200\](.+?)\[\/size\]#is',


Выходящая:
Код
'<font size="1">$1</font>',
'<font size="2">$1</font>',
'<font size="3">$1</font>',
'<font size="4">$1</font>',
'<font size="6">$1</font>',


Можно ли как-то оптимизировать 5 регулярок в 1, чтобы первому совпадению (50) присваивалась цифра 1, второму (85) 2 и так далее...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 19.8.2014, 16:15
Сообщение #10
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

miRror, может лучше парсить вручную?

Отредактировал: [WPMG]PRoSToTeM@, - 19.8.2014, 18:42
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 19.8.2014, 17:54
Сообщение #11


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Как так вручную ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 19.8.2014, 19:45
Сообщение #12


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(miRror @ 19.8.2014, 18:54) *
Как так вручную ?

switch() не?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 19.8.2014, 19:52
Сообщение #13


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Не, мне просто было интересно, есть ли подобная конструкция, так то я уже сделал чуток по другому:
Код
'#\[size=([1-6])\](.+?)\[\/size\]#is',

и заменяется на:
Код
'<font size="$1">$2</font>',
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя jtiq
сообщение 20.8.2014, 2:15
Сообщение #14


Иконка группы

Стаж: 18 лет

Сообщений: 1717
Благодарностей: 767
Полезность: 979

Меценат Меценат

miRror,
На любой вкус
Код
<?php

$bb  = '[size=1]Текст 1[/size]'.PHP_EOL;
$bb .= '[size=2]Текст 2[/size]'.PHP_EOL;
$bb .= '[size=3]Текст 3[/size]'.PHP_EOL;
$bb .= '[size=4]Текст 4[/size]'.PHP_EOL;
$bb .= '[size=6]Текст 6[/size]';

function bb_font_size($matches = array()) {
  return '<font size="'.$matches[1].'">'.$matches[2].'</font>';
}

echo "<pre>{$bb}</pre>";

$bb = preg_replace_callback("#\\[size=([0-6])\\](.*?)\\[/size\\]#is", "bb_font_size", $bb);

echo "<pre>{$bb}</pre>";

?>

Код
<?php

$bb  = '[size=50]Текст 50[/size]'.PHP_EOL;
$bb .= '[size=85]Текст 85[/size]'.PHP_EOL;
$bb .= '[size=100]Текст 100[/size]'.PHP_EOL;
$bb .= '[size=150]Текст 150[/size]'.PHP_EOL;
$bb .= '[size=200]Текст 200[/size]';

function bb_font_size($matches = array()) {
  $bb_size = $matches[1];
  $bb_text = $matches[2];

  $bb_sizes = array(
    50 => 1,
    85 => 2,
    100 => 3,
    150 => 4,
    200 => 6
  );

  return '<font size="'.$bb_sizes[$bb_size].'">'.$bb_text.'</font>';
}

echo "<pre>{$bb}</pre>";

$bb = preg_replace_callback("#\\[size=([0-9]+)\\](.*?)\\[/size\\]#is", "bb_font_size", $bb);

echo "<pre>{$bb}</pre>";

?>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: