Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отредактировать сразу несколько строк в табли 
:(
    Опции темы
Igor_CH
Дата 22.8.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



Id   Id_kat  k1  k2
1    1      5    2
2    1      1    3
3    1      5    4
4    1      3    3
5    1      2    6


Из базы вывел, получил пять строк по два значения которые надо поменять (k1 и k2).

А как теперь сделать UPDATE  сразу во всех строках?
Для одной понятно:
Код

$sql_insert = "UPDATE raspis SET 
        k1 = ".$k1.", 
        k2 = ".$k2." 
        WHERE `kurs` = '".$_GET['ID_kurs']."' ;";


PM MAIL   Вверх
Darhazer
Дата 22.8.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 3
Всего: 29



Тебе нужно чтото типа:
Код
$sql_insert = "UPDATE raspis SET 
        k1 = k2+k1,
        k2 = k1,
        k1 = k2 - k1

Сейчась пробую и напишу точно...

P.S.
Не много ошибся, но этого давно не делал /в общеем класическая задача - поменят значения двух var без третой/
Код
$sql_insert = "UPDATE raspis SET 
        k1 = k2 + k1,
        k2 = k1 - k2,
        k1 = k1 - k2"



Это сообщение отредактировал(а) Darhazer - 22.8.2006, 17:46


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Igor_CH
Дата 23.8.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



Не совсем понял, а как это работает. 
Мне же надо понять к1 и к2 под своим ID.
сейчас:
Id   Id_kat  k1  k2
1        1       5    2
2        1       1    3
3        1       5    4
4        1       3    3
5        1       2    6

а потом например:
Id   Id_kat  k1  k2
1        1       8    1
2        1       5    1
3        1       9    2
4        1       8    4
5        1       7    1
PM MAIL   Вверх
ewolf
Дата 23.8.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 2
Всего: 18



Идея состоит в том, чтобы поменять значения двух переменных, не вводя третьей вспомогательной. Это возможно, так как значения твоих переменных - числа.
Дело в том, что SQL последовательно выполняет команды, описанные в разделе SET

По строкам описание:

k1 = k1 + k2  переменная k1 хранит сумму двух переменных 
k2 = k1 - k2  переменная k2 становится равной k1, так как имеем по-сути такое выражение k2 = (k1+k2) - k2 = k1 
k1 = k1 - k2  учитывая предыдущие операции, имеем k1 = (k1+k2) - ((k1 + k2) - k2) = k2 


PM MAIL ICQ   Вверх
Darhazer
Дата 23.8.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 3
Всего: 29



Igor_CH
видимо я не понял твой вопрос
С моем кодом из
Id   Id_kat  k1  k2
1        1       5    2
2        1       1    3
3        1       5    4
4        1       3    3
5        1       2    6
получиш
Id   Id_kat  k1  k2
1        1       2    5
2        1       3    1
3        1       4    5
4        1       3    3
5        1       6    2

Нелзя сделать UPDATE несколько строк если значения, которые будеш записивать, будут разние, и нельзя их записать в виде f=x+y


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Igor_CH
Дата 23.8.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



не получается smile
Одно и тоже:
Id   Id_kat  k1  k2
1        1       2    1
2        1       2    1
3        1       2    1
4        1       2    1
5        1       2    1

Добавлено @ 10:54 
упс не заметил ответа выше.

Так есть какой то выход? может цикл пустить?

Получается много раз водить, это я на примере 5 строк показал, а поправде их 5 по 25 и того 625 раз вводить и нажимать кнопку сохранить! это ж вечность.

Наверно надо тогда не UPDATE а REPLACE INTO, тогда ID теряю
PM MAIL   Вверх
PARROT
Дата 23.8.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



У меня сделано так:
Код

while(list($idx,$val) = each($ar))
{
        mysql_query("UPDATE base_2 SET b_2="{$ar[$idx]}" WHERE id=$idx")or die(mysql_error());
}

Код

<form method=post>
<?
$old = mysql_query("SELECT id_b,id,b_2 FROM base_2");
while($row2 = mysql_fetch_row($old)) {

 echo "<input type=text name=ar[".$row2[0]."] value='$row2[2]'  maxlength=40 size=48><br/>";
}
?>
<input type=submit name=set value=редактировать>
</form>


Добавлено @ 11:23 
Получаем массив данных, делим их на ключ->значение и записываем.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Igor_CH
Дата 23.8.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



Ошибка: Parse error: parse error, unexpected '{' in w:\home\...... 
в строке:
Код

mysql_query("UPDATE raspis SET k="{$ar[$idx]}" WHERE id=$idx")or die(mysql_error());

PM MAIL   Вверх
skyboy
Дата 23.8.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



если $ar[$idx] - число, а не строка, то надо убрать соседствующие кавычки. Если - строка, то поставить одинарные кавычки. 
PM MAIL   Вверх
Igor_CH
Дата 23.8.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



число , убираем кавычки получаем такую ошибку:
Warning: Variable passed to each() is not an array or object in w:\home.....
в строке
Код

while(list($idx,$val) = each($ar))

PM MAIL   Вверх
PARROT
Дата 23.8.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Код

mysql_query('UPDATE raspis SET k='".$ar[$idx]."' WHERE id='.$idx.') or die(mysql_error());


Это сообщение отредактировал(а) PARROT - 23.8.2006, 15:09


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Igor_CH
Дата 23.8.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



PARROT с этой ошибкой разобрались.

Следующая Warning: Variable passed to each() is not an array or object in w:\home.....
в строке:
Код

 while(list($idx,$val) = each($ar)) 

 

PM MAIL   Вверх
PARROT
Дата 23.8.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Сложно гадать когда не можешь проверить. У меня было со строкой и было с числом, но второе я не могу найти.

Добавлено @ 15:13 
И такая ошибка была у меня, тут кроется как раз в первой ошибке, попробуйте поиграть с запросом и его кавычками, в разных вариациях. 
Печатайте запрос:
Код

while(list($idx,$val) = each($ar))
{
echo "UPDATE raspis SET k='{$ar[$idx]}' WHERE id=$idx";
mysql_query("UPDATE raspis SET k='{$ar[$idx]}' WHERE id=$idx")or die(mysql_error());
}



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Igor_CH
Дата 23.8.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



Код:
Код

<?php
$db_server = "localhost";
$db_name = "";
$db_username = "";
$db_password = "";
function db_connect()
{

    global $db_server;
    global $db_username;
    global $db_password;
    global $db_name;

    $con = mysql_connect($db_server,$db_username,$db_password);
    if (!(mysql_select_db($db_name,$con)))
    {
        show_error();
    }

    return $con;
}

        $con = db_connect();
        
    global $SmbIt;
    if (!isset($SmbIt)){

       ?>
<form name="Edit" method="POST">
<table>
<tr><td valign=top>
<?php
$old = mysql_query("SELECT id_R,k FROM raspis");
while($row2 = mysql_fetch_row($old)) {

 echo "<input type=text name=ar[".$row2[0]."] value='$row2[1]'  maxlength=10 size=10><br>";
}
?>
    </td>
</tr>                                        
<tr>
    <td>
<input type="submit" Name="SmbIt" value="Обновить инфо &raquo;&raquo;&raquo;">
    </td>
</tr>
</table>
    </form>

<?php
 } else {
        


while(list($id_Rx,$val) = each($ar))
{
     mysql_query("UPDATE raspis SET k='$ar[$idx]' WHERE id_R=$id_Rx")or die(mysql_error());
}

        
    }

?>


БД:
Код

CREATE TABLE `raspis` (
  `id_R` bigint(20) NOT NULL auto_increment,
  `k` bigint(20) NOT NULL default '0',
  `n` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`id_R`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=12 ;

-- 
-- Дамп данных таблицы `raspis`
-- 

INSERT INTO `raspis` VALUES (1, 1, 1);
INSERT INTO `raspis` VALUES (2, 2, 1);
INSERT INTO `raspis` VALUES (3, 3, 1);
INSERT INTO `raspis` VALUES (4, 4, 1);
INSERT INTO `raspis` VALUES (5, 5, 1);
INSERT INTO `raspis` VALUES (6, 1, 1);
INSERT INTO `raspis` VALUES (7, 2, 1);
INSERT INTO `raspis` VALUES (8, 3, 1);
INSERT INTO `raspis` VALUES (9, 4, 1);
INSERT INTO `raspis` VALUES (10, 5, 1);
INSERT INTO `raspis` VALUES (11, 1, 1);


PM MAIL   Вверх
-=Ustas=-
Дата 23.8.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Igor_CH, я что то не врубаюсь, что ты хочешь сделать? Что н ачто поменять?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 23.8.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Igor_CH, Вы неправильно переписали:
Код

while(list($id_Rx,$val) = each($ar))
{
     mysql_query("UPDATE raspis SET k='$ar[$idx]' WHERE id_R=$id_Rx")or die(mysql_error());
}


Нужно так:
Код

while(list($id_x,$val) = each($ar))
{
     mysql_query("UPDATE raspis SET k='$ar[$idx]' WHERE id_R=$id_Rx")or die(mysql_error());
}



Добавлено @ 15:36 
Мы обновляем запись по ключу массива $ar по условию вашего id_Rx


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
PARROT
Дата 23.8.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



У вас пустое значение id_R:
Код

UPDATE raspis SET k=5 WHERE id_R=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

Откуда оно берется? Должно браться?

Добавлено @ 16:11 
Значение приходит правильное для обновления, а вот переменная $id_R пустая

Добавлено @ 16:19 
Все работает:  smile  Вспомнила...
Если мы обновляем ключ значение, то обновляем мы значение по пришедшему ключу, то есть его условию $idx
Код

<?php
Error_Reporting(E_ALL & ~E_NOTICE);
$db_server = "localhost";
$db_name = "test";
$db_username = "test";
$db_password = "123";
function db_connect()
{

    global $db_server;
    global $db_username;
    global $db_password;
    global $db_name;

    $con = mysql_connect($db_server,$db_username,$db_password);
    if (!(mysql_select_db($db_name,$con)))
    {
        show_error();
    }

    return $con;
}

        $con = db_connect();

    global $SmbIt;
    if (!isset($SmbIt)){

       ?>
<form name="Edit" method="POST">
<table>
<tr><td valign=top>
<?php
$old = mysql_query("SELECT id_R,k FROM raspis");
while($row2 = mysql_fetch_row($old)) {

 echo "<input type=text name=ar[".$row2[0]."] value='$row2[1]'  maxlength=10 size=10><br>";
}
?>
    </td>
</tr>
<tr>
    <td>
<input type="submit" Name="SmbIt" value="Обновить инфо &raquo;&raquo;&raquo;">
    </td>
</tr>
</table>
    </form>

<?php
 } else {



while(list($idx,$val) = each($ar))
{
echo "UPDATE raspis SET k=".$ar[$idx]."  WHERE id_R='$idx'";
echo "<br>";
     mysql_query("UPDATE raspis SET k=".$ar[$idx]." WHERE id_R='$idx'")or die(mysql_error());
}


    }

?>



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
-=Ustas=-
Дата 23.8.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Я чё то не пойму вашего бреда. Это получается, что данный скрипт обновляет записи на значения, которые там уже присутствуют.....


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 23.8.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Данный скрипт обновляет  измененные значения, по ключу. 
Было например 5, измениили 5 на 1, стало 1 и так далее.

Добавлено @ 16:47 
http://pk.traktora.spb.ru/1.php 


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Igor_CH
Дата 24.8.2006, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



PARROT большое спасибо!!!
Но мы так изменяем одно поле (k), а можно сразу не сколько(k1, k2,....)? 
PM MAIL   Вверх
Igor_CH
Дата 24.8.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



а еще странно внутри функции код тоже не работает smile
Код

<?php
 function Edit() {
Error_Reporting(E_ALL & ~E_NOTICE);

$con = db_connect();

    global $SmbIt;
    if (!isset($SmbIt)){

       ?>
<form name="Edit" action="<?=$_SERVER["PHP_SELF"]?>?action=Edit" method="POST">
<table>
<tr><td valign=top>
<?php
$old = mysql_query("SELECT id_R,k,k1 FROM raspis");
while($row2 = mysql_fetch_row($old)) {

 echo "<input type=text name=ar[".$row2[0]."] value='$row2[1]'  maxlength=10 size=10>";
 echo "<input type=text name=am[".$row2[0]."] value='$row2[2]'  maxlength=10 size=10><br>";
}
?>
    </td>
</tr>
<tr>
    <td>
<input type="submit" Name="SmbIt" value="Обновить инфо &raquo;&raquo;&raquo;">
    </td>
</tr>
</table>
    </form>

<?php
 } else {



while( (list($idx,$val) = each($ar)) and (list($idx,$val) = each($am)) )
{
echo "<br>";
     mysql_query("UPDATE raspis SET k=".$ar[$idx].", k1=".$am[$idx]." WHERE id_R='$idx'")or die(mysql_error());
}


    }


        

 }
?>


Почему внутри функции не работает?

Добавлено @ 09:19 
а разобался global $ar;
PARROT с меня +

Это сообщение отредактировал(а) Igor_CH - 24.8.2006, 09:20
PM MAIL   Вверх
PARROT
Дата 24.8.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Если закоментировать функцию то все работает.

Добавлено @ 10:14 
Код

function edit ($edd) {


Это сообщение отредактировал(а) PARROT - 24.8.2006, 10:16


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.