Как я могу хранить вопросы из этого массива в моей базе данных, имеющей категорию в качестве родителя - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть динамический список, в который люди могут добавлять категории, и для каждой категории они могут добавлять вопросы.

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

Это моя структура базы данных:

templates:
id - template id
title - name of list (template)
id_company (company list belongs to, irrelevant for this question)

questioncat:
id - id of category
title - name of category
tid - template id that the category belongs to

questions:
id - question id
question - the actual question
catid - category id that the questions belong to

С кодом, который яВ настоящее время я могу добавить шаблон с категориями, связанными с ним.Я делаю это с кодом ниже:

$conn = new Connection;

$arr = $_POST['lijst'];

$companyid = $_POST['companyid'];

$store = [];

// pull off first arr element
$title = array_shift($arr);
// save title to store
$store['title'] = $title['name'];

// Insert template title and companyid
$inserttemplate = '
INSERT INTO templates (title, id_company) VALUES ("'.$conn->real_escape_string($title["value"]).'","'.$conn->real_escape_string($companyid).'")';
$inserttemplatecon = $conn->query($inserttemplate);
$lastinserted = $conn->inserted_id();

$currCat = '';
foreach($arr as $a) {
  $val = $a['value'];
  // handle category
  if($a['name'] == 'category[]') {
    // save cat name
    $currCat = $val;

        $insertcats = '
        INSERT INTO questioncat (title, tid) VALUES ("'.$conn->real_escape_string($currCat).'", "'.$conn->real_escape_string($lastinserted).'")';
        $insertcatscon = $conn->query($insertcats);

    // init questions array
    $store[$currCat] = [];

        echo $store[$currCat];
  }else {
    // add question to question array
    $store[$currCat][] = $val;
  }
}

Если я распечатываю массив $store при добавлении некоторых примеров категорий / вопросов, это пример результата:

Array
(
    [title] => lijsttitle
    [Category 1] => Array
        (
            [0] => Question 1
            [1] => Question 2
            [2] => Question 3
        )

    [Category 2] => Array
        (
            [0] => Question 1
        )

    [Category 3] => Array
        (
            [0] => Question 1
        )

    [Category 4] => Array
        (
            [0] => Question 1
            [1] => Question 2
        )

)

Я попытался повторитьecho $store[$currCat]; чтобы посмотреть, смогу ли я показать вопросы, но это массив, поэтому он просто показывает массив, если я его распечатываю, я вижу только Array().

Как я могу добавить вопросы в свою базу данных с помощью длякаждому вопросу правильный идентификатор категории, к которому он принадлежит?

var_dump из $arr, как указано ниже:

array(11) {
  [0]=>
  array(2) {
    ["name"]=>
    string(10) "category[]"
    ["value"]=>
    string(10) "Category 1"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(10) "question[]"
    ["value"]=>
    string(10) "Question 1"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(10) "question[]"
    ["value"]=>
    string(10) "Question 2"
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(10) "question[]"
    ["value"]=>
    string(10) "Question 3"
  }
  [4]=>
  array(2) {
    ["name"]=>
    string(10) "category[]"
    ["value"]=>
    string(10) "Category 2"
  }
  [5]=>
  array(2) {
    ["name"]=>
    string(10) "question[]"
    ["value"]=>
    string(10) "Question 1"
  }
  [6]=>
  array(2) {
    ["name"]=>
    string(10) "category[]"
    ["value"]=>
    string(10) "Category 3"
  }
  [7]=>
  array(2) {
    ["name"]=>
    string(10) "question[]"
    ["value"]=>
    string(10) "Question 1"
  }
  [8]=>
  array(2) {
    ["name"]=>
    string(10) "category[]"
    ["value"]=>
    string(10) "Category 4"
  }
  [9]=>
  array(2) {
    ["name"]=>
    string(10) "question[]"
    ["value"]=>
    string(10) "Question 1"
  }
  [10]=>
  array(2) {
    ["name"]=>
    string(10) "question[]"
    ["value"]=>
    string(10) "Question 2"
  }
}

1 Ответ

0 голосов
/ 12 декабря 2018

Я думаю, что это должно помочь:

foreach($arr as $ar){

foreach($ar as $key=>$val){
        if(($key=="name")&&($val=="category[]"))
            //insert into category table here and retrieve its id(category Id)
        elseif(($key=="name")&&($val=="question[]"))
            //insert into questions table with the retrieved category Id.
       }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...