[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с update
mark666
создаю текстовые поля для ввода параметром к строкам из таблицы.
WHILE ($row = mysql_fetch_object($result)) {
echo "</td><td> <input name='my_ves[my_v]' type='text' size='5' value=0 />";
$i++;
}

теперь нужно чтобы после нажатия кнопки, значения вводимые в поля внести в таблицу в соответствии со строками при условии что id_menu=переменной. Вот что у меня получилось

$myves = $_REQUEST[my_ves];
foreach ($myves as $key=>$value) {
$sql=mysql_query("Update link SET ves='".$value[my_ves]."' Where id_menu='".$id_m."'");
$i++;
}

проблема в том что он в таблицу заносит только последнее вводимое значение.



Спустя 9 минут, 40 секунд (31.03.2011 - 22:09) kasichvadim написал(а):
Обратите внимание сюда:
echo "</td><td> <input name='my_ves[my_v]' type='text' size='5' value=0 />";

и еще, где берется $id_m ?

Спустя 7 минут, 21 секунда (31.03.2011 - 22:16) mark666 написал(а):
я уже перепробовал все варианты. ее писать! при нажатии кнопки он передает значение правильно если в цикле прописать echo $_REQUEST['my_ves'][$i]; он выведет подряд все значения которые были введены, но обновлять в цикле не хочит! Думаю что то с update.

Спустя 39 секунд (31.03.2011 - 22:17) mark666 написал(а):
$id_m=1 я задал за ранее


Спустя 10 минут, 16 секунд (31.03.2011 - 22:27) kasichvadim написал(а):
Что-то я уже под конец вечера не соображу зачем это в цикле обновлять?
$sql=mysql_query("Update link SET ves='".$value[my_ves]."' Where id_menu='".$id_m."'");

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

Спустя 3 минуты, 39 секунд (31.03.2011 - 22:31) mark666 написал(а):
мне нужно менять записи тех строк где id_m=1

Спустя 1 минута, 56 секунд (31.03.2011 - 22:33) mark666 написал(а):
вот я думаю гдето там ошибка, не могу сообразить((

Спустя 2 минуты, 21 секунда (31.03.2011 - 22:35) mark666 написал(а):
$myves = $_REQUEST[my_ves];

foreach ($myves as $key=>$value) {

$myves=$_REQUEST['my_ves'][$i];

$sql=mysql_query("Update link SET ves='".$myves."' Where id_menu='".$id_m."'");
echo $myves;
$i++;
}
вот другой вариант, echo выводит все поля норм, а в update значения все перетираются и запысывается только последнее значение

Спустя 29 секунд (31.03.2011 - 22:36) neadekvat написал(а):
Покажите структуру бд. И уточните, что именно надо там обновлять.

Спустя 6 минут, 27 секунд (31.03.2011 - 22:42) mark666 написал(а):
надо добавить или обновить значение поля ves, записей для id_menu=1

Спустя 1 минута, 39 секунд (31.03.2011 - 22:44) mark666 написал(а):
вот бвза

Спустя 3 минуты, 12 секунд (31.03.2011 - 22:47) neadekvat написал(а):
Так все верно. Обновляются все записи, у которых id_menu = 1. Таковых я насчитал пять. В каждую итерацию цикла им присваиваются некие значения, просто вы не успеваете этого заметить - бд же быстро работает. Зато вы видите результат последнего обновления.

В общем, у вас беда.

Чтобы обновить одну строку, у строки должен быть свой уникальный адрес - первичный ключ. Что у вас является первичным ключом?

Спустя 1 минута, 29 секунд (31.03.2011 - 22:48) mark666 написал(а):
id_link

Спустя 4 минуты, 31 секунда (31.03.2011 - 22:53) mark666 написал(а):
ну да он обновляет как то все строки до последнего елемента

Спустя 1 минута, 23 секунды (31.03.2011 - 22:54) neadekvat написал(а):
Значит и обновлять вам надо по этому условию.

Как вариант, надо добавить скрытое поле с уникальным, пренадлежащим конкретной строке id_link, и обновлять инфу в бд именно по этому полю.
Примерно так. Использовать не советую. Советую подумать и понять логику, затем исправить свой скрипт.

WHILE ($row = mysql_fetch_object($result)) {
echo "</td><td> <input name='my_ves[my_v]' type='text' size='5' value=0 />
<input name='my_ves_id[my_v]' type='text' size='5' value=
{$row[id_link]} />";
$i++;
}


$myves = $_REQUEST[my_ves];
$myves_ids = $_REQUEST[my_ves_id];
foreach ($myves as $key=>$value) {
$sql=mysql_query("Update link SET ves='".$value[my_ves]."' Where id_menu='".$myves_ids[$key]."'");
$i++;
}

Спустя 4 минуты, 1 секунда (31.03.2011 - 22:58) kasichvadim написал(а):
Цитата
ну да он обновляет как то все строки до последнего елемента


Не как-то, а в цикле по порядку.

Допустим идет цикл.
Первая итерация обновили поле ves. Присвоили ему значение 5.
Вторая итерация обновили поле ves. Присвоили ему значение 7.
Третья итерация обновили поле ves. Присвоили ему значение 2.
Конец цикла.
Поле ves сейчас со значением 2 (которое было присвоено последним)

Спустя 10 минут, 51 секунда (31.03.2011 - 23:09) mark666 написал(а):
Fatal error: Cannot use object of type stdClass as array in Z:\home\bogema-Anapa.ru\www\admin\m_edit\link.php on line 164
ошибка

echo "</td><td> <input name='my_ves[my_v]' type='text' size='5' value='".$my_v1."' />
<input name='my_ves_id[my_v]' type='text' size='5' value='".$row[id_link]."' />";

Спустя 3 минуты, 32 секунды (31.03.2011 - 23:13) neadekvat написал(а):
Цитата (neadekvat @ 31.03.2011 - 22:54)
спользовать не советую. Советую подумать и понять логику, затем исправить свой скрипт.

Но нет, вы решили пойти по пути наименьшего сопротивления.
Если вы возвращаете объект из базы (*_object), так и в коде своем используйте объект. Я привык пользоваться массивами - его и написал.

Спустя 5 минут, 32 секунды (31.03.2011 - 23:18) mark666 написал(а):
работает но также затирает

Спустя 2 минуты, 47 секунд (31.03.2011 - 23:21) mark666 написал(а):
он записывает в ves перой строки значения полей по очереди и оставляет последнюю.
так и остальные поля

Спустя 1 минута, 9 секунд (31.03.2011 - 23:22) mark666 написал(а):
как бы цикл в цикле

Спустя 1 минута, 47 секунд (31.03.2011 - 23:24) neadekvat написал(а):
Стоп.. форма неправильная.

WHILE ($row = mysql_fetch_assoc($result)) {
echo "</td><td> <input name='my_ves[]' type='text' size='5' value=0 />
<input name='my_ves_id[]' type='text' size='5' value=
{$row[id_link]} />";
$i++;
}



$myves = $_REQUEST[my_ves];
$myves_ids = $_REQUEST[my_ves_id];
foreach ($myves as $key=>$value) {
$sql=mysql_query("Update link SET ves='".$value."' Where id_menu='".$myves_ids[$key]."'");
$i++;
}

+ не забывайте обрабатывать данные перед подстановкой в запрос.

Спустя 9 минут, 19 секунд (31.03.2011 - 23:33) mark666 написал(а):
ураааа заработало
Цитата
Where id_menu='".$myves_ids[$key]."'");

я просмотрел момент надо было id_link. Все спасибо большое!!!
Быстрый ответ:

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