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

Форум MySQL

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

 

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

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

тема: массовая замена информации в бд
 
 автор: admin   (01.07.2011 в 20:11)   письмо автору
 
 

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

  Ответить  
 
 автор: cheops   (02.07.2011 в 00:14)   письмо автору
 
   для: admin   (01.07.2011 в 20:11)
 

А приведите запрос которым производите изменения (хорошо бы еще структуру таблицы посмотреть)?

  Ответить  
 
 автор: admin   (02.07.2011 в 00:57)   письмо автору
 
   для: 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 ;

  Ответить  
 
 автор: cheops   (02.07.2011 в 13:29)   письмо автору
 
   для: 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 произошла ошибка - он просто о ней ничего не знает.

  Ответить  
 
 автор: admin   (02.07.2011 в 18:19)   письмо автору
 
   для: 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());

изменения же произойдет только в одном ид..

  Ответить  
 
 автор: cheops   (02.07.2011 в 20:47)   письмо автору
 
   для: admin   (02.07.2011 в 18:19)
 

Меняйте условия в WHERE на подходящие вам, например, для сезона (в этом случае будут затрагиваться все строки, которые удовлетворяют условию)
  $query = "UPDATE umages 
         SET sezon='зима' 
         WHERE sezon='лето' ";

  Ответить  
 
 автор: admin   (02.07.2011 в 21:55)   письмо автору
 
   для: 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 ид???
при такой передаче меняется только в последнем ид

  Ответить  
 
 автор: cheops   (02.07.2011 в 22:09)   письмо автору
 
   для: 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());
  }
?>

  Ответить  
 
 автор: admin   (02.07.2011 в 22:49)   письмо автору
 
   для: 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());
  }
?> 

  Ответить  
 
 автор: cheops   (02.07.2011 в 22:55)   письмо автору
 
   для: admin   (02.07.2011 в 22:49)
 

Для начала распечатайте массив $_GET - как он выглядит (у меня нет вашей базы данных, поэтому сразу готовый скрипт я предоставить не могу, может что-то сбоить)? А еще лучше запросы $query.
<?php
  
echo "<pre>";
  
print_r($_GET);
  echo 
"</pre>";
?>

  Ответить  
 
 автор: admin   (02.07.2011 в 23:34)   письмо автору
 
   для: 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

  Ответить  
 
 автор: cheops   (03.07.2011 в 09:00)   письмо автору
 
   для: admin   (02.07.2011 в 23:34)
 

Значит не используете URL с квадратными скобками, который формирует двумерный массив и у вас все переменные схлапываются в две. Нужно добавить квадратные скобки после каждого GET-параметра, как я привел выше.

  Ответить  
 
 автор: admin   (03.07.2011 в 12:26)   письмо автору
 
   для: 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]=

помоему так должно получиться?

  Ответить  
 
 автор: cheops   (03.07.2011 в 13:30)   письмо автору
 
   для: admin   (03.07.2011 в 12:26)
 

Да, вот с этими параметрами как себя скрипт ведет?

  Ответить  
 
 автор: admin   (04.07.2011 в 10:16)   письмо автору
 
   для: cheops   (03.07.2011 в 13:30)
 

да не как никаких изменений!

  Ответить  
 
 автор: cheops   (04.07.2011 в 11:54)   письмо автору
 
   для: admin   (04.07.2011 в 10:16)
 

Т.е. выводится
Array 

    [id] => 11 
    [text] => 1212122 
)
почему кстати, text, а не name, у нас же нет GET-параметра text в строке запроса?

  Ответить  
 
 автор: admin   (04.07.2011 в 12:40)   письмо автору
 
   для: cheops   (04.07.2011 в 11:54)
 

нет выводится полный список array
просто замена в бд почемуто не происходит

  Ответить  
 
 автор: cheops   (04.07.2011 в 12:50)   письмо автору
 
   для: 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-параметра во множественном числе указано).

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

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