Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнение инфы введенную в форме с базой mysql
 
 автор: Habl   (05.08.2012 в 15:56)   письмо автору
 
 

Привет формучане!!! :)

Нужна ваша помощь, я уже все голову сломал, голова ваще не варит....
Существует база данных mysql и в ней хранятся записи, на web странице я сделал форму которая добавляет новые записи в эту базу, и мне нужно сделать так чтобы перед тем как новая запись была добавлена она проверялась на уникальность с базой по точному вхождению, чтобы не было повторений так сказать.
Если есть повторение есть, выводит что "запись существует" , если нет, то добавляет....


Вот код который делал сам

$search = mysql_query("SELECT goryshue_tyri_v_shilanky FROM JMT_goryshue_tyri_v_shilanky where goryshue_tyri_v_shilanky)",$db);
$search1 = mysql_fetch_array($search);
if (strcmp ($goryshue_tyri_v_shilanky, $search))
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='2; URL=http://gen.net/JMT_goryshue_tyri_v_shilanky.php'>
</HEAD></HTML>";
exit ("<p style='margin:auto; margin-top:300px; padding:7px; color:red; font-size:30px; border:solid gray 1px; width:327px;'>Такое слово уже есть!!! :(</p>");
}


// *************************************************************************************************

$result = mysql_query("INSERT INTO JMT_goryshue_tyri_v_shilanky (goryshue_tyri_v_shilanky) VALUES ('$goryshue_tyri_v_shilanky')");

if ($result == 'true')
{
echo ("<p style='margin:auto; margin-top:300px; padding:7px; color:green; font-size:30px; border:solid gray 1px; width:319px;'>Слово добавленно в базу</p>");
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='2; URL=http://gen.net/JMT_goryshue_tyri_v_shilanky.php'>
</HEAD></HTML>";
}

else
{
echo ("<p style='margin:auto; margin-top:300px; padding:7px; color:red; font-size:30px;'>Слово не добавленно в базу</p>");
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='2; URL=http://gen.net/JMT_goryshue_tyri_v_shilanky.php'>
</HEAD></HTML>";
}
?>

Заранее благодарю за ответ.

  Ответить  
 
 автор: confirm   (05.08.2012 в 16:17)   письмо автору
 
   для: Habl   (05.08.2012 в 15:56)
 

>Такое слово уже есть!!!
>Слово добавленно в базу
>Слово не добавленно в базу


Ваши сообщения, это одно слово и все, или вы сообщение как пазл собираете, по словам, уникальным? Добавленно пишется с одной н, и если учитывать такие ошибки, то представляете какова уникальность у ваших сообщений будет?

  Ответить  
 
 автор: Habl   (05.08.2012 в 17:35)   письмо автору
 
   для: confirm   (05.08.2012 в 16:17)
 

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

что никто не поможет????

  Ответить  
 
 автор: confirm   (05.08.2012 в 18:19)   письмо автору
 
   для: Habl   (05.08.2012 в 17:35)
 

Ах вон оно как, мелочи. Ну а чего тогда код пишите такой? Это получается, что нельзя добавить сообщение:
"Прикольную шнягу вчера наблюдал. Два дурика впярились в свои iPhine, и столкнулись лбами."
Так как в базе уже есть сообщение:
"Сегодня в 15:45 МСК на ул. Набережная 28 столкнулись автомобили КАМАЗ и ВАЗ2107. Пострадал КАМАЗ."
То есть базе уже содержится слово столкнулись, или то-ли потому, что в первом сообщении встречается такое слово, в общем не уникальное второе сообщение, а на туже тему.

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

  Ответить  
 
 автор: Habl   (05.08.2012 в 18:22)   письмо автору
 
   для: confirm   (05.08.2012 в 18:19)
 

Мне надо их сравнивать с базой mysql по полям, и это будет как рабочий инструмент..
Что с кодом не так?

  Ответить  
 
 автор: confirm   (05.08.2012 в 18:26)   письмо автору
 
   для: Habl   (05.08.2012 в 18:22)
 

Какой код? Я вообще не понимаю, чего вы хотите, то речь идет об уникальности, а это не пустяковая задача, теперь о каком-то сравнении по полям...

  Ответить  
 
 автор: Habl   (05.08.2012 в 18:35)   письмо автору
 
   для: confirm   (05.08.2012 в 18:26)
 

))) Давайте сначала, есть база mysql в ней таблица в которой будут хранится записи. На web странице я сделала форму добавления записей в базу. Я не могу сделать так, чтобы при занесении в базу новой записи, она сначала проверялась в базе по полю на точное вхождение того что было написано в форме, если совпадений нет то запись заносится в базу.

  Ответить  
 
 автор: confirm   (05.08.2012 в 18:54)   письмо автору
 
   для: Habl   (05.08.2012 в 18:35)
 

Слава богу, уже не о словах.
Найти точное соответствие не сложно, для этого при сохранении сообщения, сохраняйте и его хэш в другом поле, по которому легче будет найти соответствия.
Но, горькая пилюля. Вот вы написали слово с ошибкой, а кто-то напишет сообщение на 100% тоже самое, но это слово без ошибки, и эти сообщения уже не будут равны, то есть хэши они будут иметь разные. И таких пилюль много, как-то просто переставлены слова, не хватает или наоборот изобилуют знаки препинания, и т.п., и т.д.. Так что определитесь - 100% точно и баста, или... а вот или, это посложнее будет.

  Ответить  
 
 автор: Habl   (05.08.2012 в 19:33)   письмо автору
 
   для: confirm   (05.08.2012 в 18:54)
 

Это инструмент я делаю для себя так что кроме меня им пользоваться никто не будет.
Даже если я найду потом ошибку в записи просто ее исправлю, мне нужно чтобы я не забивал базу одинаковыми записями.
Да, кстати подскажите как реализовать сохранения хеша и как потом проверять хеш?

  Ответить  
 
 автор: confirm   (05.08.2012 в 19:40)   письмо автору
 
   для: Habl   (05.08.2012 в 19:33)
 

Непосредственно правка хеша вам ничего не даст, даже, если бы вы могли его править. Хеш, это например md5($message). А после редактирования сообщения, пересчитайте хеш заново и обновите его.
Но помните - это 100% совпадения, одна ошибка и ...

  Ответить  
 
 автор: Habl   (05.08.2012 в 19:43)   письмо автору
 
   для: confirm   (05.08.2012 в 19:40)
 

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

  Ответить  
 
 автор: confirm   (05.08.2012 в 19:52)   письмо автору
 
   для: Habl   (05.08.2012 в 19:43)
 

Я вот все думаю, вы так уникальны, что вероятность написания сообщения, у которого на 100% все будет тютелька у тютельку, это 100%? :)
Да что писать то, получили сообщение, получайте его хэш:
$message = md5($_POST['message']);
Теперь делайте запрос в таблицу сообщений по полю хранящему хэш (это 32-значное шестнадцатеричное число) равный вычисленному, если вернет одну строку, значит есть в базе, нет, значит сообщение иное.

  Ответить  
 
 автор: Habl   (05.08.2012 в 21:35)   письмо автору
 
   для: confirm   (05.08.2012 в 19:52)
 

Че то не получается у меня сравнить кэш, добился пока что только что кэш заносится в другое поле.

$unic = md5($goryshue_tyri_v_shilanky);

$search = mysql_query("SELECT unic FROM JMT_goryshue_tyri_v_shilanky WHERE unic = '".$_POST['goryshue_tyri_v_shilanky']."'",$db);
if ($_POST['goryshue_tyri_v_shilanky'] == $unic)
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='2; URL=http://gen.net/JMT_goryshue_tyri_v_shilanky.php'>
</HEAD></HTML>";
exit ("<p style='margin:auto; margin-top:300px; padding:7px; color:green; font-size:30px; border:solid gray 1px; width:319px;'>Такая запись уже есть :(</p>");

Подскажите что я делаю не так?

  Ответить  
 
 автор: confirm   (05.08.2012 в 21:45)   письмо автору
 
   для: Habl   (05.08.2012 в 21:35)
 

А чего вы ищите, если вычисленный хэш содержит переменная $unic, а запрос вы делаете для значения $_POST['goryshue_tyri_v_shilanky']? Наверное надо запрос для:
.... WHERE unic = '".$unic."'",$db);
после чего проверить:
if(mysql_num_rows($search)) //есть такое в базе
else //отсутствует
А if ($_POST['goryshue_tyri_v_shilanky'] == $unic), и без проверки ясно, что они не равны.

  Ответить  
 
 автор: Habl   (05.08.2012 в 22:24)   письмо автору
 
   для: confirm   (05.08.2012 в 21:45)
 

У меня вообще все перестало работать, бошка кипит уже.....

$search = mysql_query("SELECT unic FROM JMT_goryshue_tyri_v_shilanky WHERE unic =".$unic."",$db);
if(mysql_num_row($search))
{
$proba = mysql_result($search);
if ($_POST['goryshue_tyri_v_shilanky'] == $proba)
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='2; URL=http://gen.net/JMT_goryshue_tyri_v_shilanky.php'>
</HEAD></HTML>";
exit ("<p style='margin:auto; margin-top:300px; padding:7px; color:red; font-size:30px; border:solid gray 1px; width:238px;'>Такая запись уже есть</p>");
}}

  Ответить  
 
 автор: confirm   (06.08.2012 в 08:35)   письмо автору
 
   для: Habl   (05.08.2012 в 22:24)
 

Ну все правильно, чего бы работало, если я в написании имени функции допустил ошибку, исправил, но поздно, вы ее уже добросовестно скопировали.
Я вам простым языком рассказывал как, и написал даже что проверять надо, а вы бог весь что делаете.
Еще раз:
1. В таблице помимо сообщений находятся и их хэш.
2. Получая форму, вычисляем хэш нового сообщения.
3. Делаем запрос в таблицу на выборку сообщения у которого хэш равен хэш нового сообщения.
4. Если запрос вернет строку значит такое сообщение уже есть в таблице.
4. Если запрос не возвращает строку, значит сообщение новое.

  Ответить  
 
 автор: Habl   (06.08.2012 в 15:26)   письмо автору
 
   для: confirm   (06.08.2012 в 08:35)
 

Ошибку то я увидел, но реализовать у меня пока что это не получилось ... )

  Ответить  
 
 автор: confirm   (06.08.2012 в 15:37)   письмо автору
 
   для: Habl   (06.08.2012 в 15:26)
 

Если увидели, то почему ее сюда копируете, еще и объясняя, что не получается?
Сожалею, что у вас не получается, но я не знаю, как вам еще объяснить суть, и что еще написать.
Неужели до вас никак не дойдет, что результат запроса по хэш для сообщения из формы, это и есть ответ на интересующий вас вопрос? Что достаточно проверить количество возвращаемых строк и ВСЕ, это и есть ответ? И что после запроса писать if(чего-то равно чему-то?) не нужно?
Я вам все написал, прочтите еще раз внимательно и действуйте.

  Ответить  
 
 автор: Habl   (07.08.2012 в 08:30)   письмо автору
 
   для: confirm   (06.08.2012 в 15:37)
 

Вы же сами написали условие после запроса, разве не надо проверять какие строки вернул мне запрос?

  Ответить  
 
 автор: confirm   (07.08.2012 в 08:46)   письмо автору
 
   для: Habl   (07.08.2012 в 08:30)
 

Даже так? Это где я такое писал?
Я писал - если запрос возвращает строку, значит запись в базе есть, иначе (количество возвращаемых строк равно нулю) такой записи нет. И написал код - что надо проверять.
В этом есть хоть намек на то, что нужно проверять какое-то полученное значение какого-то поля с чем-то?

  Ответить  
 
 автор: Habl   (07.08.2012 в 10:12)   письмо автору
 
   для: confirm   (07.08.2012 в 08:46)
 

Ясно, буду пробовать.. Большое спасибо за помощь, если что еще обращусь.

  Ответить  
 
 автор: Valick   (05.08.2012 в 18:59)   письмо автору
 
   для: Habl   (05.08.2012 в 18:22)
 

Что с кодом не так?
не обижайтесь, но кода у вас просто НЕТ, точнее то что есть нельзя назвать кодом
___
вам нужно проверить заголовок новости или всю новость целиком?
если заголовок, то точное совпадение проверить легко (включая точки, тире, запятые, пробелы и тд)

  Ответить  
 
 автор: Habl   (05.08.2012 в 19:30)   письмо автору
 
   для: Valick   (05.08.2012 в 18:59)
 

Это инструмент я делаю для себя так что кроме меня им пользоваться никто не будет.
А вот про то что вы написали проверить заголовок, это вы про что?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования