Сделал два файла, один с формой, другой обработчик.
Я вставляю список в текстовое поле, и отправляю это на обработчик. После чего делаю массив строк и проверяю каждую строку по очереди. Но почему-то не очень это все работает. Зависит от последовательности проверки. То показывает что запись есть в базе, то показывает что нет. Подскажите что делать?
Похожие два файла позволяют добавлять строки в бд (аналогичным способом).
В phpmyadmin установлена уникальность для поля с название песни. Но иногда строку можно добавить дважды. Значит есть различие. Но какое? Если строки идентичные. Помогите!
Файл с формой:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Список проверяемых песен</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="testing.php">
<p>
<label>Введите название песнен:<br />
<textarea name="list_sound" id="list_sound" cols="100" rows="20"></textarea>
</label>
</p>
<p>
<label>
<input type="submit" name="submit" id="submit" value="Проверить песни" />
</label>
</p>
</form>
<p><a href="/index.php">Главная</a></p>
</body>
</html>
Файл обработчик:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Проверка песен</title>
</head>
<body><?php
include ("settings.php");
if (isset($_POST['list_sound'])) {$list_sound = $_POST['list_sound'];
$list_sound=trim($list_sound);
if($list_sound == '') {unset($list_sound);}}
if (isset($list_sound))
{
echo "<table border='1'>";
$array = explode("\n", $list_sound);
for ( $i=0; $i<count($array); $i++)
{
$pesni = mysql_query ("SELECT name_sound FROM `top1000` WHERE (name_sound='$array[$i]')" ,$link);
$myrow_pesni = mysql_fetch_array ($pesni);
if (mysql_num_rows($pesni)) {
echo "<tr><td>".$myrow_pesni['name_sound']."</td><td style='background-color:#0F0' width='80'>Есть в базе!</td></tr>";
} else {
echo "<tr><td><b>".$array[$i]."</b></td><td style='background-color:#F00; color:#fff;' width='80'>Нет в базе!</td></tr>";}
}
echo "</table>";
}
else {echo "<p>Вы не ввели название песни<p>";}
mysql_close($link);
?>
<p><a href="/index.php">Главная</a></p>
</body>
</html>
Спустя 4 минуты, 31 секунда (28.12.2011 - 15:21) Winston написал(а):
Вот так проверять нужно.
$query = mysql_query("SELECT ..... WHERE `field` = '".mysql_real_escape_string($search)."'");
if(mysql_num_rows($query) > 0)
echo 'есть';
else
echo 'Нету';
Спустя 1 минута, 48 секунд (28.12.2011 - 15:23) vertraut написал(а):
Цитата (Winston @ 28.12.2011 - 12:21) |
Вот так проверять нужно.$query = mysql_query("SELECT ..... WHERE `field` = '".mysql_real_escape_string($search)."'"); |
Спасибо большое) Но можно чуть подробнее, почему именно так? а не так как я?
Спустя 23 минуты, 21 секунда (28.12.2011 - 15:46) rooor написал(а):
Цитата (vertraut @ 28.12.2011 - 12:17) |
$pesni = mysql_query ("SELECT name_sound FROM `top1000` WHERE (name_sound='$array[$i]')" ,$link); |
Сначала загоняешь данные из базы, а потом проверяешь есть ли эти данные? о_О
Спустя 1 минута, 12 секунд (28.12.2011 - 15:48) vertraut написал(а):
Winston, вставил все как Вы сказали. Ничего не поменялось. Если искать в том же порядке, в котором я их занес в базу, то все нормально. Если изменить порядок, то уже не на всех показывает правильно.
Спустя 1 минута, 38 секунд (28.12.2011 - 15:49) vertraut написал(а):
Цитата (rooor @ 28.12.2011 - 12:46) |
Сначала загоняешь данные из базы, а потом проверяешь есть ли эти данные? о_О |
Я вставляю строки которые нужно проверить в текстовое поле, после чего поочередно пытаюсь выбрать строку в бд, если удается, значит есть строка, если не удается, то строки в базе нет.
Спустя 1 минута, 4 секунды (28.12.2011 - 15:50) rooor написал(а):
$sql = mysql_query(" запрос ");
if(mysql_num_rows($sql) > 0) // сначала надо проверить - есть данные или нет
{
$result = mysql_fetch_assoc($sql); // только потом загонять в массив, если есть запись
}
Спустя 12 минут, 59 секунд (28.12.2011 - 16:03) vertraut написал(а):
хм... не совсем понял для чего это? Зачем мне загонять в массив данные из БД?
Спустя 2 минуты, 48 секунд (28.12.2011 - 16:06) rooor написал(а):
<?php
include './settings.php';
if (isset($_POST['list_sound']) && !empty(trim($_POST['list_sound'])))
$list_sound = trim($_POST['list_sound']);
if (isset($list_sound))
{
echo "<table border='1'>";
$array = explode("\n", $list_sound);
foreach ( $array as $value)
{
$pesni = mysql_query ("SELECT `name_sound` FROM `top1000` WHERE `name_sound` = '".mysql_escape_string($value)."' LIMIT 1");
if (mysql_num_rows($pesni) > 0)
{
$myrow_pesni = mysql_fetch_assoc($pesni);
echo "<tr><td>".$myrow_pesni['name_sound']."</td><td style='background-color:#0F0' width='80'>Есть в базе!</td></tr>";
}
else
{
echo "<tr><td><b>".$value."</b></td><td style='background-color:#F00; color:#fff;' width='80'>Нет в базе!</td></tr>";}
}
echo "</table>";
}
}
else
echo "<p>Вы не ввели название песни<p>";
?>
Спустя 1 день, 6 часов, 11 минут, 4 секунды (29.12.2011 - 22:17) vertraut написал(а):
Спасибо! Вроде все работает! Только при проверке последняя строка всегда "отсутствует". Хотя она есть в базе. Подскажите почему?
Спустя 1 минута, 44 секунды (29.12.2011 - 22:19) vertraut написал(а):
И по поводу повторного добавления строк в базу. Поставил в phpmyadmin чтобы поле было уникальным, но в зависимости от того откуда скопируешь строки они могут занестись в базу повторно. Как избежать дубликатов! В базе строки выглядят одинаково.
Спустя 1 час, 30 минут, 32 секунды (29.12.2011 - 23:50) Guest написал(а):
Неужели никто не знает? Подскажите пожалуйста)
Спустя 1 час, 26 минут, 6 секунд (30.12.2011 - 01:16) inpost написал(а):
Ну а как ты код исправил, показывай. И запись из БД покажи, что существует.
Спустя 7 часов, 54 минуты, 13 секунд (30.12.2011 - 09:10) vertraut написал(а):
Цитата (inpost @ 29.12.2011 - 22:16) |
Ну а как ты код исправил, показывай. И запись из БД покажи, что существует. |
В смысле запись из БД?
Спустя 8 минут, 15 секунд (30.12.2011 - 09:18) vertraut написал(а):
Файлы моего скрипта:
Форма добавления строк в базу:
Добавление в базу (обработчик):
Проверка строк (форма):
Проверка строк (обработчик):
Форма добавления строк в базу:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
<title>Добавление песен в базу</title>
</head>
<body>
<h1>ДОБАВЛЕНИЕ</h1>
<form id="form1" name="form1" method="post" action="1.php">
<p>
<label>Введите название песнен:<br />
<textarea name="list_sound" id="list_sound" cols="100" rows="20"></textarea>
</label>
</p>
<p>
<label>
<input type="submit" name="submit" id="submit" value="Занести песни в базу" />
</label>
</p>
</form>
<p><a href="/index.php">Главная</a></p>
</body>
</html>
Добавление в базу (обработчик):
<?php
include ("settings.php");
if (isset($_POST['list_sound'])) {$list_sound = $_POST['list_sound'];
$list_sound=trim($list_sound);
if($list_sound == '') {unset($list_sound);}}
if (isset($list_sound))
{
$array = explode("\n", $list_sound);
for ( $i=0; $i<count($array); $i++)
{
$result1 = mysql_query ("INSERT INTO top1000 (name_sound) VALUES ('".mysql_real_escape_string($array[$i])."')");
if ($result1 <> 'true') {echo $array[$i]."<br>";}
}
}
else {echo "<p>Вы не ввели название песни<p>";}
mysql_close($link);
?>
<p><a href="/index.php">Главная</a></p>
Проверка строк (форма):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Список проверяемых песен</title>
</head>
<body><h1>ПРОВЕРКА</h1>
<form id="form1" name="form1" method="post" action="testing.php">
<p>
<label>Введите название песнен:<br />
<textarea name="list_sound" id="list_sound" cols="100" rows="20"></textarea>
</label>
</p>
<p>
<label>
<input type="submit" name="submit" id="submit" value="Проверить песни" />
</label>
</p>
</form>
<p><a href="/index.php">Главная</a></p>
</body>
</html>
Проверка строк (обработчик):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Проверка песен</title>
</head>
<body><?php
include ("settings.php");
if (isset($_POST['list_sound'])) {$list_sound = $_POST['list_sound'];
$list_sound=trim($list_sound);
if($list_sound == '') {unset($list_sound);}}
if (isset($list_sound))
{
$array = explode("\n", $list_sound);
echo "<table border='1'>";
for ( $i=0; $i<count($array); $i++)
{
$query = mysql_query("SELECT name_sound FROM `top1000` WHERE `name_sound` = '".mysql_real_escape_string($array[$i])."'");
if(mysql_num_rows($query) > 0){
$myrow_pesni = mysql_fetch_assoc($query);
echo "<tr><td>".$myrow_pesni['name_sound']."</td><td style='background-color:#0F0' width='80'>Есть в базе!</td></tr>";}
else
{echo "<tr><td><b>".$array[$i]."</b></td><td style='background-color:#F00; color:#fff;' width='80'>Нет в базе!</td></tr>";}
}
echo "</table>";
}
else {echo "<p>Вы не ввели название песни<p>";}
mysql_close($link);
?>
<p><a href="/index.php">Главная</a></p>
</body>
</html>
Спустя 1 день, 4 часа, 40 минут, 3 секунды (31.12.2011 - 13:58) vertraut написал(а):
Никто не знает? Ошибки пустяковые для знатаков) Может какие функции нужно использовать, которые приведут строку всегда к одному виду?
Спустя 1 час, 12 минут, 11 секунд (31.12.2011 - 15:10) inpost написал(а):
Что будет делаться, если человек введёт дубль? Что тебе надо?
1) Обновить старую запись:
insert on duplicate key update
2) Старую запись не трогать:
В начале делаешь запрос №1:
SELECT `name` FROM `table` WHERE name IN (тут перечисляешь все имена: используй implode(''), не забываем кавычки!)
В цикле while формируешь второй массив имён `name`. Далее 2 массива сравниваешь между собой и выбираешь ТОЛЬКО уникальные значения. Функция: http://php.su/functions/?array-diff (array_diff)
Вуаля, теперь спокойно в БД будут вставляться только УНИКАЛЬНЫЕ записи.
1) Обновить старую запись:
insert on duplicate key update
2) Старую запись не трогать:
В начале делаешь запрос №1:
SELECT `name` FROM `table` WHERE name IN (тут перечисляешь все имена: используй implode(''), не забываем кавычки!)
В цикле while формируешь второй массив имён `name`. Далее 2 массива сравниваешь между собой и выбираешь ТОЛЬКО уникальные значения. Функция: http://php.su/functions/?array-diff (array_diff)
Вуаля, теперь спокойно в БД будут вставляться только УНИКАЛЬНЫЕ записи.
Спустя 2 дня, 6 часов, 19 минут, 40 секунд (3.01.2012 - 21:30) vertraut написал(а):
Спасибо! Интересует именно второй случай. Я в базе поставил полю с названием песни "уникальный". Это не заменяет сравнение массивов? Зачастую это работает, но иногда строка добавляется дважды. Возможно она просто чем-то отличается от предыдущей (какие-то невидимые символы). Есть функция которая очищает от всех пробелов и других символов?
Спустя 1 час, 14 минут, 33 секунды (3.01.2012 - 22:45) rooor написал(а):
trim - Удаляет пробелы из начала и конца строки
Спустя 20 минут, 34 секунды (3.01.2012 - 23:05) Игорь_Vasinsky написал(а):
Спустя 1 час, 27 минут, 18 секунд (4.01.2012 - 00:32) v.ru.n32 написал(а):
ты кстати небоишься ошибки с кодировками. смотри а то есть вероятность ошибки при использовании русского апача. апач увидит заголовок передан в формате windows1251 а кодировка на апатче русском будит стоять кодировка например KIO8. в итоге апач поменяет кодировку windows на koi8 но <meta> изменить неможет. пользователь увидит текст кодировки windows в кодировки kio.
Спустя 18 часов, 26 минут, 47 секунд (4.01.2012 - 18:59) vertraut написал(а):
Цитата (v.ru.n32 @ 3.01.2012 - 21:32) |
ты кстати небоишься ошибки с кодировками. смотри а то есть вероятность ошибки при использовании русского апача. апач увидит заголовок передан в формате windows1251 а кодировка на апатче русском будит стоять кодировка например KIO8. в итоге апач поменяет кодировку windows на koi8 но <meta> изменить неможет. пользователь увидит текст кодировки windows в кодировки kio. |
Да, у меня постоянные проблемы с кодировкой, мучаюсь, думаю как исправиль
Спустя 1 минута, 3 секунды (4.01.2012 - 19:00) inpost написал(а):
снести сайт и переписать на UTF-8, это стандартная кодировка.
Спустя 1 час, 14 минут, 34 секунды (4.01.2012 - 20:15) v.ru.n32 написал(а):
vertraut
ты ща серьезно или типо пошутил? если серьезно поставь другой атач и все. если вломно ставить ребята собрали достойную замену называеться ДЕНВЕР. можешь попробовать.
ты ща серьезно или типо пошутил? если серьезно поставь другой атач и все. если вломно ставить ребята собрали достойную замену называеться ДЕНВЕР. можешь попробовать.
Спустя 21 час, 1 минута, 27 секунд (5.01.2012 - 17:16) vertraut написал(а):
Цитата (v.ru.n32 @ 4.01.2012 - 17:15) |
vertraut ты ща серьезно или типо пошутил? если серьезно поставь другой атач и все. если вломно ставить ребята собрали достойную замену называеться ДЕНВЕР. можешь попробовать. |
я пользуюсь денвером) то нормально отображает текст, то иероглифами...
Спустя 14 минут, 15 секунд (5.01.2012 - 17:30) vertraut написал(а):
На счет дублирования строк...
Сделал экспорт, чтобы посмотреть чем же отличаются строки. И различие действительно есть... Например,
(1022, 'Arash & Блестящие - Восточные Сказки 4.88 Мб \r')
(906, 'Arash & Блестящие - Восточные Сказки 4.88 Мб\r').
В первой строке есть пробел после Мб, во второй нет.
Есть еще, но это лучше сделать скриншотом, т.к. когда вставляешь текст, то теряются различия:
Как это исправить? Какую функцию использовать?
Сделал экспорт, чтобы посмотреть чем же отличаются строки. И различие действительно есть... Например,
(1022, 'Arash & Блестящие - Восточные Сказки 4.88 Мб \r')
(906, 'Arash & Блестящие - Восточные Сказки 4.88 Мб\r').
В первой строке есть пробел после Мб, во второй нет.
Есть еще, но это лучше сделать скриншотом, т.к. когда вставляешь текст, то теряются различия:
Как это исправить? Какую функцию использовать?
Спустя 3 дня, 17 часов, 47 секунд (9.01.2012 - 10:31) vertraut написал(а):
Пожалуйста, подскажите)
Спустя 3 часа, 3 минуты, 16 секунд (9.01.2012 - 13:35) nugle написал(а):
у тебя перед внесение данных в бд остаются пробелы, обрабатывай функцией trim