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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив id 
:(
    Опции темы
viking12
Дата 13.6.2015, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый вечер!
Есть запрос :
Код

mysql_query("update database_items set vis='".$Vis."' where id = '".$Item['id']."'")

Где .$Item['id']. - массив ID
Подскажите пожалуйста, как получить мне определенный id елемента?
PM MAIL   Вверх
Sanchezzz
Дата 14.6.2015, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



Сформулируйте свой вопрос заново и верно, пока я не пойму что вы хотите сделать.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
viking12
Дата 14.6.2015, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Sanchezzz, Мне нужно вместо массива ID получить ID елемента и подставить его в запрос. Когда я подставляю массив, то обновление идет всех елементов. 
PM MAIL   Вверх
ksnk
Дата 14.6.2015, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(viking12 @  13.6.2015,  21:17 Найти цитируемый пост)
Где .$Item['id']. - массив ID

Тоесть, исходный запрос, после подстановки всех значений выглядит как-то так?
Код

update database_items set vis='1' where id = 'Array'

Нормальный запрос smile Обновления всех элементов быть не должно.

Можно foreach пробежаться по всем элементам массива и для каждого выполнить запрос.
Можно смастерить один запрос, используя конструкцию IN и implode  ...where id in(1,2,3,...)



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
viking12
Дата 14.6.2015, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk
Код

if($Items = Data :: GetDataValues('database_items', $DataParameters))
        {
    
        $ItemsBody .= "<form method=post><input type='submit' name='vis' value='Сохранить'>";    
 $ItemId = $_GET['item'];
            foreach ($Items as $Item)
            {
        
               
        
                $ItemsBody .= "<td align='center'><a href='?div=database&subdiv=edititem&item=".$Item['id']."'><img src='/userfiles/database/itemimages/small/".$Item['photo']."' width='80px'></a></td>";
                $ItemsBody .= "<td align='center'>".Data :: GetDataValue('database_brands', 'id', $Item['brand'], 'name')."</td>";
                
                $ItemsBody .= "<td align='center'><a href='?div=database&subdiv=edititem&item=".$Item['id']."'>".$Item['name']."</a></td>";
                $ItemsBody .= "<td><input type='text' style='width:60px;' onkeyup=\"ch_price('".$Item['id']."', this.value)\" name='price_".$Item['id']."' value='".$Item['vis']."'></td>";
                $ItemsBody .= "<td align='center'><a onClick='ConfirmDialog(\"".DELETE_ITEM_QUESTION."\", \"?div=database&divtoedit=$DivToEdit&deleteitem=".$Item['id']."\")' ><img src='/admin/template/images/delete.png'></a></td>";
               if($Item['vis']) $Chec = 'checked'; else $Chec = '';                  
                $ItemsBody .= "<td align='center'><a href='?div=database&subdiv=edititem&item=".$Item['id']."'><input type='checkbox' name='vis'id=".$Item['id']." value='1' $Chec>'".$Item['vis']."'</a></td>";
              
            

           
        
        if(isset($_POST['vis'])) $Vis = $_POST['vis'];else $Vis = '';
          mysql_query("UPDATE `database_items` SET `vis`='".$Vis."' WHERE id='".$Item['id']."'"); 
               
             
                $ItemsBody .= "</tr>";
  


               
            }
            
        } 
        
        $ItemsBody .= "</table></form>";
        $ItemsBody .= "<p><center><a href='?div=database&subdiv=additem'>Добавить товар</a></center></form>";
        return $ItemsBody;
    }

Всеравно ставит на все елементы галочки
PM MAIL   Вверх
ksnk
Дата 14.6.2015, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



А что должно быть в переменной $Vis? Сейчас туда вставляется value из вот этого элемента, 
Код

<input type='submit' name='vis' value='Сохранить'>

так и задумывалось?

Распечатай сам текст выполняемого запроса. Примерно так, чтобы разметка не ползла
Код

echo '<!--'."UPDATE `database_items` SET `vis`='".$Vis."' WHERE id='".$Item['id']."'".'-->';

Что получается?




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
viking12
Дата 14.6.2015, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk

Код

UPDATE `database_items` SET `vis`='' WHERE id='356'
UPDATE `database_items` SET `vis`='' WHERE id='4'
UPDATE `database_items` SET `vis`='' WHERE id='9'
UPDATE `database_items` SET `vis`='' WHERE id='10'
UPDATE `database_items` SET `vis`='' WHERE id='11'
UPDATE `database_items` SET `vis`='' WHERE id='24'
UPDATE `database_items` SET `vis`='' WHERE id='233'
UPDATE `database_items` SET `vis`='' WHERE id='432'
UPDATE `database_items` SET `vis`='' WHERE id='5'
UPDATE `database_items` SET `vis`='' WHERE id='6'UPDATE `database_items` SET `vis`='' WHERE id='7'UPDATE `database_items` SET `vis`='' WHERE id='26'
UPDATE `database_items` SET `vis`='' WHERE id='28'
UPDATE `database_items` SET `vis`='' WHERE id='29'UPDATE `database_items` SET `vis`='' WHERE id='412'UPDATE `database_items` SET `vis`='' WHERE id='8'
UPDATE `database_items` SET `vis`='' WHERE id='225'UPDATE `database_items` SET `vis`='' WHERE id='226'UPDATE `database_items` SET `vis`='' WHERE id='244'
UPDATE `database_items` SET `vis`='' WHERE id='245'UPDATE `database_items` SET `vis`='' WHERE id='298'UPDATE `database_items` SET `vis`='' WHERE id='299'
UPDATE `database_items` SET `vis`='' WHERE id='300'UPDATE `database_items` SET `vis`='' WHERE id='343'UPDATE `database_items` SET `vis`='' WHERE id='342'
UPDATE `database_items` SET `vis`='' WHERE id='227'UPDATE `database_items` SET `vis`='' WHERE id='30'


vis, то ошибочка, это запись с чекбокса

Добавлено @ 21:50
viking12
viking12
В цикле все выводит

Это сообщение отредактировал(а) Aliance - 17.6.2015, 08:27
PM MAIL   Вверх
ksnk
Дата 14.6.2015, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Вот первых, почему данные получаются с помощью Data :: GetDataValues, а устанавливаются вручную, запросом? Там что так и задумано? Если есть своя служба работы с данными - нужно пользоваться ей.

Цитата(viking12 @  14.6.2015,  21:48 Найти цитируемый пост)
vis, то ошибочка, это запись с чекбокса 

То есть весь этот код - не взят из текста проекта, а набран вот прямо тут?

 mysql_query("UPDATE ... стоит в ЦИКЛЕ! Без всяких условий. Тоесть он всегда будет выполнен для всех выводимых Item. Если верить тому, что написано - значение $Vis тоже будет одно и то же на все элемент таблицы.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
viking12
Дата 14.6.2015, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



vis - это чекбокс
ksnk
PM MAIL   Вверх
ksnk
Дата 14.6.2015, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Убери с этого инпута имя vis
Код

<input type='submit' name='vis' value='Сохранить'>

Оно пересекается с именем чекбокса.

Чекбокс лучше выводить так
Код

... ."'><input type='checkbox' name='vis[".$Item['id']."]' value='1' $Chec>'"

атрибут ID там, вроде как не нужен

Установка правильного значения, тогда, будет выглядеть так
Код

   if(isset($_POST['vis']) && !empty($_POST['vis'][$Item['id']])) $Vis =1;else $Vis = '';
   mysql_query("UPDATE `database_items` SET `vis`='".$Vis."' WHERE id='".$Item['id']."'"); 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
viking12
Дата 16.6.2015, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk
Спасибо, только теперь выводиться после обновления.
Сделал как Вы написали
Код

foreach ( $_POST['vis'] as $key=>$val) 
{
    //$key - индекс элемента
}

 а куда $key подставить?
PM MAIL   Вверх
ksnk
Дата 16.6.2015, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Код

// сначала обрабатываем возможный $_POST
if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['vis'])){
    if($Items = Data :: GetDataValues('database_items', $DataParameters))
        foreach($Items as $Item){
            if(isset($_POST['vis'][$Item['id']])) $Vis=1; else $Vis=0;
            mysql_query("UPDATE `database_items` SET `vis`='".$Vis."' WHERE id='".$Item['id']."'");
        }
}

// затем, еще раз читаем полученные значения и выводим

if($Items = Data :: GetDataValues('database_items', $DataParameters))
{

    $ItemsBody .= "<form method=post><input type='submit' name='vis' value='Сохранить'>";
    $ItemId = $_GET['item'];
    foreach ($Items as $Item)
    {



        $ItemsBody .= "<td align='center'><a href='?div=database&subdiv=edititem&item=".$Item['id']."'><img src='/userfiles/database/itemimages/small/".$Item['photo']."' width='80px'></a></td>";
        $ItemsBody .= "<td align='center'>".Data :: GetDataValue('database_brands', 'id', $Item['brand'], 'name')."</td>";

        $ItemsBody .= "<td align='center'><a href='?div=database&subdiv=edititem&item=".$Item['id']."'>".$Item['name']."</a></td>";
        $ItemsBody .= "<td><input type='text' style='width:60px;' onkeyup=\"ch_price('".$Item['id']."', this.value)\" name='price_".$Item['id']."' value='".$Item['vis']."'></td>";
        $ItemsBody .= "<td align='center'><a onClick='ConfirmDialog(\"".DELETE_ITEM_QUESTION."\", \"?div=database&divtoedit=$DivToEdit&deleteitem=".$Item['id']."\")' ><img src='/admin/template/images/delete.png'></a></td>";
        if($Item['vis']) $Chec = 'checked'; else $Chec = '';
        $ItemsBody .= "<td align='center'><a href='?div=database&subdiv=edititem&item=".$Item['id']."'><input type='checkbox' name='vis'id=".$Item['id']." value='1' $Chec>'".$Item['vis']."'</a></td>";


//        if(isset($_POST['vis'])) $Vis = $_POST['vis'];else $Vis = '';
//        mysql_query("UPDATE `database_items` SET `vis`='".$Vis."' WHERE id='".$Item['id']."'");


        $ItemsBody .= "</tr>";

    }

}

$ItemsBody .= "</table></form>";
$ItemsBody .= "<p><center><a href='?div=database&subdiv=additem'>Добавить товар</a></center></form>";
return $ItemsBody;
}




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
viking12
Дата 16.6.2015, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk
Спасибо большое!

PM MAIL   Вверх
Aliance
Дата 17.6.2015, 08:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Google по следующим словам:
1) mysql_* -> PDO
2) sql injection
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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