Простая проверка дубликатов слов в PHP - PullRequest
1 голос
/ 03 ноября 2011

Есть ли в любом случае обнаружение дубликата формы, отправляемой с помощью PHP?

У меня есть текстовое поле, которое используется для ввода в него фразы из одного слова (например, "Google").Когда пользователь нажимает кнопку отправки, форма, содержащая это текстовое поле, отправляется.После этого - на странице обработки PHP - некоторые данные выбираются из базы данных.Если отправленное слово не существует, оно вставляется в БД.Но если он уже существует, существующий получает голос.Это может быть немного сложно, но я думаю, что это понятно.

Единственная проблема заключается в том, что когда пользователь отправляет что-то вроде этого: «Google».оно отправлено, хотя уже есть запись, содержащая «Google».

У меня простой вопрос: как проверить наличие дубликатов?

[Я уже опробовал функцию mysql: LIKE, но на самом деле это не сработало, потому что когда кто-то отправлял что-то вроде этого: «Гуфи», в нем содержалось «Goo», которое уже есть в слове «Google» ->, которое уже вставлено.]

Так, как я мог решить это?Есть ли хороший сценарий для этого?

Ответы [ 4 ]

1 голос
/ 03 ноября 2011

Хотя я согласен с @Dustin относительно использования INSERT ... ON DUPLICATE KEY UPDATE, вы можете решить эту проблему на уровне пользовательского ввода с помощью javascript или PHP во время отправки, вместо того, чтобы SQL пытался сопоставить строки.

Каковы ограничения поля ввода в настоящее время. Ожидаете ли вы, что пользователи будут использовать знаки препинания, цифры и другие не-буквенные символы?

example of non-alpha: 1234567890-=()!@#$%^&*_+,./<>?;':"|\

Если это так, я бы вам preg_replace или regExp удалил любого из этих нежелательных символов. Таким образом, устранение проблемы в источниках.

После проверки / очистки ввода вы можете использовать простую вставку SQL, например:

INSERT INTO table (string, count) VALUES (1,2)
   ON DUPLICATE KEY UPDATE count=count+1;

Надеюсь, это немного поможет.

1 голос
/ 03 ноября 2011

Это похоже на хорошее приложение INSERT ... ON DUPLICATE KEY UPDATE , где ваш ключ - это ключ unique, а ваше обновление - столбец с цифрами.

1 голос
/ 03 ноября 2011

Эта тема должна помочь вам .

Он предлагает 2 решения, которые должны работать и зависят от того, хотите ли вы изменить свой SQL-запрос или выполнить логику с помощью php.

$result = mysql_query("update test set col='test' where col_id='1';");       
if (mysql_affected_rows()==0) {
    $result = mysql_query("insert into test (col_id, col) values ('1','test');");
}

Вам также следует рассмотреть возможность установки уникального индекса для столбца, который вы не хотите повторять.

Он также предлагает: INSERT ON DUPLICATE KEY UPDATE.

1 голос
/ 03 ноября 2011

Вы можете установить столбец имени базы данных в качестве уникального индекса, что будет означать, что любой дубликат не будет записан, и вы можете проверить эту ошибку в SQL-коде вставки.

Но на странице обработки было бы проще просто сделать SELECT 'submittedword' FROM table - если нет результата, тогда вы знаете, что это новое слово, и вы можете выполнить вставку. Если он возвращает результат, то вы выполняете функцию приращения.

...