[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Записать/обновить БД
.404.
Доброго времени суток! Начну с описания цели: в textarea вводится текст, передается скрипту, который разбивает его на строки и каждую строку заносит в БД. При этом идет проверка, если такая строка уже есть - ее счетчик увеличивается.
Таблица имеет вид:
id | name |count
Мой код:

PHP
$pole=$_REQUEST['text'];
$num=substr_count ($pole"\n");
$word explode("\n"$pole);


for (
$i=0$i<=$num$i++) {
$iffound mysql_query("[SELECT name FROM blabla WHERE name = '$word[$i]'");
if (
mysql_num_rows($iffound) > 0)
 
$result=mysql_query("UPDATE blabla SET count=count+1 WHERE name = '$word[$i]'");
 else
$result mysql_query("INSERT INTO blabla VALUES ('id', '$word[$i]', '1')");
}


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



Спустя 19 минут, 12 секунд (10.04.2009 - 00:50) kirik написал(а):
Что это ...("[SELECT...?

Поле с записями у тебя должно быть обозначено как уникальное
SQL
ALTER TABLE `table` ADD UNIQUE ( `field` )

и запрос тогда будет выглядеть как-то так:
SQL
INSERT INTO `blabla` (`field1`,`field2`,`field3`) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE `count` = `count` + 1

(тоесть вместо твоих трех запросов SELECT, UPDATE, INSERT можешь юзать один этот)

ЗЫ. запросы в цикле не очень хороши..

Спустя 6 часов, 24 минуты, 52 секунды (10.04.2009 - 07:15) Joker написал(а):
Почему все вносят, перменные в строки где так учат делать? Даже попов, так не учит)) оптимизациято то какая то должна же быть)))

Ведь так работает быстрее
PHP
$str = 'www'.$t.'www';

Чем так.
PHP
$str = "www$twww";

Спустя 21 минута, 19 секунд (10.04.2009 - 07:36) kirik написал(а):
Цитата (Joker @ 9.04.2009 - 23:15)
Чем так.
PHP
$str = 'www$twww';

Так работать не будет wink.gif

Спустя 4 минуты, 57 секунд (10.04.2009 - 07:41) Joker написал(а):
не те кавычки поставил)

Спустя 16 минут, 21 секунда (10.04.2009 - 07:57) kirik написал(а):
Цитата (Joker @ 9.04.2009 - 23:41)
не те кавычки поставил)

А еще? smile.gif

Спустя 1 минута, 59 секунд (10.04.2009 - 07:59) Joker написал(а):
blink.gif а что еще??

Спустя 15 минут, 20 секунд (10.04.2009 - 08:15) kirik написал(а):
Думай, внимательнее, попробуй выполнить smile.gif

Спустя 2 минуты, 41 секунда (10.04.2009 - 08:17) Joker написал(а):
Ну вот)
PHP
<?php
$t 
= 'ff';
echo "www $t www";


я этим некогда не пользовался) поэтому траблы))

Спустя 11 минут, 56 секунд (10.04.2009 - 08:29) kirik написал(а):
Нашел! smile.gif
А если тебе нужно вот так, в двойных кавычках, вывести wwwffwww (из твоего кода)? Без конкатенации!

Спустя 14 часов, 26 минут, 42 секунды (10.04.2009 - 22:56) Guest написал(а):
kirik
Спасибо огромнейшее! Работает все. Надо за SQL сесть, не знал, что такие мощные возможности дает)

Спустя 31 минута, 59 секунд (10.04.2009 - 23:28) .404. написал(а):
Это был я smile.gif Хотя возникло одно подозрение, не могу не поделиться. Все окончательно заработало только после обработки каждой вносимой в поле строчки с помощью trim. До этого в таблицу все равно добавлялись два одинаковых значения. То есть иногда вместе со словом попадают всякие управляющие символы и прочее, отрезаемое trim'ом, что делает записи разными? Ерунда же, а в чем суть тогда? wub.gif

Спустя 8 минут, 13 секунд (10.04.2009 - 23:36) sergeiss написал(а):
Цитата (.404. @ 10.04.2009 - 23:28)
То есть иногда вместе со словом попадают всякие управляющие символы и прочее, отрезаемое trim'ом, что делает записи разными? Ерунда же, а в чем суть тогда? wub.gif

Дабы лучше это понять, выведи все полученные строки в браузер (до обработки их trim'ом), заключая каждую в какие-то знаки, например в апострофы или скобки.
А потом просмотри текст полученной страницы (такая фича есть и в Опере, и в Эксплорере). Я думаю, что понятнее станет, что же ты вводил.

Использование функции trim, я думаю, наиболее грамотное решение.

Спустя 4 минуты, 26 секунд (10.04.2009 - 23:41) kirik написал(а):
Цитата (.404. @ 10.04.2009 - 15:28)
Ерунда же, а в чем суть тогда?

Почему ерунда? smile.gif Пробелы тоже люди smile.gif

Цитата (sergeiss @ 10.04.2009 - 15:36)
Использование функции trim, я думаю, наиболее грамотное решение.

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

Спустя 2 месяца, 4 дня, 9 часов, 45 минут, 46 секунд (15.06.2009 - 09:26) Slavok47 написал(а):
Всем привет! давно мучаюсь над проблемой замены данных вместо добавленя новой строки и нашел этот топик, собственно вопрос такой, если использую так:
PHP
$iffound mysql_query("SELECT name FROM blabla WHERE name = '$name'");
if (
mysql_num_rows($iffound) > 0)
 
$result=mysql_query("UPDATE blabla SET name WHERE name = '$name'");
 else
$result mysql_query("INSERT INTO blabla (name) VALUES ( '$name' )");
}


или это:
PHP
$pole=$_REQUEST['text'];
$num=substr_count ($pole"\n");
$word explode("\n"$pole);

тоже является обязательным параметором? как у товарища 404

сразу скажу что база будет не большая всего 40 строк(кстати как сделать это ограничение еще предстоит разобраться), задача всего лишь сделать замену данных в строке где совпадает name, буду признателен за помощь!

Спустя 6 часов, 41 минута, 33 секунды (15.06.2009 - 16:08) kirik написал(а):
Цитата (Slavok47 @ 15.06.2009 - 01:26)
PHP
$iffound = mysql_query("SELECT name FROM blabla WHERE name = '$name'");
if (mysql_num_rows($iffound) > 0)
 $result=mysql_query("UPDATE blabla SET name WHERE name = '$name'");
 else
$result 
= mysql_query("INSERT INTO blabla (name) VALUES ( '$name' )");
}


Можно заменить на

PHP
mysql_query("REPLACE INTO `blabla` (`name`) VALUES ('$name')");

при условии что `name` - уникально

Про второй пример (с $_REQUEST['text']) не понял..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.