Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
1

апдейт в базе

27.09.2012, 10:28. Показов 1999. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть у меня в базе таблица с полем 1- рубрики товара (name).
вот хочу продублировать это поле - вставить те же самые значения в поле2 (name2), но переведя их в транслит.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$rus = array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ь','ы','э','ю','я','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь','Ы','Э','Ю','Я','~','`','!','@','#','$','%','^','&','*','(',')','+','=','|','\\','"','№',';',':','?','/','<','>','_',' ','\'','.',',','«','»','!','-');
$eng = array('a','b','v','g','d','e','yo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','',"",'y',"e",'yu','ya','A','B','V','G','D','E','Yo','Zh','Z','I','J','K','L','M','N','O','P','R','S','T','U','F','H','C','Ch','Sh','Sch','','','Y',"E",'Yu','Ya','','','','','','','','','','','','','','','','','','','','','','','','','-','-','','-','-','','','','-');
 
$query = "select id,name from biggroup";
$result = mysql_query($query) or die("Invalid query: " . mysql_error());
       while($row = mysql_fetch_assoc($result))
            {
            $name=$row['name'];
          if(in_array(substr($name,0,1),$rus))
            {
                $url=ucwords(strtolower(str_replace($rus,$eng,$name)));
                echo '<p>'.$url.'</p>';
            }
            
            }
это я достал уже данные из поля 1 - name и перевел их в транслит.
а как мне их обратно теперь засунуть в поле name2??

т.е. по сути мне нужен апдейт или инсерт??там пусто первоначально
как проще в транслит перевести и вставить их в поле name2???
а то у меня дурацкие мысли - что типо выводить сначала в инпуты все (текстфилды), потом добавить кнопку на апдейт - по которой у меня все из текстфилдов будет браться и переводиться в транслит и засовываться в базу - ну не бред ли?? как проще?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2012, 10:28
Ответы с готовыми решениями:

апдейт
просто интересно как у Вас дела после сегодняшнего апдейта, у меня чего-то почти все поуезжало,...

апдейт 4.03.06
ура. поиск нормализовался. Яша выдавать стал то что нужно=) кол-во бэклинков правда, почему-то,...

Апдейт?
вижу движение... 3 -&gt; 4 место..

Апдейт 28.03.06
Результаты апдейта: 1. Яндекс потерял много морд. 2. По ВЧ &quot;наружная реклама&quot; +2 3. По СЧ...

35
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
27.09.2012, 10:40 2
Цитата Сообщение от Sergio Aguero
т.е. по сути мне нужен апдейт или инсерт??там пусто первоначально
INSERT - создание новой строки. UPDATE - изменение существующей строки
0
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
27.09.2012, 10:41  [ТС] 3
или тока через текстфилды и кнопку можно апдейт сделать?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.09.2012, 10:42 4
Цитата Сообщение от Sergio Aguero Посмотреть сообщение
'Ya','','','','','','','','','','','','','','','','','','','','','','','','','-'
ну имхо это лучше вынести в отдельный массив и заменять разом
PHP
1
2
$arr = array('#','&','?',....);
$text = str_replace($arr,'',$text);
минусов (на замену) пять, там по желанию, можно и оставить, можно и вынести таким же образом..
можно использовать strtr если загнать все в один массив вида
исходное_значение => нужное_значение
и заменять
И запрос на обновление данных, не нужны никакие инпуты.
PHP
1
2
$query = 'UPDATE `bigroup` SET `field2`="'.$text.'" WHERE `id`="'.$id.'"';
....
1
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
27.09.2012, 11:02  [ТС] 5
Цитата Сообщение от KOPOJI Посмотреть сообщение
и заменять
И запрос на обновление данных, не нужны никакие инпуты.
королл мне нужен не апдейт того же поля, в котором находятся данные!!
мне нужно данные скопировать в другое поле и сделать транслит!!!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.09.2012, 11:06 6
Sergio Aguero, я это понял. Но второе поле находится в этой же строке или в другой?
1
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
27.09.2012, 11:24 7
Тебе нужно скопировать туда сразу при вставке данных в первое поле? Или у тебя данные уже записаны в таблицу и тебе надо один раз выполнить скрипт что бы во всех строках выполнить копирование с транслитом?
0
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
27.09.2012, 12:02  [ТС] 8
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Тебе нужно скопировать туда сразу при вставке данных в первое поле?
сразу, один раз

Добавлено через 48 секунд
перелить из поля name в поле name2 но только в поле name2 должны быть с транслитом данные
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
27.09.2012, 12:06 9
Так зачем выбирать тогда вообще?
Вы при вставке в первое поле, сразу делайте транслит и вставляйте и во второе поле.
0
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
27.09.2012, 12:34  [ТС] 10
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Так зачем выбирать тогда вообще?
Вы при вставке в первое поле, сразу делайте транслит и вставляйте и во второе поле.
дело в том, что я никуда ничего не вставляю в первое поле, там до меня уже вставлено!!
задача - перелить из первого поля во второе, предварительно преобразовав в транслит!!
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
27.09.2012, 12:49 11
Цитата Сообщение от Sergio Aguero
задача - перелить из первого поля во второе, предварительно преобразовав в транслит!!
Допустим fld1 - поле с исходным значеним, fld2 - после с преобразованным значением.
1. Пишешь хранимую функцию, которая на вход принимает значение, а возвращает преобразованное значение (транслит) - func1

2.
SQL
1
2
UPDATE tab1
SET fld2 = func1(fld1)
Если нужно не по всем строкам, добавляешь WHERE
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
27.09.2012, 12:58 12
Я вот одного не понимаю. Я спросил скрипт нужно один раз перегнать строки или каждый раз при добавлении.
Видимо мы друг друга не понимаем.

Если у вас уже есть таблица заполненная, и вы не добавляете новые записи, то вам нужно просто 1 раз перегнать все записи и всё.

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

А так по какому событию вы хотите запускать ваш скрпит?
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
27.09.2012, 16:14 13
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$replace = array(
    'А' => 'a',
    'Б' => 'b',
    'В' => 'v',
    ...
    'я' => 'ya',
);
 
$value = "`name1`";
foreach ($replace as $from => $to) {
    # полагаю, что заменяем только свои личные буквы,
    # поэтому экранировать там просто нечего
    $value = "REPLACE($value, '$from', '$to')";
}
$query = "UPDATE `table` SET `name2` = $value WHERE `name2` = '';";
echo $query;
//mysql_query($query) or die(mysql_error());
1
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
27.09.2012, 20:51  [ТС] 14
ну не могу я разобраться и все!!!
2 поля в базе - name и image!!
поле name - заполненное категориями товаров!! поле image - пустое текстовое!!
Задача - сделать апдейт поля image, заполнив его категориями товаров, переведенными на транслит!!!
вывожу из базы записи в текстфилды:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form name="form1" method="post" action="">
<?php 
$query = "select id,name from biggroup";
$result = mysql_query($query) or die("Invalid query: " . mysql_error());
       while($row = mysql_fetch_assoc($result))
            {
?>
  <label>
  <input name="name" type="text" id="name" value="<?php echo $row['name']; ?>" size="50">
  </label>
  <p>
    <input type="hidden" name="id" id="id" value="<?php echo $row['id'];?>">
  </p>
  
  <?php 
  }
  ?>
  <p>
    <label>
    <input type="submit" name="but" id="but" value="Транслит!!!!">
    </label>
</p>
</form>
обработка нажатия кнопки!

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (isset($_POST['but']))
 
{
    $rus = array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ь','ы','э','ю','я','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь','Ы','Э','Ю','Я','~','`','!','@','#','$','%','^','&','*','(',')','+','=','|','\\','"','№',';',':','?','/','<','>','_',' ','\'','.',',','«','»','!','-');
    $eng = array('a','b','v','g','d','e','yo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','',"",'y',"e",'yu','ya','A','B','V','G','D','E','Yo','Zh','Z','I','J','K','L','M','N','O','P','R','S','T','U','F','H','C','Ch','Sh','Sch','','','Y',"E",'Yu','Ya','','','','','','','','','','','','','','','','','','','','','','','','','-','-','','-','-','','','','-');
     $name=$_POST['name'];
          if(in_array(substr($name,0,1),$rus))
            {
                $url=ucwords(strtolower(str_replace($rus,$eng,$name)));
                var_dump($url);
                mysql_query("update biggroup SET image='".$url."' where id='".$_POST['id']."'");
 
                if (mysql_affected_rows()==1)
        {
            header("location:?ok");
        }
            }
    
}
в результате апдейт происходит последней записи в таблице!!!т.е. поле image=Транслит(name)
а мне надо все записи в таблице перевести в транслит и засунуть их в поле апдейт!!
0
47 / 30 / 2
Регистрация: 11.06.2011
Сообщений: 206
27.09.2012, 21:13 15
PHP
1
var_dump($_POST)
смотри что у тебя тут. И почему бы не сделать выборку из name, в цикле добавлять в ассоциативный массив переведенные элементы на транслит с ключом id, а в другом цикле добавлять апдейтом в бд где id ключ, пока массив не станет пустым.
0
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
28.09.2012, 08:38  [ТС] 16
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
$replace = array(
    'а' => 'a',
    'б' => 'b',
    'в' => 'v',
    'г' => 'g',
    'д' => 'd',
    'е' => 'e',
    'ё' => 'yo',
    'ж' => 'zh',
    'з'=>'z',
    'и'=>'i',
    'й'=>'j',
    'к'=>'k',
    'л'=>'l',
    'м'=>'m',
    'н'=>'n',
    'о'=>'o',
    'п'=>'p',
    'р'=>'r',
    'с'=>'s',
    'т'=>'t',
    'у'=>'u',
    'ф'=>'f',
    'х'=>'h',
    'ц'=>'c',
    'ч'=>'ch',
    'ш'=>'sh',
    'щ'=>'sch',
    'ъ'=>'',
    'ь'=>'',
    'ы'=>'y',
    'э'=>'e',
    'ю'=>'yu',
    'я'=>'ya',
    'А'=>'A',
    'Б'=>'B',
    'В'=>'V',
    'Г'=>'G',
    'Д'=>'D',
    'Е'=>'E',
    'Ё'=>'Yo',
    'Ж'=>'Zh',
    'З'=>'Z',
    'И'=>'I',
    'Й'=>'J',
    'К'=>'K',
    'Л'=>'L',
    'М'=>'M',
    'Н'=>'N',
    'О'=>'O',
    'П'=>'P',
    'Р'=>'R',
    'С'=>'S',
    'Т'=>'T',
    'У'=>'U',
    'Ф'=>'F',
    'Х'=>'H',
    'Ц'=>'C',
    'Ч'=>'Ch',
    'Ш'=>'Sh',
    'Щ'=>'Sch',
    'Ъ'=>'',
    'Ь'=>'',
    'Ы'=>'Y',
    'Э'=>'E',
    'Ю'=>'Yu',
    'Я'=>'Ya',
    '~'=>'',
    '`'=>'',
    '!'=>'',
    '@'=>'',
    '#'=>'',
    '$'=>'',
    '%'=>'',
    '^'=>'',
    '&'=>'',
    '*'=>'',
    '('=>'',
    ')'=>'',
    '+'=>'',
    '='=>'',
    '|'=>'',
    '\\'=>'',
    '"'=>'',
    '№'=>'',
    ';'=>'',
    ':'=>'',
    '?'=>'',
    '/'=>'',
    '<'=>'',
    '_'=>'',
    '\/'=>'',
    ','=>'',
    '.'=>'',
    '«'=>'',
    '»'=>'',
    '!'=>'',
    '-'=>'-',
    '>'=>'',);
    $value = "name";
 
foreach ($replace as $from => $to) {
    $value = "REPLACE(".$value.", '".$from."', '".$to."')";
}
$query = "UPDATE biggroup SET image=".$value." WHERE image = '';";
echo $query;
mysql_query($query) or die(mysql_error());
Написал:
PHP
1
UPDATE biggroup SET image=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(name, 'а', 'a'), 'б', 'b'), 'в', 'v'), 'г', 'g'), 'д', 'd'), 'е', 'e'), 'ё', 'yo'), 'ж', 'zh'), 'з', 'z'), 'и', 'i'), 'й', 'j'), 'к', 'k'), 'л', 'l'), 'м', 'm'), 'н', 'n'), 'о', 'o'), 'п', 'p'), 'р', 'r'), 'с', 's'), 'т', 't'), 'у', 'u'), 'ф', 'f'), 'х', 'h'), 'ц', 'c'), 'ч', 'ch'), 'ш', 'sh'), 'щ', 'sch'), 'ъ', ''), 'ь', ''), 'ы', 'y'), 'э', 'e'), 'ю', 'yu'), 'я', 'ya'), 'А', 'A'), 'Б', 'B'), 'В', 'V'), 'Г', 'G'), 'Д', 'D'), 'Е', 'E'), 'Ё', 'Yo'), 'Ж', 'Zh'), 'З', 'Z'), 'И', 'I'), 'Й', 'J'), 'К', 'K'), 'Л', 'L'), 'М', 'M'), 'Н', 'N'), 'О', 'O'), 'П', 'P'), 'Р', 'R'), 'С', 'S'), 'Т', 'T'), 'У', 'U'), 'Ф', 'F'), 'Х', 'H'), 'Ц', 'C'), 'Ч', 'Ch'), 'Ш', 'Sh'), 'Щ', 'Sch'), 'Ъ', ''), 'Ь', ''), 'Ы', 'Y'), 'Э', 'E'), 'Ю', 'Yu'), 'Я', 'Ya'), '~', ''), '`', ''), '!', ''), '@', ''), '#', ''), '$', ''), '%', ''), '^', ''), '&', ''), '*', ''), '(', ''), ')', ''), '+', ''), '=', ''), '|', ''), '\', ''), '"', ''), '№', ''), ';', ''), ':', ''), '?', ''), '/', ''), '<', ''), '_', ''), '\/', ''), ',', ''), '.', ''), '«', ''), '»', ''), '-', '-'), '>', '') WHERE image = '';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 '"', ''), '', ''), ';', ''), ':', ''), '?', ''), '/', ''), '<', ''), '_', ''),' at line 1
Добавлено через 24 секунды
Че за хрень - какая еще ошибка в синтаксисе????


Где ошбика???
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
28.09.2012, 09:13 17
Цитата Сообщение от Sergio Aguero Посмотреть сообщение
$query = "UPDATE biggroup SET image=".$value." WHERE image = '';";
PHP
1
$query = "UPDATE biggroup SET image='".$value."' WHERE image ='' ";
1
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
28.09.2012, 09:21  [ТС] 18
Dolphin, новая ошибка появилась:
PHP
1
............WHERE name2 = '' 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 'а', 'a'), 'б', 'b'), 'в', 'v'), 'г', 'g'), 'д', 'd'), 'е', 'e'), 'ё', 'yo' at line 1
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
28.09.2012, 09:26 19
Цитата Сообщение от Sergio Aguero Посмотреть сообщение
PHP
1
$value = "REPLACE(".$value.", '".$from."', '".$to."')";
PHP
1
$value = "REPLACE('".$value."', '".$from."', '".$to."')";
1
452 / 443 / 21
Регистрация: 11.04.2012
Сообщений: 2,076
28.09.2012, 09:37  [ТС] 20
Dolphin, еще одна вылезла
PHP
1
WHERE name2 = '' 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 'REPLACE('REPLACE('REPLACE('REPLACE('REPLACE('REPLACE('REPLACE('REPLACE('REPLACE(' at line 1
Добавлено через 4 минуты
попробовал вот так:
PHP
1
2
3
    
 
$query = "UPDATE biggroup SET image=".$value." WHERE image ='' ";
не помогло
0
28.09.2012, 09:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2012, 09:37
Помогаю со студенческими работами здесь

Апдейт BL
Пошел АП с 63 до 733 на некоторых датацентрах :D

Апдейт
Доброго времени суток господа! Проблемка з апдейтом. Вродь бы простенький, но так не особо агугу...

АПДЕЙТ 24.03
кто че в нем понял? я вообще не могу одуплиццо че произошло, все поскакало кто куда b-(

Апдейт
Наблюдаю изменения позиций в серпе. Опять апдейт што ли?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru