Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Фильтрация русского языка (https://forum.antichat.xyz/showthread.php?t=149790)

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

Цитата:

Сообщение от OMG!!
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 );
                            }



Время: 16:53