2016-03-30 3 views
0

Я знаю, что этот вопрос может быть очень простым для опытных людей. Но я все еще участвую в процессе обучения, поэтому мне нужна помощь.Как заполнить массив сеанса данными из базы данных?

Я хочу заполнить массив сеанса данными, поступающими из базы данных. В массиве сеансов может быть несколько элементов. Я пытаюсь сделать это, как это -

$sql = mysqli_query($con, "SELECT * FROM `purchase_info_details` WHERE `purchase_details_id` = '$pur_det_id'"); 

while ($row = mysqli_fetch_array($sql)) { 

    $data[$i]['purchase_details_id'] = $row['purchase_details_id']; 
    $data[$i]['cid'] = $row['id']; 
    $data[$i]['item_id'] = $row['item_id']; 
    $data[$i]['unit_id'] = $row['unit_id']; 
    $data[$i]['quantity'] = $row['quantity']; 
    $data[$i]['price'] = $row['price']; 
    $data[$i]['conv_rate'] = $row['conv_rate']; 

    $_SESSION['list1_data']['purchase_details_id'] = $data[$i]; 
} 

FYI: purchase_details_id является первичным ключом. Этот код работает частично. Я имею в виду, что я получаю только одну строку из таблицы в моем массиве сеансов, но мне нужно получить все строки из таблицы, соответствующие моему SQL-запросу.

Я искал подходящий пример в Интернете, но еще не нашел. Я действительно застрял в этом и не нашел никакого решения. Пожалуйста помоги!

Спасибо!

+2

использовать другой уровень в массиве сеанса, как '$ _SESSION [ 'list1_data'] [] = $ данных [$ я];' –

+0

Я считаю, что вам нужно сделать session_start(); в верхней части файла. – weaveoftheride

+0

Спасибо @ B-and-P –

ответ

1

Проблема заключается в том, что ваш всегда переписывая одни и те же данные в вашем массиве сеансов. Когда ваш цикл будет завершен, у вас будет последняя строка из вашего набора данных в вашем массиве сеансов.

Чтобы добавить новую строку в массиве сеанса каждый раз, когда вы можете продолжить как:

$_SESSION['list1_data'][] = $data[$i]; 

или если вы хотите конкретный ключ из ваших данных (при условии, что это единственный):

$_SESSION['list1_data'][$row['purchase_details_id']] = $data[$i]; 
+0

наконец, ответ, который объясняет решение, а не просто «сделать это» =) – BobbyTables

+0

Спасибо! @ st2rw2od –

0

ли это:

$_SESSION['list1_data'][$row['purchase_details_id']] = $data[$i]; 

Таким образом, вы можете получить прямой доступ конкретные данные идентификатор из сеанса. Например:

$row = $_SESSION['list1_data'][1]; //row for the id = 1 

Pro совет: Всегда проверяйте, если ключ установлен, иначе вы будете получать предупреждения =)

0

попробовать что-то вроде этого

while ($row = mysqli_fetch_array($sql)) { 

    $data[$i]['purchase_details_id'] = $row['purchase_details_id']; 
    $data[$i]['cid'] = $row['id']; 
    $data[$i]['item_id'] = $row['item_id']; 
    $data[$i]['unit_id'] = $row['unit_id']; 
    $data[$i]['quantity'] = $row['quantity']; 
    $data[$i]['price'] = $row['price']; 
    $data[$i]['conv_rate'] = $row['conv_rate']; 

    $_SESSION["db_data"][$i] = $data[$i];// or just $_SESSION[$i] = $data[$i] 
} 
0
$_SESSION['list1_data']['purchase_details_id'] = $data[$i]; always overwrite and you get only last value . use $_SESSION['list1_data'][$row['purchase_details_id']] = $data[$i];  

просто назначьте массив сеансу, когда закончите цикл. как показано ниже

$_SESSION['list1_data'] = $data; 

or as you say product_id is unique then why you use $i ? (use $data[$row['purchase_details_id']]['purchase_details_id'] = value , use $data[$row['purchase_details_id']]['cid'] = value etc ...) 
0

убедитесь, что вы инициализировать метод сеанса(), и вы можете сделать 2 или 3-мерный массив, как вам нужно, чтобы сохранить значение базы данных как @ B-и-P упоминание в своих комментариях ,

благодаря

Смежные вопросы