проверка на повтор php
php+mysql проверка одинаковых имен\или существующую запись
Доброе время суток! Ребят, помогите пожалуйста.
Есть код, но как сделать проверку на существующую запись не знаю
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Проверка на существующую запись
Всем привет) Нужна ваша помощь, мне необходимо написать программу, которая при записи данных делала.
Проверка на существующую запись DBGrid
Привет. Подскажите как сделать проверку, на колонку login, если такой пользователь там есть то не.
Проверка На Существующую Запись В Базе
Здравствуйте, подскажите пожалуйста! Есть форма c полями Фамилия(fLastName), Имя, Отчество.
Проверка на существующую запись работает не точно
Всем привет, возникла проблема при проверки на существующую запись, а точнее неправильно происходит.
я сейчас убью себя! Все равно не работает проверка на правильность ввода! Проверка на существование работает, а на правильность нет.
Блин, я уже с ума схожу)
KOPOJI, стукни носом, где ошибка?
Добавлено через 5 минут
Отбой, видимо правильно IP заполнял)) Спасибо большое.
Добавлено через 8 минут
KOPOJI, извини, что докопался, но тут подумал, и появилась еще проблема
Как сделать из этого «кода» проверку на пустоту поля? Например ip
алгоритм — PHP обнаруживает повторяющийся текст
У меня есть сайт, где пользователи могут добавить описание о себе.
Большинство пользователей пишут что-то подходящее, но некоторые просто копируют / вставляют один и тот же текст несколько раз (чтобы создать видимость достаточного количества текста).
Например: «Любите и мир любите и мир любите и мир любите и мир любите и мир любите и мир»
Есть ли хороший метод для обнаружения повторяющегося текста с помощью PHP?
Единственная концепция, которая у меня сейчас есть, состоит в том, чтобы разбить текст на отдельные слова (разделенные пробелом), а затем посмотреть, не повторяется ли слово больше, чем ограниченный набор. Примечание. Я не уверен на 100%, как написать код этого решения.
Мысли о лучшем способе обнаружения дублированного текста? Или как закодировать вышеуказанную идею?
Решение
Это основная проблема классификации текста. Есть много из статьи там о том, как определить, является ли какой-то текст спамом, а не спамом, в который я бы порекомендовал разобраться, если вы действительно хотите вникнуть в детали. Многое из этого, вероятно, излишне для того, что вам нужно сделать здесь.
Конечно, один из подходов — оценить, почему вы требуете, чтобы люди вводили более длинные биографии, но я предполагаю, что вы уже решили, что заставить людей вводить больше текста — это путь.
Вот схема того, что я бы сделал:
Этот подход потребует от вас выяснить, что отличается между двумя наборами. Интуитивно понятно, что в спаме будет меньше уникальных слов, и если вы отобразите значения гистограммы, более высокая область под кривой сконцентрируется в направлении главных слов.
Вот пример кода, который поможет вам начать работу:
Сравните это с первыми двумя абзацами Биография Мартина Лютера Кинга младшего из Википедии:
Длинный хвост указывает на множество уникальных слов. Там все еще есть некоторое повторение, но общая форма показывает некоторые изменения.
К вашему сведению, PHP имеет статистика пакет, который вы можете установить, если вы собираетесь делать много математики, как стандартное отклонение, моделирование распределения и т. д.
Другие решения
Вы можете использовать регулярное выражение, как это:
Возможные настройки в соответствии с вашими потребностями:
Я думаю, что вы на правильном пути, ломая нить и глядя на повторяющиеся слова.
Вот некоторый код, который не использует PCRE и использует собственные строковые функции PHP (str_word_count а также array_count_values ):
Некоторые настройки могут быть:
Другая идея заключается в использовании substr_count итерация:
Который будет выводить
Вот код функции, которую вы ищете в описании:
Я думаю, что подход к поиску дублирующих слов, будет грязным. Скорее всего, вы получите повторяющиеся слова в реальных описаниях «Я действительно, действительно, действительно, как мороженое, особенно ванильное мороженое».
Лучший подход состоит в том, чтобы разбить строку, чтобы получить слова, найти все уникальные слова, добавить все количества символов уникальных слов и установить для этого тоже некоторое ограничение. Скажем, вам нужно 100 описаний символов, около 60 уникальных символов из слов.
Копирование подхода @ ficuscr
Я не уверен, стоит ли бороться с такой проблемой. Если человек хочет поместить мусор в поле aboutme, он всегда придет с идеей, как это сделать. Но я буду игнорировать этот факт и бороться с проблемой как с алгоритмическим вызовом:
Наличие строки S, которая состоит из подстрок (которые могут появляться
много раз и не перекрывая) найти подстроку, из которой он состоит.
Определение является вшивым, и я предполагаю, что строка уже преобразована в нижний регистр.
Сначала проще:
Это звучит глупо в начале (конечно, LCS(s, s) == s ), но мы на самом деле не заботимся об ответе, мы заботимся о матрице DP, которую он получает.
Давайте посмотрим на пример: s = «abcabcabc» и матрица:
Обратите внимание на хорошие диагонали там. Как видите, первая диагональ заканчивается 3, вторая — 6, а третья — 9 (наше оригинальное решение DP, которое нам безразлично).
Это не случайность. Надеюсь, что, посмотрев более подробно о том, как строится матрица DP, вы увидите, что эти диагонали соответствуют повторяющимся строкам.
Как видите, большие цифры (17, 34, 51, 68) соответствуют концу диагоналей (там также есть некоторый шум только потому, что я специально добавил маленькие повторяющиеся буквы, такие как aaa ).
Что говорит о том, что мы можем просто найти НОД из двух больших чисел gcd(68, 51) = 17 которая будет длиной нашей повторной подстроки.
Здесь только потому, что мы знаем, что вся строка состоит из повторяющихся подстрок, мы знаем, что она начинается с 0-й позиции (если мы не знаем ее, нам нужно найти смещение).
Постскриптум этот метод позволяет найти повторы, даже если они немного изменены.
Для людей, которые хотели бы поиграть здесь, есть скрипт на python (который был создан в суете, поэтому не стесняйтесь улучшать):
Я рассказал о легком пути, и забыл написать о трудном пути.
Уже поздно, поэтому я просто объясню идею. Реализация сложнее, и я не уверен, что она даст вам лучшие результаты. Но вот оно:
Используйте алгоритм для длинная повторяющаяся подстрока (вам нужно будет реализовать Trie или же дерево суффиксов что не легко в php).
Как вы видите, разница между ними заключается в дублировании подстроки.
Проверка на повтор php
Общий квантификатор повторения указывает минимальное и максимальное допустимое количество совпадений, согласно двум числам, заключёнными в фигурные скобки и разделёнными запятой. Числа должны быть меньше чем 65536, и первое число не должно превышать второе по значению. Например: z <2,4>соответствует «zz», «zzz» или «zzzz». Закрывающая фигурная скобка сама по себе не является специальным символом. В случае, если второе число опущено, но запятая присутствует, нет верхнего предела; в случае, если и второе число и запятая опущены, требуется точное число повторений. Таким образом [aeiou] <3,>соответствует как минимум трём последовательным гласным (а также любому их количеству выше трёх), в то время как \d <8>соответствует ровно восьми цифрам. Открывающая фигурная скобка, расположенная в недопустимой для квантификатора позиции, либо не соответствующая синтаксису квантификатора, интерпретируется как обыкновенная символьная строка. Например, <,6>не является квантификатором, а интерпретируется как символьная строка из четырёх символов.
Квантификатор <0>является допустимым и ведёт себя таким образом, будто бы сам квантификатор и предшествующий ему элемент отсутствуют.
Для удобства (а так же обратной совместимости) три наиболее распространённых квантификатора имеют односимвольные аббревиатуры:
* | эквивалентен |
+ | эквивалентен |
? | эквивалентен |
Можно конструировать бесконечные циклы, указав после шаблона, совпадающего с пустой строкой, квантификатор, не имеющий верхнего предела, например: (a?)*
Ранние версии Perl и PCRE выдавали ошибку во время компиляции для таких шаблонов. Однако, поскольку бывают случаи, когда подобные шаблоны могли бы быть полезны, была добавлена поддержка таких шаблонов. Но если любое повторение такой подмаски фактически не совпадает ни с какими символами, цикл принудительно прерывается.
В случае, если установлена опция PCRE_UNGREEDY (отсутствующая в Perl), квантификаторы не являются жадными по умолчанию, но могут становиться таковыми, если за ними следует символ ‘?’. Говоря другими словами, знак вопроса инвертирует жадность квантификаторов.
В случае, если используется подмаска с квантификатором, для которого задано минимальное количество повторений (больше одного), либо задано максимальное количество повторений, то для откомпилированного шаблона требуется больше памяти (пропорционально минимуму либо максимуму соответственно).
В случае, если захватывающая подмаска повторяется, результирующим значением подмаски будет подстрока, совпадающая с результатом последней итерации. Например, после того, как (tweedle[dume]<3>\s*)+ совпадёт с «tweedledum tweedledee», результирующим значением подмаски будет «tweedledee». Однако, если присутствуют вложенные захватывающие подмаски, соответствующие значения могут быть установлены в предыдущих итерациях. Например, после того, как /(a|(b))+/ совпадёт с «aba», значением второй захваченной подстроки будет «b».
Проверка и исключение повторов
Добрый день, подскажите так как сам не силен в PHP:
PHP скрипт через макрос RANDBLOCK-filename.txt выдергивает случайный блок кода ( картинка и ссылка ) из списка блоков в файле «filename.txt» и подставляет в HTML шаблон, но когда макросов RANDBLOCK-filename.txt несколько то появляются повторы, то есть скрипт не проверяет HTML шаблон на наличие блоков из filename.txt.
Нужно реализовать в цикле проверку на наличие блоков в HTML шаблоне и исключить уже имеющиеся из генерации либо перегенерировать повторы, что бы исключить повторы на странице.
Вот один блок из filename.txt, alt может рандомно меняться, поэтому проверять наверное нужно по номеру картинки или по ссылке:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Исключение повторов
Имеется программа в которой необходимо вывести пары соперников. При этом надо исключить повторы из.
Исключение повторов при добавлении в Edit
Добрый день. Напомните пожалуйста, что нужно написать,чтобы не повторяла,какие функции.
Исключение повторов при добавлении в ListBox
Имеются два ListBox. В первом-список фамилий, второй изначально пустой. Нужно выбирать строку из.
Исключение повторов комбинаций среди множества пар целых чисел с помощью multimap
Здравствуйте. Есть задача «Используйте шаблон multimap для исключения повторов комбинаций среди.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вводится строка, вывести символы строки в порядке убывания количества повторов и указанием числа их повторов
вводится строка, вывести символы строки в порядке убывания количества повторов и указанием числа их.
Проверка введенного числа через Console.ReadKey и исключение
Прохожу уроки по C# на канале youtube, там достаточно быстро проходят темы связанные с циклами и.
Фильтрация и проверка данных PHP. Частые ошибки
Материал предназначен в основном для начинающих веб-программистов.
Введение.
Часто ко мне обращаются клиенты, у которых установлены самописные CMS или модули, написанные начинающими веб-программистами, которые не понимают, что нужно для защиты данных и зачастую копируют функции фильтрации, не задумываясь о том как они работают и что именно нужно с ними делать.
Здесь я постараюсь описать как можно подробнее частые ошибки при фильтрации данных в PHP скрипте и дать простые советы как правильно выполнить фильтрацию данных.
В сети много статей по поводу фильтрации данных, но они как правильно не полные и без подробные примеров.
Разбор полетов.
Фильтрация. Ошибка №1
Для числовых переменных используется такая проверка:
Почему она приведет к SQL инъекции? Дело в том, что пользователь может указать в переменной input_number значение:
В таком случаи проверка будет успешно пройдена, т.к. функция intval получает целочисленное значение переменной, т.е. 1, но в самой переменной $number ничего не изменилось, поэтому весь вредоносный код будет передан в SQL запрос.
Правильная фильтрация:
Конечно, условие может меняться, например если вам нужно получить только определенный диапазон:
Если вы используете чекбоксы или мультиселекты с числовыми значениями, выполните такую проверку:
array_map
Так же встречаю фильтрацию в виде:
Ничего кроме улыбки это не может вызвать 🙂
Фильтрация. Ошибка №2.
Для стринг-переменных используется такая фильтрация:
Функция addslashes экранирует спец. символы, но она не учитывает кодировку БД и возможен обход фильтрации. Не стану копировать текст автора, который описал данную уязвимость и дам просто ссылку Chris Shiflett (перевод можно поискать в рунете).
Если вы не предполагаете вхождение html тегов, то лучше всего сделать такую фильтрацию:
strip_tags — убирает html теги.
htmlspecialchars — преобразует спец. символы в html сущности.
Так вы защитите себя от XSS атаки, помимо SQL инъекции.
Если же вам нужны html теги, но только как для вывода исходного кода, то достаточно использовать:
Если вам важно, чтобы значение переменной не было пустой, то используйте функцию trim, пример:
Фильтрация. Ошибка №3.
Она касается поиска в БД.
Для поиска по числам используйте фильтрацию, описанную в первой ошибке.
Для поиска по тексту используйте фильтрацию, описанную во второй ошибке, но с оговорками.
Для того, чтобы пользователь не смог выполнить логическую ошибку, нужно удалять или экранировать спец. символы SQL.
Пример без доп. обработки строки:
На выходе у нас получится запрос вида:
Это значительно увеличит нагрузку на базу.
В своём скрипте я использую функцию, которая удаляет нежелательные мне символы из поиска:
Конечно, не все из выше перечисленных символов представляют опасность, но в моём случаи они не нужны, поэтому выполняю поиск и замену.
Пример использования фильтрации:
Также советую сделать ограничение по количеству символов в поиске, хотя бы не меньше 3-х, т.к. если у вас будет большое количество записей в базе, то поиск по 1-2 символам будет значительно увеличивать нагрузку на БД.
Фильтрация. Ошибка №4.
Не фильтруются значения в переменной $_COOKIE. Некоторые думаю, что раз эту переменную нельзя передать через форму, то это гарантия безопасности.
Данную переменную очень легко подделать любым браузером, отредактировав куки сайта.
Например, в одной известной CMS была проверка, используемого шаблона сайта:
В данном случаи можно подменить значение переменной $_COOKIE[‘skin’] и вызвать ошибку, в результате которой вы увидите абсолютный путь до папки сайта.
Если вы используете значение куков для сохранения в базу, то используйте одну из выше описанных фильтраций, тоже касается и переменной $_SERVER.
Фильтрация. Ошибка №5.
В PHP скрипте переменная $group будет равна 5, если в скрипте она не была объявлена со значением по умолчанию.
Фильтрация. Ошибка №6.
Проверка. Ошибка №1.
Сталкивался со случаями, когда для AJAX запроса (например: повышение репутации) передавалось имя пользователя или его ID (кому повышается репутация), но в самом PHP не было проверки на существование такого пользователя.
Например:
Получается мы создаем запись в базе, которая совершенно бесполезна нам.
Проверка. Ошибка №2.
При выполнении различного рода действий (добавление, редактирование, удаление) с данными не забывайте проверять права пользователя на доступ к данной функции и дополнительные возможности (использование html тегов или возможность опубликовать материал без проверки).
Давно исправлял в одном модуле форума подобную ошибку, когда любой пользователь мог отредактировать сообщение администрации.
Проверка. Ошибка №3.
При использовании нескольких php файлов сделайте простую проверку.
В файле index.php (или в любом другом главном файле) напишите такую строчку перед подключением других php файлов:
В начале других php файлов напишите:
Так вы ограничите доступ к файлам.
Проверка. Ошибка №4.
Используйте хеши для пользователей. Это поможет предотвратить вызов той или иной функции путём XSS.
Пример составления хеша для пользователей:
Далее во все важные формы подставляйте инпут со значением текущего хеша пользователя:
Во время выполнения скрипта осуществляйте проверку:
Проверка. Ошибка №5.
При выводе SQL ошибок сделайте простое ограничение к доступу информации. Например задайте пароль для GET переменной:
Это позволит скрыть от хакера информацию, которая может ему помочь во взломе сайта.
Проверка. Ошибка №5.
Старайтесь не подключать файлы, получая имена файлов извне.
Например:
В таком случаи вы предотвратите подключение файлов, которые не были вами предусмотрены.
Совет.
Для большей надежности используйте один из готовых и популярных классов для фильтрации данных, дабы самому не пропустить какие-то вредоносные символы/данные. Также в этих классах часто имеется возможность выбора фильтра данных.
UPD: Поправил пост. Перенес все советы по поводу функций и переменных, которые были в комментариях.