Фильтрация русского языка

Discussion in 'PHP' started by OMG!!, 20 Oct 2009.

  1. OMG!!

    OMG!! Elder - Старейшина

    Joined:
    25 Feb 2008
    Messages:
    231
    Likes Received:
    70
    Reputations:
    -3
    Добрый день.
    Есть запрос

    Code:
    $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 английский язык? или как этот запрос может быть модифицировать, что бы он мог только английские буквы и цифры пропускать? спасибо!
     
  2. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    А не проще ли ещё перед запросом проверять введённые данные регуляркой?..
     
    1 person likes this.
  3. OMG!!

    OMG!! Elder - Старейшина

    Joined:
    25 Feb 2008
    Messages:
    231
    Likes Received:
    70
    Reputations:
    -3
    Gray_Wolf,
    Помоги, пожалуйста. мозг кипит уже..
    Code:
    			    $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:
     
  4. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    Code:
    			    $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 );
    			    }
     
    1 person likes this.
  5. OMG!!

    OMG!! Elder - Старейшина

    Joined:
    25 Feb 2008
    Messages:
    231
    Likes Received:
    70
    Reputations:
    -3
    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 = 'Неправильный код!';
    сюда даже не доходит. + в таком варианте не работает вообще проверка :-(
     
  6. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    Code:
    	    $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 != '' на :
    Code:
    if (preg_match('/^([a-zA-Z0-9]+)$/', $sms_code)) {
    т.к. если значение переменной $sms_code='' вернет false=>условие не выполнится.
     
    #6 L I G A, 20 Oct 2009
    Last edited: 20 Oct 2009
  7. OMG!!

    OMG!! Elder - Старейшина

    Joined:
    25 Feb 2008
    Messages:
    231
    Likes Received:
    70
    Reputations:
    -3
    L I G A,
    теперь не ругается в шапке.. но все равно до проверки и else не доходит ( а уж темболее до запроса)
    MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0001 сек. )
     
  8. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    какие символы передаешь ,a-zA-Z0-9 ?если нет, то так и должно быть,потому как условие не выполняется.
     
  9. OMG!!

    OMG!! Elder - Старейшина

    Joined:
    25 Feb 2008
    Messages:
    231
    Likes Received:
    70
    Reputations:
    -3
    L I G A,
    смс_код вида md5 первые 6 символов ( так я реализовал рандом генерацию )
    т.е. например cdd85c да .. и при ввода любого бреда .. или же русских символов.. скрипт перестал отвечать, что " $sms_error = 'Неправильный код!';" а раньше - отвечал естественно. ..
     
  10. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    пробуй так:
    Code:
       $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 );
    			    }
     
  11. OMG!!

    OMG!! Elder - Старейшина

    Joined:
    25 Feb 2008
    Messages:
    231
    Likes Received:
    70
    Reputations:
    -3
    L I G A, спасибо тебе добрый человек! Век не забуду) помогло. сколько "х**х**" и в прочих вариациях теста писал туда это слово, враг не прошел) только иногда рандомно принтится фраза "Неправильный код!" но это бог с ним! главное работает)
    Еще раз спасибо.

    Тему можно закрывать.
     
  12. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    тому кто писал тебе эту регулярку:
    Code:
    (!preg_match('/^([a-zA-Z0-9)$/', $sms)
    Руки поотрубать! я сперва не глянул,потому и был синтаксис эррор+ условие не выполнялось из-за отсутствия квантификатора "+"(в данном случае).
    + добавил проверку на длину, =='6' символов.
     
Loading...