"неопределенный" кодовый указатель сегмента uri; Сначала функция ищет нулевой сегмент URI, затем пытается использовать другую функцию - PullRequest
0 голосов
/ 12 марта 2012

Это веб-приложение, которое работает, когда пользователь ищет элемент для добавления в свой список, а в результатах поиска отображается элемент, который ранее был добавлен в его список.

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

Вот первая функция, которая работает для добавления элемента, который ранее был на пользователясписок;(обратите внимание на строку if ($ user_item_id == 'null' ... "... это должна вызывать вторую функцию с именем" addToUserItems ")

function addItem() {
    $user_item_id = $this->uri->segment( 3 );
    $master_item_id = $this->uri->segment( 4 );
    $store = $this->uri->segment( 5, '' );
    $user_id = $this->main_model->getMasterUser( $this->user_id );

    if ( $user_item_id == 'null' ) $user_item_id = $this->main_model->addToUserItems( $master_item_id, $user_id );
    $quantity = $this->main_model->addToShoppingList( $user_item_id, $store, $user_id );

    $message  = ( $quantity == '1' ) ? 'Added to list.' : 'On shopping list ' . $quantity . ' times.';
    $message .= '&nbsp; &nbsp; <span class="undo_button" params="unadd/' . $user_item_id . '">Undo?</span>';

    $return = array(
        'message'      => $message,
        'user_item_id' => $user_item_id,
        );
    echo json_encode( $return );
    }

Вот вторая функция, которая должна быть установлена"user_item_id", но, по-видимому, нет;

function addToUserItems( $master_item_id, $user_id ) {
    $query = $this->db->query( "
        INSERT INTO user_item ( master_item_id, user_id, custom_category, custom_name, custom_store, expires_after, on_hand )
        SELECT id, " . $user_id . ", original_category, original_name, '', default_expiration, 0
        FROM master_item
        WHERE id = '" . $master_item_id . "'
        ;" );
    return $this->db->insert_id();
    }

Есть идеи, почему мы видим, что "user_item_id" не определен? Думаю, после нескольких часов предположений тестирования, что вторая функция каким-то образом не устанавливает значение для $user_item_id.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2012

спасибо за предложенные исправления;получается, что переменная user_item_id не была установлена, если поле user_item_id не имело значения.исправлен код в другом файле, включив $ result ['user_item_id'] = 'null';кроме того, функция addItem, описанная выше, искала значение переменной user_item_id 'null', тогда как файл javascript, не упомянутый в моем исходном вопросе, искал переменную user_item_id, равную null.Итак, у нас была переменная, которую нужно было установить, и код в других файлах, которые должны были последовательно искать «ноль» против нуль.

0 голосов
/ 12 марта 2012

Это может быть связано с ошибкой: http://bugs.mysql.com/bug.php?id=9481 & http://bugs.mysql.com/bug.php?id=27033

Попробуйте разделить запрос, если можете себе позволить. Выберите данные на основе master_item_id, затем возьмите их и в отдельном запросе insert вставьте их в таблицу user_item. Наконец, запустите last_insert_id().

$masterItem = $this->db->query('SELECT * FROM master_item WHERE master_item_id = $master_item_id');
$userItem = array();//add master item and user_id stuff
$this->db->insert('user_item',$userItem);
return $this->db->insert_id();
...