Hoe kan ik vragen gekoppeld aan een categorie opslaan in mijn database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Snelle Jaap

Snelle Jaap

12/12/2018 11:02:11
Quote Anchor link
Ik heb een lijst waar mensen categorieen en vragen (hangend onder een bepaalde categorie) kunnen toevoegen. Dat lukt me aardig behalve het toevoegen van de vragen.

Dit is mijn database structuur (engels want ik had deze vraag ook op stackoverflow gezet zonder antwoord):

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

Mijn code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?PHP
$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;
  }
}

?>


Met bovenstaande code kan ik de array $store printen. Als ik wat voorbeeld gegevens invoer is dit het resultaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Array
(
    [title] => lijsttitle
    [Category 1] => Array
        (
            [0] => Question 1cat1
            [1] => Question 2cat1
            [2] => Question 3cat1
        )

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

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

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

)


Het lukt me nu een lijst op te slaan met de categorieen, alleen de vragen bij die categorieen niet.

Ik heb dit geprobeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?PHP
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] = [];

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

    foreach($store[$currCat] as $question){
        echo $question.'<br>';
    }
}

?>


$store[$currCat] loopen om eerst is de vragen te laten zien maar met die code krijg ik dit te zien:

Question 1cat1
Question 1cat1
Question 2cat1
Question 1cat1
Question 2cat1
Question 3cat1
Question 1cat2
Question 1cat3
Question 1cat4
Question 1cat4
Question 2cat4

Zoals je ziet klopt dat niet met de array, hoe komt dat? Ik heb ook al geprobeerd $question leeg te gooien binnen de 1e foreach. Volgens mij ben ik er bijna, als ik de vragen juist kan weergeven lukt het me wel ze in de database te inserten.
Gewijzigd op 12/12/2018 11:35:13 door Snelle Jaap
 
PHP hulp

PHP hulp

22/09/2020 12:53:54
 
Thomas van den Heuvel

Thomas van den Heuvel

12/12/2018 15:49:09
Quote Anchor link
Allereerst, hoe ziet jouw formulier er uit?
Wat zit er in $_POST, en in het bijzonder in $_POST['lijst']?
Waarom kopieer je dit naar een aparte variabele $arr? Dit heeft hier geen meerwaarde, het belemmert enkel de leesbaarheid.
Dan, wat probeer je hier precies te doen want het lijkt erop dat je alles tegelijkertijd probeert te doen?
- het koppelen van een template aan een company; jouw databasetabel impliceert dat je meerdere templates zou kunnen koppelen?
- het koppelen van categorieën aan templates?
- het koppelen van vragen aan een categorie?
In wezen zijn dit allemaal verschillende acties, dus ik denk dat je het jezelf nogal moeilijk maakt doordat je alles tegelijkertijd probeert te doen.

En dan dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if($a['name'] == 'category[]') {
    // ...
}
?>

Levert dat if-statement ooit true op? Maar dat hangt dus wederom van $_POST['lijst'] af. Het lijkt alsof die een nogal... exotische opbouw heeft.

Is het niet veel handiger om dit op te delen in verschillende acties? Eerst maakt iemand de templates aan, dan de categorieën en dan de vragen, in die volgorde?
 
Snelle Jaap

Snelle Jaap

12/12/2018 16:02:10
Quote Anchor link
** quoteknip **
De gets en posts zet ik meestal in een variabele omdat ik dat wat netter vind staan.

Formulier is inderdaad redelijk ingewikkeld opgebouwd je kunt hem ook sorteren en nieuwe categorieen toevoegen met daarin weer nieuwe vragen bij elke categorie.

Wat je zegt klopt inderdaad maar ik heb het al kunnen oplossen. Ik dacht veel te moeilijk na, $store bevatte al precies alle data die ik nodig had. Eerst heb ik de lijst titel uit de array gehaald en daarna de categorieen geloopt (met daarin een insert query) daarin loop ik weer de vragen met weer een insert die gekoppeld zit via het laatst geinserte id.

Edit:
Het is niet nodig om het voorlaatste bericht integraal te quoten. Je kan prima via de (Quick) reply reageren.
Gewijzigd op 12/12/2018 16:04:29 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.