Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > массив id


Автор: viking12 13.6.2015, 21:17
Добрый вечер!
Есть запрос :
Код

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

Где .$Item['id']. - массив ID
Подскажите пожалуйста, как получить мне определенный id елемента?

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

Автор: viking12 14.6.2015, 08:40
Sanchezzz, Мне нужно вместо массива ID получить ID елемента и подставить его в запрос. Когда я подставляю массив, то обновление идет всех елементов. 

Автор: ksnk 14.6.2015, 10:39
Цитата(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,...)

Автор: viking12 14.6.2015, 21:10
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;
    }

Всеравно ставит на все елементы галочки

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

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

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

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

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

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


Автор: viking12 14.6.2015, 21:48
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, 
В цикле все выводит

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

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

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

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

Автор: viking12 14.6.2015, 21:59
vis - это чекбокс
ksnk, 

Автор: ksnk 14.6.2015, 22:15
Убери с этого инпута имя 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']."'"); 

Автор: viking12 16.6.2015, 06:44
ksnk, 
Спасибо, только теперь выводиться после обновления.
Сделал как Вы написали
Код

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

 а куда $key подставить?

Автор: ksnk 16.6.2015, 08:19
Код

// сначала обрабатываем возможный $_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;
}


Автор: viking12 16.6.2015, 08:20
ksnk, 
Спасибо большое!

Автор: Aliance 17.6.2015, 08:29
Google по следующим словам:
1) mysql_* -> PDO
2) sql injection

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)