Есть идея сделать выборку из этих таблиц сразу в начале функции и в цикле обращаться к ассоциативным массивам.
<?php
define('SECRET', 'tostersecretcode2015');
/**
* Создаёт серийный номер с заданной проверочной частью.
*
* @param string $check Часть серийного номера, используемая для проверки.
*
* @return bool
*/
function sernum ($check = null)
{
$template = 'XXX99-XXX99-99XXX-99XXX';
$parts = explode('-', $template, 2);
if (!isset($check)) {
$check = '';
for ($i = 0; $i < strlen($parts[0]); $i++) {
switch ($parts[0][$i]) {
case 'X': $check .= chr(rand(65, 90)); break;
case '9': $check .= strval(rand(0,9)); break;
}
}
}
$sernum = $check . '-';
$hash = hash('sha256', $check . SECRET);
for ($i = 0; $i < strlen($parts[1]); $i++) {
switch ($parts[1][$i]) {
case 'X': $sernum .= chr(65 + ord($hash[$i]) % 26); break;
case '9': $sernum .= strval(ord($hash[$i]) % 10); break;
case '-': $sernum .= '-'; break;
}
}
return $sernum;
}
/**
* Проверяет серийный номер.
*
* @return bool
*/
function check_sernum ($sernum)
{
$parts = explode('-', $sernum, 2);
return (sernum($parts[0]) === $sernum);
}
echo '<pre>Десять случайных номеров:<br>';
for ($i = 0; $i < 10; $i++)
echo sernum(), '<br/>';
if (check_sernum('XCC58-AYA68-75ZUU-19TDZ')) {
echo 'Номер XCC58-AYA68-75ZUU-19TDZ прошёл проверку<br>';
}
if (!check_sernum('ESJ18-TBZ25-42XDX-38XWY')) {
echo 'Номер ESJ18-TBZ25-42XDX-38XWY не прошёл проверку<br>';
}
Можно конечно как-то наговнокодить, пытаться сгенерировать регулярку, потом ее подставлять, но интересует красивый и быстрый способ
$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';
$pattern = preg_replace_callback('/X+/', function ($m) {
return '[^-]{' . strlen($m[0]) . '}';
}, preg_quote($mask));
if (preg_match("/^{$pattern}$/", $test)) {
echo "Строка '$test' подходит под маску '$mask'";
}
$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';
if (preg_replace('/[^-]/', 'X', $test) == $mask) {
echo "Строка '$test' подходит под маску '$mask'";
}
if ($text) {
require_once './Natty/TextRandomizer.php';
$tRand = new Natty_TextRandomizer($text);
for ($i = 0, $k = 0, $count = $tRand->numVariant(); $k < 100 && $i < $count; $i++) {
$randText = $tRand->getText();
if (mb_strlen($randText) > 100) {
echo htmlspecialchars($randText) . '<hr />';
$k++;
}
}
}
if ($text) {
require_once './Natty/TextRandomizer.php';
$tRand = new Natty_TextRandomizer($text);
for ($i = 0, $count = $tRand->numVariant(); $i < 100 && $i < $count; $i++) {
$randText = $tRand->getText();
if (mb_strlen($randText) > 100) {
echo htmlspecialchars($randText) . '<hr />';
}
}
}
if ($text) {
require_once './Natty/TextRandomizer.php';
$tRand = new Natty_TextRandomizer($text);
for ($i = 0, $count = $tRand->numVariant(); $i < $count; $i++) {
$randText = $tRand->getText();
if (mb_strlen($randText) > 100) {
echo htmlspecialchars($randText) . '<hr />';
}
}
}
$GLOBALS['GLBL'] = array(
base64_decode('c3RyX3Jlc' . 'G' . 'xhY2U='),
base64_decode('ZmlsZV9nZXR' . 'f' . 'Y' . '29udGVudH' . 'M='),
// ...
);
$content = <<<'FILE'
<содержимое файла>
FILE;
echo preg_replace_callback('/\$GLOBALS\[\'GLBL\'\]\[(\d+)\]/m', function ($m) use ($GLOBALS) {
return $GLOBALS['GLBL'][intval($m[1])];
}, $content);
$router = new MyRoute();
$controller = $router->match('/some/path');
UserModel::public function register($name, $email, $password);
$user
приходит на вход postRegisterUser(..., UserModel $user)
. А ещё потом это $user->find($request->get('id'))
. Что ещё за id? Если пользователя только собираетесь регистрировать, у него ещё не должно быть id, или я что-то не понимаю? Ну это так, к слову...В документации к различным фреймворкам, я вижу что-то вроде $form->isValid() и ни слова о том, что происходит далее.
$form
. Это класс формы, хранящий внутри себя список названий полей ввода (в вашем случае 'name', 'email', 'password'), а также все необходимые фильтры и валидаторы для этих полей. Форма, строго говоря, ничего не знает ни о контроллерах, ни даже о UserModel, её задача - принять, отфильтровать, проверить данные, вернуть список ошибок, если данные не корректны. Для каждой html формы создаётся и конфигурируется свой класс формы. В итоге получаем что-то вроде:public function postRegisterUser(Request $request)
{
$form = $this->getRegisterForm();
// Передаём данные $_POST. Ключи не перечисляем - форма сама разберётся, что взять
$form->setData($request->getPost());
if ($form->isValid()) {
// Получаем уже отфильтрованные данные
$data = $form->getData();
// Регистрируем нового пользователя
$user = UserModel::register($data['name'], $data['email'], $data['password']);
}
}
static public function register($name, $email, $password)
{
// Регистрируем нового пользователя
}
select
B.ACCOUNTID as A1,
B.FIO as A2,
B.ACCOUNTGTS as A3,
GROUP_CONCAT(A.NUMBERA SEPARATOR ', ') as A4,
C.MAXCONNECTIONS as A5
from TBGTS B
left outer join TBPHONES A on (A.ACCOUNTID = B.ACCOUNTID)
left outer join TBACCOUNTS C on (A.ACCOUNTID = C.ACCOUNTID)
left outer join TBACCOUNTSUPDATE D on (D.ACCOUNTID = A.ACCOUNTID and D.EMITTERKCID = B.EMITTERKCID)
group by B.ACCOUNTID, B.FIO, B.ACCOUNTGTS, C.MAXCONNECTIONS
preg_match('/<w:body>.*(<w:p>(.*)<\/w:p>).*<\/w:body>/is', $string, $matches);