|
|
|
| доброго времени суток. подскажитее как сделать массовую замену в бд..
в бд лежит название картинок и информация о них.... я вывожу несколько картинок и изменю в них инфоормацию. вот как то так, и чего то у меня не получается | |
|
|
|
|
|
|
|
для: admin
(01.07.2011 в 20:11)
| | А приведите запрос которым производите изменения (хорошо бы еще структуру таблицы посмотреть)? | |
|
|
|
|
|
|
|
для: cheops
(02.07.2011 в 00:14)
| | mysql_query ("UPDATE umages SET artikle='$artikle' name='$name' catalog='$catalog' sezon='sezon' delet='$delet' WHERE id='$id' ");
CREATE TABLE IF NOT EXISTS `umages` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`images` varchar(9999) NOT NULL,
`artikle` text NOT NULL,
`name` text NOT NULL,
`catalog` text NOT NULL,
`sezon` text NOT NULL,
`delete` tinyint(255) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1112 ;
|
| |
|
|
|
|
|
|
|
для: admin
(02.07.2011 в 00:57)
| | Хм... а почему запятых нет между изменяемыми полями?
<?php
$query = "UPDATE umages
SET artikle='$artikle', name='$name', catalog='$catalog', sezon='sezon', delet='$delet'
WHERE id='$id' ";
if(!mysql_query ($query)) exit("Ошибка - ".mysql_error());
|
PS Вообще, когда выполняются SQL-запросы с динамическими переменными (да и без них тоже, например, тут они оказались не причем), лучше всегда проверять правильность выполнения запроса и выводить состояние mysql_error(), если запрос выполнился не правильно. PHP и MySQL - это разные среды, PHP ничего сам не скажет, если на стороне MySQL произошла ошибка - он просто о ней ничего не знает. | |
|
|
|
|
|
|
|
для: cheops
(02.07.2011 в 13:29)
| | я просто торопился када сюда писал. в оригинале зааятые есть!! это изменения для одного ид! а если я скажем буду меня информацию в нескольких ид тогда как код выглядеть будет? предположим:
ид название описание каталог сезон
300 куртка ололо туту лето - тут меняем сезон на зиму
345 перчатка ололо каное зима - тут меняем описание
500 варежка ололо агути зима - тут меняем название
и т.д.
и это все отправляем одной формой в сюда
$query = "UPDATE umages
SET artikle='$artikle', name='$name', catalog='$catalog', sezon='sezon', delet='$delet'
WHERE id='$id' ";
if(!mysql_query ($query)) exit("Ошибка - ".mysql_error());
|
изменения же произойдет только в одном ид.. | |
|
|
|
|
|
|
|
для: admin
(02.07.2011 в 18:19)
| | Меняйте условия в WHERE на подходящие вам, например, для сезона (в этом случае будут затрагиваться все строки, которые удовлетворяют условию)
$query = "UPDATE umages
SET sezon='зима'
WHERE sezon='лето' ";
|
| |
|
|
|
|
|
|
|
для: cheops
(02.07.2011 в 20:47)
| | предположим в адресной строке я передаю
http://local/5.php?id=1&names=11&id=2&names=11&id=3&names=3&id=4&names=11&id=5&names=4&id=6&names=11&id=7&names=6&id=8&names=11&id=9&names=5&id=10&names=11&id=11&names=7
if (isset($_GET['names'])){
$names = $_GET['names'];
$id = $_GET['id'];
$ok = mysql_query ("UPDATE text SET text='$names' WHERE id='$id' ");
}
|
как сделать чтобы при передачи 11 ид помменялась информация в бд во всех 11 ид???
при такой передаче меняется только в последнем ид | |
|
|
|
|
|
|
|
для: admin
(02.07.2011 в 21:55)
| | Вам не удобно будет с таким URL, так как его придется разбирать вручную, лучше передавать массив
http://local/5.php?id[]=1&names[]=11&id[]=2&names[]=11&id[]=3&names[]=3&id[]=4&names[]=11&id[]=5&names[]=4&id[]=6&names[]=11&id[]=7&names[]=6&id[]=8&names[]=11&id[]=9&names[]=5&id[]=10&names[]=11&id[]=11&names[]=7
Каждому id соответствует свой собственный номер? Тогда придется сформировать 11 UPDATE-запросов (без учета проверки на безопасность так)
<?php
for($i = 0; $i < count($_GET['id']); $i++)
{
$query = "UPDATE `text` SET `text`='".$_GET['name'][$i]."'
WHERE id='".$_GET['id'][$i]."'
LIMIT 1";
if(!mysql_query($query)) exit("Ошибка обновления базы данных - ".mysql_error());
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(02.07.2011 в 22:09)
| | id[]=1&names[]=11 - это обязательно делать?? ведь ид присваивается
хм.. странно но изменений нет если применять
<?php
for($i = 0; $i < count($_GET['id']); $i++)
{
$query = "UPDATE `text` SET `text`='".$_GET['name'][$i]."'
WHERE id='".$_GET['id'][$i]."'
LIMIT 1";
if(!mysql_query($query)) exit("Ошибка обновления базы данных - ".mysql_error());
}
?>
|
| |
|
|
|
|
|
|
|
для: admin
(02.07.2011 в 22:49)
| | Для начала распечатайте массив $_GET - как он выглядит (у меня нет вашей базы данных, поэтому сразу готовый скрипт я предоставить не могу, может что-то сбоить)? А еще лучше запросы $query.
<?php
echo "<pre>";
print_r($_GET);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(02.07.2011 в 22:55)
| | выводит только последни ид
Array
(
[id] => 11
[text] => 1212122
)
|
вы можете для примера сдлеать на своей бд?? а по вашему примеру я переделаю под свою бд
скажите что это за ошибка
Ошибка обновления базы данных - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
|
| |
|
|
|
|
|
|
|
для: admin
(02.07.2011 в 23:34)
| | Значит не используете URL с квадратными скобками, который формирует двумерный массив и у вас все переменные схлапываются в две. Нужно добавить квадратные скобки после каждого GET-параметра, как я привел выше. | |
|
|
|
|
|
|
|
для: cheops
(03.07.2011 в 09:00)
| |
http://local/5.php?id[1]=1&names[1]=&id[2]=2&names[2]=&id[3]=3&names[3]=&id[4]=4&names[4]=&id[5]=5&names[5]=&id[6]=6&names[6]=&id[7]=7&names[7]=&id[8]=8&names[8]=&id[9]=9&names[9]=&id[10]=10&names[10]=
|
помоему так должно получиться? | |
|
|
|
|
|
|
|
для: admin
(03.07.2011 в 12:26)
| | Да, вот с этими параметрами как себя скрипт ведет? | |
|
|
|
|
|
|
|
для: cheops
(03.07.2011 в 13:30)
| | да не как никаких изменений! | |
|
|
|
|
|
|
|
для: admin
(04.07.2011 в 10:16)
| | Т.е. выводится
Array
(
[id] => 11
[text] => 1212122
)
| почему кстати, text, а не name, у нас же нет GET-параметра text в строке запроса? | |
|
|
|
|
|
|
|
для: cheops
(04.07.2011 в 11:54)
| | нет выводится полный список array
просто замена в бд почемуто не происходит | |
|
|
|
|
|
|
|
для: admin
(04.07.2011 в 12:40)
| | А сообщения об ошибках какие-нибудь выводятся? Кроме этого, что выводит следующий скрипт?
<?php
for($i = 0; $i < count($_GET['id']); $i++)
{
$query = "UPDATE `text` SET `text`='".$_GET['name'][$i]."'
WHERE id='".$_GET['id'][$i]."'
LIMIT 1";
echo $query."<br>";
}
?>
| PS Попробуйте также заменить name на names (у вас же имя GET-параметра во множественном числе указано). | |
|
|
|