|
 14.8 Кб |
|
| Одни мучения :(
Не могу найти способ сделать следующее (СМОТРИТЕ ВЛОЖЕНЫЙ ФАЙЛ /вложеный файл/)
Необходимо изменить в mysql строки, которые будут отмечены чекбоксами (СТОЛБИК - ТОП), т.е. выделил какие нужно строки и в mysql базе значение поменялось с "0" на "1" или наоборот. Так вот вопрос в том, что не могу я понять - как мне узнать ID именно той строки в которой у меня происходят изменения :( К примеру массовое удаления - я легко делаю, а вот что бы UPDATE сделать - мне нужно знать какие строки затрагиваются и какие к ним ID.
Думаю, кто-то уже решал подобное. Подскажие куда копать или пример кода.
БОЛЬШОЕ СПАСИБО. Очень на Вас надеюсь | |
|
|
|
|
|
|
|
для: virtus1k
(10.10.2008 в 18:57)
| | Укажите значения чекбоксам равные id записям в таблице. | |
|
|
|
|
|
|
|
для: virtus1k
(10.10.2008 в 18:57)
| | Ну смотри. У тебя же в базе есть строки твои. К примеру запрос
В таблице lines есть два поля id и name
Тебе вернётся массив где и будут твои id и имена линий
Потомо в цикле формируешь свою таблицу
<?php
foreach ($lines as $id=>$line_name):
?>
<checkbox name='line_id[<?=$id?>]' value='1' /> <?=$line_name?>
<?php
endforeach;
?>
|
Имя чекбокса должно быть именно таким чтобы потом при отправке формы у тебя получился массив из обтмеченных чекбоксов. А потом просто в цикле перебираешь этот массив подставляя в условие WHERE в SQL запросе нужный тебе id.
примерно так
UPDATE lines SET active = '1' WHERE lines.id = <?php $line[id]?>
|
| |
|
|
|
|
|
|
|
для: White_Owl
(10.10.2008 в 19:11)
| | >Имя чекбокса должно быть именно таким
Не обязательно, это может быть просто массив, а его значения равны id записей. Неотмеченные чекбоксы не приходят на сервер. | |
|
|
|
|
|
|
|
для: virtus1k
(10.10.2008 в 18:57)
| | Большое спасибо, НО :)
sim5 если я укажу значение чекбоксам равным id - как я потом разберу там "0" или "1" стоял и стоит :) ??
White_Owl
Ага, а если у меня изначально стоял чекбокс - а я захотел убрать его у половины, а у другой половины оставить??? | |
|
|
|
|
|
|
|
для: virtus1k
(10.10.2008 в 19:20)
| | Как это вы укажите чекбоксам равные ID? У вас что в таблице есть записи с одинаковыми ID? | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 19:27)
| | Нет :) неверное выразился... ID понятное дело будут уникальными... Вот написал пример кода который выгружается:
<form>
id 1 - <input type=checkbox name=top[] checked value=1>
id 2 - <input type=checkbox name=top[] value=0>
id 3 - <input type=checkbox name=top[] value=0>
id 4 - <input type=checkbox name=top[] checked value=1>
id 5 - <input type=checkbox name=top[] checked value=1>
</form>
|
как видим если 1 - то включен - если 0, то выключен - из этого я получаю массив $_POST[top]
но как мне узнать, что пользователь отметил id 2 (т.е. 0 должен превратится в 1) и снял галки с 4 и 5 (т.е. 1 в 0)
Как мне узнать :) ID для обновления - ну хоть убей не понимаю :( | |
|
|
|
|
|
|
|
для: virtus1k
(10.10.2008 в 19:36)
| |
<?
print "<pre>";
print_r($_POST);
print "</pre>";
?>
<form action="" method="post">
id 1 - <input type=checkbox name=top[] checked value=15>
id 2 - <input type=checkbox name=top[] value=167>
id 3 - <input type=checkbox name=top[] value=234>
id 4 - <input type=checkbox name=top[] checked value=11>
id 5 - <input type=checkbox name=top[] checked value=123>
<input type="submit" value="Send">
</form>
|
Где значениям чекбоксов даны не 1 и 0 (включено/выключено), а ID записей. Выполните этот пример, что вы получите? Вы получите только выбранные чекбоксы, а значит вы будете знать ID выбранных записей для обновления или чего-то иного. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 19:43)
| | Привильно - но тут же Вы говорите о ВЫБРАНЫХ - таким образом я получу выбраные ID согласен. Но как мне получить ID тех у которых checked был снят ??? т.е. было 1, а стало 0
т.к. у меня будут и 1 и 0 в перемешку | |
|
|
|
|
|
|
|
для: virtus1k
(10.10.2008 в 21:22)
| | Установить сначала всем записям 0, а потом уже выбранным 1. Если все таки охота знать о выборе/невыборе всех чекбоксов, то это можно сделать, только передав на сервер маску их состояний. Но это уже надо задействовать JS, так как невыбранные чекбоксы на сервер не передаются. Если без JS, то тогда каждой записи дожны соотвествовать две зависимых радиокнопки, одна со значением 0, другая 1. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 22:02)
| | Спасибо! За ночь все обдумаю :) | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 22:02)
| | вообщем сделал я так, что name=top[] value=row[id]
и таким способом я получаю все отмеченые ID и при обновлении ставлю 1 в нужное мне поле.
Но теперь - когда мне нужно снять галки - (они ж не идут на сервер) - вообщем не могу получить те поля - которые мне нужно отметить, что б 0 поставить.
Каким образом мне это сделать? | |
|
|
|
|
|
|
|
для: virtus1k
(11.10.2008 в 12:44)
| | Да, галочки не туда и обратно не идут, их браузер "рисует" :)
У вас есть таблица, в которой есть поле, например, `sel`, которое и может иметь значение 0 или 1. При получении выбранных чекбоксов, прежде чем обновить значения этих полученных id записей, обнулите (установите в 0) значения поля `sel` у всех записей. А затем UPDATE ... SET sel = 1, для полученных их формы id записей (выбранных чекбоксов).
Или вы о другом? | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 12:52)
| | у всей таблицы не могу обнулить это поле, к сожалению т.к. в таблице может быть много записей - а на экран я выведу только 10 к примеру :) - вот разме, что обнулить эти 10, а потом писать в них :) НО это не дело - такой способ не подходит :(
я передаю на js значение невыбраных полей у меня получается id_0=1; id_1=1; id_2=0; id_3=1; id_5=0; только как мне теперь сопоставить и записать их в базу? | |
|
|
|
|
|
|
|
для: virtus1k
(11.10.2008 в 13:14)
| | Ну если вы передаете записи для изменения по 10 штук, и не случайным выбором, а сортированные, то есть начиная с 1 и по nn, то вы всегда будете знать id последней записи из этой десятки $max = max($_POST['name']) и первой $min = min($_POST['name']). Теперь вы можете обнулить поля для записей у которых id <= $max и id >= $min . Какие проблемы?
Зачем вам передавать значение 0 или 1 для этих полей? Вы, выдавая, список полей пользователю, получаете значение из базы - у полей, которые имеют 1, указывайте checked="checked", вот и получит пользователь "визуальную картину" состояния в базе этих полей. Ну а далее, как я вам рассказывал выше. Забудьте вы об этих 0 и 1 для value, пишите в них id полей записи в таблице. | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 13:19)
| | ну как зачем :)
смотрите. Я вывожу пользователю товары с нужной категории... У всех изначально стоят галки (checked) Пользователю нужно, что бы к примеру 6 из 100 снять галки - т.е. мне нужно сделать UPDATE у 6 товаров у которых сняты галки.
Обнулять все товары не хочется из этой категории - а потом ставить тем галки которые передаются...
Есть другой способ? | |
|
|
|
|
|
|
|
для: virtus1k
(11.10.2008 в 14:05)
| | Если Вы изначально ставили галки на сотню товаров, а от пользователя получили только 94 галки, то вычтя из исходного множества(100) полученное(94), Вы и получите набор из тех шести галок, товары по которым нужно изменить. | |
|
|
|
|
|
|
|
для: virtus1k
(11.10.2008 в 14:05)
| | Первое. Я не верно вам сказал выше - с помошью min/max вы не узнаете, так как они могут быть не выбраны. Но если вы выводите постранично, то вы знаете смещение, так что трудностей быть не должно с определением записей для обнуления.
Второе. А не лучше ли отдавать пользователю товары как не выбранные? Это с чего вы решили, что я "на радостях" заберу у вас все предложенные 100? А если пользователь по ошибке нажмет SUBMIT так и не успев снять "галочки" с ненужного? Это вобще странный подход, равноценный тому, который мне когда-то заказчик навязывал - галочка "Подписаться на рассылку" должна быть по умолчанию отмечена. Как бы не так, почтовый ящик пользователя, это его собственность, а не собственность владельца сайта. Так и вам бы стоило исходить из того, что кошелек пользователя принадлежит ему, а не вам, и он вправе решать что выбрать, что нет, и по умолчанию "все товары выбраны", это с вашей стороны, ну если не "хамство", то просто не уважение к покупателю.
Третье. Если это не выбор товара пользователем для покупки, то что значит обнулить/выбрать? Вы администратор магазина, вы можете снять/добавить товар в категории, но делается это полем никак недоступным для пользователя.
Объясните сперва саму суть операций, для чего они служат? Видимо надо с этого начать . | |
|
|
|
|
 93.3 Кб |
|
|
для: sim5
(11.10.2008 в 14:17)
| | Так. Сорри, запутал Вас совсем :)
Взгляните http://softtime.ru/forum/files/58761-20081010185759.gif ЭТО АДМИНКА - только админ может там что-то делать.
Значит задача.... дать админу право массово оперировать с товарами. Массовое удаление - я сделал, труда не соствавило. Теперь мне нужно сделать массовое скрытие/отобажение, вывод в TOP/ ввод в TOP ну и вывод и ввод NEW
Так вот. Как показано на скриншоте - пользователь отмечает нужные ему товары галками - кликает выполнить и они все становятся TOP.
ВТОРОЙ СКРИНШОТ (ВО ВЛОЖЕНИИ этого поста http://softtime.ru/forum/files/58761-20081011152318.jpg) показывает, что потом, пользователь захочет (через какое-то время) вывести с TOP нужные ему товары. Он должен снять галки там где он захочет - и значение в базе должно поменятся!
Поставить - поставил - снять не знаю как :)
Надеюсь все понятно пояснил! | |
|
|
|
|
|
|
|
для: virtus1k
(11.10.2008 в 15:23)
| | Вопрос - вы выводите список товаров постранично? Если да, то как? | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 15:59)
| | Нет. Не постранично. Товары выводятся фильтрами т.е. вывести товары категории X где есть фото или вывести товары категории Х где нет фото и т.д. | |
|
|
|
|
|
|
|
для: virtus1k
(11.10.2008 в 16:06)
| | Если говорить серьезно, то я не вижу никаких проблем и в этом случае. Но коли вы не понимаете как сделать через id хранящиеся в значении, то я уже и не знаю как вам объяснить. Давайте с админ части. Вы можете получить весь список товаров категории, либо постранично (что никак не накладывает ограничений на групповое обновление). Вот в этом списке вы можете только знать, что какой-то товар имеет изображение или нет, но ни вкоем случае не можете в этом списке его изменить/удалить. Но в этом списке вы можете отметить товар как ТОР или дпугое, что собственно не важно. В этом же списке можно и другие подобные операции групповые производить, и делать это проще так, как я вам уже неоднократно говорил. А вот насчет изменений изборажений товаров, и прочих подробностей, так это нужно делать по переходу на другую страницу или в окне, и только для одного товара. То же самое, если вам нужен список товаров с изображениями или без них, то только для того, чтобы производить манипуляции с этими изображениями, а не заниматься ТОРами товаров. Другими словами, нужно разграничивать задачи на групповые и частные, тогда у вас и проблем не будет в админ части.
Что касается пользователя. Если вы ему выводите постранично, то вы строите навигатор страничный, в котором указываете смещение запроса, и знаете, что вывод товаров категории на страницу осуществляется по 10 товаров. Зная смещение (а это id записи в таблице), вы будете знать с какой записи начать сброс параметра, а добавив к смещению 10, узнаете по какую запись производить сброс.
Вы понимаете или нет, что невыбранный чекбокс не придет к вам на сервер? А это означает, что если пользователеь видит неотмеченный чекбокс и не выберет его, то он как был нулем так и останется им - что вас тут может беспокоить при сбросе значения? Вам важно знать только то, что отметил пользователь, а то что он разотметил, вам не придет, не будет такой id записи в массиве вовзвращаемом формой! Очистили значения перед обновлением - значит уже сбросили те чекбоксы, которые разотметил пользователь, останеться только установить в 1 те, что вы получили массивом от пользователя. Ну неужели не понятно?
Если вы плохо разбираетесь в многомерных массивах, то укажите в форме несколько имен чекбоксов (как массивы) для каждой групповой операции (ТОР и т.п.) с соответствующими id записей в атрибутах value. Обрабатывайте каждый массив в отдельности и делайте необходимые изменения в таблице. | |
|
|
|