в зависимости от значения переменной сделать одну или несколько записей MySQL

Тема в разделе "PHP", создана пользователем funest, 30 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. funest

    funest Постоялец

    Регистр.:
    2 июл 2007
    Сообщения:
    145
    Симпатии:
    38
    Есть переменная, в которой может находится несколько значений. Например $var = 1; либо $var = 1, 2, 3;
    В зависимости от значения, мне нужно добавить в MySQl таблицу. Но если в переменной несколько значений, то действие нужно повторить с другим значением.
    все это находится в цикле for
    Если бы в переменной было одно значение, то сделал бы вот так:
    PHP:
    for (i=0i<count($db); $i++) {
    $id $db[$i]->id;
     if(
    strstr($id'1')) {
       
    добавление записи 1;
     } elseif (
    strstr($id'2')) {
       
    добавление записи 2;
     } else {
       
    добавление записи 3;
     }
    Но в переменной несколько значений и соответственно надо добавить несколько записей. Помогите, совсем запутался
     
  2. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    PHP:
    $ids explode(',',$db[$i]->id);
    foreach(
    $ids as $id ) {
        switch(
    $id) {
            case 
    '1':
                
    добавление записи 1
                break;
            case 
    '2':
                
    добавление записи 2
                break;
            default:
                
    добавление записи 1
        }
    }
     
    funest нравится это.
  3. funest

    funest Постоялец

    Регистр.:
    2 июл 2007
    Сообщения:
    145
    Симпатии:
    38
    Сейчас попробую )
     
  4. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    А зачем там switch?
    Просто
    PHP:
    foreach($ids as $id) {
        
    $id = (int)$id;
        if(
    $id != 0) {
            
    mysql_query('INSERT INTO `table` (`id`, `value`) VALUES ('.$id.', "blahblah")');
        }
    }
     
  5. funest

    funest Постоялец

    Регистр.:
    2 июл 2007
    Сообщения:
    145
    Симпатии:
    38
    В переменной не цифровые значения, это я привел для примера
     
  6. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    Тогда так:
    PHP:
    $values explode(',',$db[$i]->id);
    foreach(
    $values as $value) { 
        
    mysql_query('...');
    }
    Ну и естественно $value нужно обезопасить, если она от пользователя приходит.
     
  7. funest

    funest Постоялец

    Регистр.:
    2 июл 2007
    Сообщения:
    145
    Симпатии:
    38
    Это парсер XML.
    То есть можно сократить этот код:
    PHP:
    $types explode(',',$db[$i]->type);
    foreach(
    $types as $type ) {
        switch(
    $type) {
            case 
    'Комедия':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '1', $id)"$msconnect); 
                break;
            case 
    'Боевик':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '2', $id)"$msconnect); 
                break;
            case 
    'Драма':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '3', $id)"$msconnect); 
                break;
            case 
    'Детектив':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '4', $id)"$msconnect); 
                break;
            case 
    'Мистика':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '5', $id)"$msconnect); 
                break;
            case 
    'Фантастика':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '6', $id)"$msconnect); 
                break;
            case 
    'Исторический':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '7', $id)"$msconnect); 
                break;
            case 
    'Документальный':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '8', $id)"$msconnect); 
                break;
            case 
    'Мультфильм':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '9', $id)"$msconnect); 
                break;
            case 
    'Отечественный':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '10', $id)"$msconnect); 
                break;
            case 
    'Семейный':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '11', $id)"$msconnect); 
                break;
            case 
    'Мелодрама':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '12', $id)"$msconnect); 
                break;
            case 
    'Приключения':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '13', $id)"$msconnect); 
                break;
            case 
    'Военный':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '14', $id)"$msconnect); 
                break;
            case 
    'Триллер':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '15', $id)"$msconnect); 
                break;
            case 
    'Ужасы':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '16', $id)"$msconnect); 
                break;
            case 
    'Фэнтэзи':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '17', $id)"$msconnect); 
                break;
            case 
    'Спорт':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '18', $id)"$msconnect); 
                break;
            case 
    'Телепередача':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '19', $id)"$msconnect); 
                break;
            case 
    'Анимация':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '20', $id)"$msconnect); 
                break;
            case 
    'Пародия':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '21', $id)"$msconnect); 
                break;
            case 
    'Эротика':
                
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '22', $id)"$msconnect); 
                break;
            default:
               
    $janr 0;
        }
        }
    До этого:
    PHP:
    $values explode(',',$db[$i]->id);
    foreach(
    $values as $value) { 
        
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '$value', $id)"$msconnect); 
    }
    Помоему я что-то упустил )))
     
  8. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    Вы не уточняли этого :) И тем не менее, сократить можно:
    PHP:
    $values 'Комедия, Драма';
    $values explode(',',$values);
    $genres = array(
        
    'комедия'        => '1',
        
    'боевик'         => '2',
        
    'драма'          => '3',
        
    'детектив'       => '4',
        
    'мистика'        => '5',
        
    'фантастика'     => '6'
        
    'исторический'   => '7'
        
    'документальный' => '8',
        
    'мультфильм'     => '9',
        
    'отечественный'  => '10',
        
    'семейный'       => '11',
        
    'мелодрама'      => '12',
        
    'приключения'    => '13',
        
    'военный'        => '14',
        
    'триллер'        => '15',
        
    'ужасы'          => '16',
        
    'фэнтэзи'        => '17',
        
    'спорт'          => '18',
        
    'телепередача'   => '19',
        
    'анимация'       => '20',
        
    'пародия'        => '21',
        
    'эротика'        => '22'
    );
    foreach(
    $values as $value) { 
        
    $value strtolower(trim($value));
        if(
    array_key_exists($value$genres)) {
            
    mysql_query("INSERT INTO jos_zoo_core_category_item VALUES (3, '".$genres[$value]."', $id)"$msconnect);
        }
    }  
     
    latteo и funest нравится это.
Статус темы:
Закрыта.