PDA

Просмотр полной версии : Фильтрация русского языка


OMG!!
20.10.2009, 18:38
Добрый день.
Есть запрос

$db->query(sprintf("INSERT INTO code_files(userid,fileid,`date`,`code`) VALUES(%d,%d,'%s','%s')",$member_id['user_id'],$row['id'],date('Y-m-d H:i:s'),$db->safesql($sms_code)));

Поле ввода ( которое проверяет наличие файла + code_files содержимого в таблице ) корректно работает с английскими символами и траслитом. т.е. отвечает ДА на верные, и нет - когда файла нет и в таблице пусто. А вот когда пишу русскими буквами.. запрос, который выше - каким то образом пропускает это все в базу.
Вопрос. каким образом поле "code" залочить only английский язык? или как этот запрос может быть модифицировать, что бы он мог только английские буквы и цифры пропускать? спасибо!

Gray_Wolf
20.10.2009, 18:58
А не проще ли ещё перед запросом проверять введённые данные регуляркой?..

OMG!!
20.10.2009, 19:07
Gray_Wolf,
Помоги, пожалуйста. мозг кипит уже..
$sms_form = false;
if ($member_id['user_group'] > 1 && $row['tarif'] > 0) { // Администраторы качают файл бесплатно
// Пришла форма?
$sms_code = isset($_REQUEST['sms']) ? trim($_REQUEST['sms']) : '';
$sms_error = '';
if ($sms_code != '') {
$code_file = dirname(ENGINE_DIR).'/_codes/'.$row['tarif'].'/'.basename($sms_code);
if (file_exists($code_file)) {
unlink($code_file);
$db->query(sprintf("INSERT INTO sms_files(userid,fileid,`date`,`code`) VALUES(%d,%d,'%s','%s')",$member_id['user_id'],$row['id'],date('Y-m-d H:i:s'),$db->safesql($sms_code)));
} else {
$sms_error = 'Неправильный код!';
}
}
$db->query(sprintf("SELECT * FROM sms_files WHERE userid = %d AND fileid = %d",$member_id['user_id'],$row['id']));
$sms_file = $db->get_row();
$db->free();
if (empty ($sms_file)) {
$sms_form = true;
}
}
if ($sms_form) {
$sms_tarif = $sms_tarifs[$row['tarif']];
$sms_form_html =<<<HTML
<span style="color: red; font-weight: bold;">$sms_error</span><br />
Что бы скачать данный файл отправьте смс сообщение <strong>{$sms_tarif['msg']}</strong> на номер <strong>{$sms_tarif['num']}</strong><br />
<form method="post">
И введите полученный код, после чего нажмите отправить:<input type="text" name="sms" /><br />
<input type="submit" value="Отправить" />
</form>
HTML;
$tpl->set('{url}',$sms_form_html);
} else {
$tpl->set ( '{url}', "<a class=\"download\" title=\"Скачать файл - " . $row ['title'] . "\" href=\"" . $config ['http_home_url'] . "index.php?do=" . $modulname . "&op=showfile&lid=" . $row ['id'] . "\"><b>Скачать</b></a>" . $email_link );
}

Куда вставить (!preg_match('/^([a-zA-Z0-9)$/', $sms) && ? :confused:

L I G A
20.10.2009, 20:14
$sms_form = false;
if ($member_id['user_group'] > 1 && $row['tarif'] > 0) { // Администраторы качают файл бесплатно
// Пришла форма?
$sms_code = isset($_REQUEST['sms']) ? trim($_REQUEST['sms']) : '';
$sms_error = '';

if ($sms_code != '' AND preg_match('/^([a-zA-Z0-9)$/', $sms_code)) {
$code_file = dirname(ENGINE_DIR).'/_codes/'.$row['tarif'].'/'.basename($sms_code);
if (file_exists($code_file)) {
unlink($code_file);
$db->query(sprintf("INSERT INTO sms_files(userid,fileid,`date`,`code`) VALUES(%d,%d,'%s','%s')",$member_id['user_id'],$row['id'],date('Y-m-d H:i:s'),$db->safesql($sms_code)));
} else {
$sms_error = 'Неправильный код!';
}
}
$db->query(sprintf("SELECT * FROM sms_files WHERE userid = %d AND fileid = %d",$member_id['user_id'],$row['id']));
$sms_file = $db->get_row();
$db->free();
if (empty ($sms_file)) {
$sms_form = true;
}
}
if ($sms_form) {
$sms_tarif = $sms_tarifs[$row['tarif']];
$sms_form_html =<<<HTML
<span style="color: red; font-weight: bold;">$sms_error</span><br />
Что бы скачать данный файл отправьте смс сообщение <strong>{$sms_tarif['msg']}</strong> на номер <strong>{$sms_tarif['num']}</strong><br />
<form method="post">
И введите полученный код, после чего нажмите отправить:<input type="text" name="sms" /><br />
<input type="submit" value="Отправить" />
</form>
HTML;
$tpl->set('{url}',$sms_form_html);
} else {
$tpl->set ( '{url}', "<a class=\"download\" title=\"Скачать файл - " . $row ['title'] . "\" href=\"" . $config ['http_home_url'] . "index.php?do=" . $modulname . "&op=showfile&lid=" . $row ['id'] . "\"><b>Скачать</b></a>" . $email_link );
}

OMG!!
20.10.2009, 20:26
L I G A,
Спасибо за попытку..
Warning: preg_match(): Compilation failed: missing terminating ] for character class at offset 14 in /home...../files_download.php on line 331

Это в шапке..
$sms_error = 'Неправильный код!';
сюда даже не доходит. + в таком варианте не работает вообще проверка :-(

L I G A
20.10.2009, 20:35
$sms_form = false;
if ($member_id['user_group'] > 1 && $row['tarif'] > 0) { // Администраторы качают файл бесплатно
// Пришла форма?
$sms_code = isset($_REQUEST['sms']) ? trim($_REQUEST['sms']) : '';
$sms_error = '';

if (preg_match('/^([a-zA-Z0-9]+)$/', $sms_code)) {
$code_file = dirname(ENGINE_DIR).'/_codes/'.$row['tarif'].'/'.basename($sms_code);
if (file_exists($code_file)) {
unlink($code_file);
$db->query(sprintf("INSERT INTO sms_files(userid,fileid,`date`,`code`) VALUES(%d,%d,'%s','%s')",$member_id['user_id'],$row['id'],date('Y-m-d H:i:s'),$db->safesql($sms_code)));
} else {
$sms_error = 'Неправильный код!';
}
}
$db->query(sprintf("SELECT * FROM sms_files WHERE userid = %d AND fileid = %d",$member_id['user_id'],$row['id']));
$sms_file = $db->get_row();
$db->free();
if (empty ($sms_file)) {
$sms_form = true;
}
}
if ($sms_form) {
$sms_tarif = $sms_tarifs[$row['tarif']];
$sms_form_html =<<<HTML
<span style="color: red; font-weight: bold;">$sms_error</span><br />
Что бы скачать данный файл отправьте смс сообщение <strong>{$sms_tarif['msg']}</strong> на номер <strong>{$sms_tarif['num']}</strong><br />
<form method="post">
И введите полученный код, после чего нажмите отправить:<input type="text" name="sms" /><br />
<input type="submit" value="Отправить" />
</form>
HTML;
$tpl->set('{url}',$sms_form_html);
} else {
$tpl->set ( '{url}', "<a class=\"download\" title=\"Скачать файл - " . $row ['title'] . "\" href=\"" . $config ['http_home_url'] . "index.php?do=" . $modulname . "&op=showfile&lid=" . $row ['id'] . "\"><b>Скачать</b></a>" . $email_link );
}
заменил $sms_code != '' на :
if (preg_match('/^([a-zA-Z0-9]+)$/', $sms_code)) {
т.к. если значение переменной $sms_code='' вернет false=>условие не выполнится.

OMG!!
20.10.2009, 20:40
L I G A,
теперь не ругается в шапке.. но все равно до проверки и else не доходит ( а уж темболее до запроса)
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0001 сек. )

L I G A
20.10.2009, 20:42
L I G A,
теперь не ругается в шапке.. но все равно до проверки и else не доходит ( а уж темболее до запроса)
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0001 сек. )
какие символы передаешь ,a-zA-Z0-9 ?если нет, то так и должно быть,потому как условие не выполняется.

OMG!!
20.10.2009, 20:45
L I G A,
смс_код вида md5 первые 6 символов ( так я реализовал рандом генерацию )
т.е. например cdd85c да .. и при ввода любого бреда .. или же русских символов.. скрипт перестал отвечать, что " $sms_error = 'Неправильный код!';" а раньше - отвечал естественно. ..

L I G A
20.10.2009, 20:50
пробуй так:
$sms_form = false;
if ($member_id['user_group'] > 1 && $row['tarif'] > 0) { // Администраторы качают файл бесплатно
// Пришла форма?
$sms_code = isset($_REQUEST['sms']) ? trim($_REQUEST['sms']) : '';
$sms_error = '';

if (preg_match('/^([a-zA-Z0-9]+)$/', $sms_code) and strlen($sms_code)=='6') {
$code_file = dirname(ENGINE_DIR).'/_codes/'.$row['tarif'].'/'.basename($sms_code);
if (file_exists($code_file)) {
unlink($code_file);
$db->query(sprintf("INSERT INTO sms_files(userid,fileid,`date`,`code`) VALUES(%d,%d,'%s','%s')",$member_id['user_id'],$row['id'],date('Y-m-d H:i:s'),$db->safesql($sms_code)));
} else {
$sms_error = 'Неправильный код!';
}
}
$db->query(sprintf("SELECT * FROM sms_files WHERE userid = %d AND fileid = %d",$member_id['user_id'],$row['id']));
$sms_file = $db->get_row();
$db->free();
if (empty ($sms_file)) {
$sms_form = true;
}
}
if ($sms_form) {
$sms_tarif = $sms_tarifs[$row['tarif']];
$sms_form_html =<<<HTML
<span style="color: red; font-weight: bold;">$sms_error</span><br />
Что бы скачать данный файл отправьте смс сообщение <strong>{$sms_tarif['msg']}</strong> на номер <strong>{$sms_tarif['num']}</strong><br />
<form method="post">
И введите полученный код, после чего нажмите отправить:<input type="text" name="sms" /><br />
<input type="submit" value="Отправить" />
</form>
HTML;
$tpl->set('{url}',$sms_form_html);
} else {
$tpl->set ( '{url}', "<a class=\"download\" title=\"Скачать файл - " . $row ['title'] . "\" href=\"" . $config ['http_home_url'] . "index.php?do=" . $modulname . "&op=showfile&lid=" . $row ['id'] . "\"><b>Скачать</b></a>" . $email_link );
}

OMG!!
20.10.2009, 20:57
L I G A, спасибо тебе добрый человек! Век не забуду) помогло. сколько "х**х**" и в прочих вариациях теста писал туда это слово, враг не прошел) только иногда рандомно принтится фраза "Неправильный код!" но это бог с ним! главное работает)
Еще раз спасибо.

Тему можно закрывать.

L I G A
20.10.2009, 21:03
тому кто писал тебе эту регулярку:
(!preg_match('/^([a-zA-Z0-9)$/', $sms)
Руки поотрубать! я сперва не глянул,потому и был синтаксис эррор+ условие не выполнялось из-за отсутствия квантификатора "+"(в данном случае).
+ добавил проверку на длину, =='6' символов.