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

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET Developer / Innovatieve software / Virtual Re

Functieomschrijving Als .Net developer werken aan innovatieve software waar onder andere gebruik gemaakt wordt van Virtual Reality? Bijdragen aan een organisatie waar je uitgedaagd wordt om continu verbeteringen en ontwikkelpunten te ontdekken en door te voeren? Werken in de omgeving Putten? Reageer dan nu voor meer informatie! Het pro-actief aandragen van verbeteringen voor de bestaande applicatie; Ontwikkelen van nieuwe functionaliteiten; Doorvoeren van aanpassingen en wijzigingen; Verantwoordelijk voor koppelingen met andere systemen; Op de hoogte blijven van technische ontwikkelingen. Functie-eisen Hbo werk- en denkniveau; Een afgeronde IT gerelateerde opleiding; Minimaal 1 jaar professionele ervaring als developer; Aantoonbare kennis van C#; Initiatiefrijke

Bekijk vacature »

Web Ontwikkelaar PHP, Nijmegen

Contactpersoon Roel Kavelaar rkavelaarATsearch-consult.nl 0243528815 0644949337 Organisatie Jong, gezond en sterk groeiende bedrijf dat webbased multimedia oplossingen bouwt in de omgeving Nijmegen. Het bedrijf bouwt voor klanten o.a. geavanceerde websites, webwinkels, webapplicaties en specifieke webbased software. Het bedrijf ontwikkelt en onderhoudt ook verschillende bekende Nederlandse websites. Op dit moment hebben zij een groeiende en brede klantenkring opgebouwd. Met betrekking tot programmeer-, onderhoud-, ontwerp-werkzaamheden wordt een PHP ontwikkelaar gezocht met kennis van contentmanagementsysteemen en frameworks. Locatie Nijmegen Verantwoordelijkheden (Her)Ontwerpen en (her)ontwikkelen in PHP ten behoeve van websites voor klanten, project klussen, onderhoud en specifieke klantwensen (Her)Ontwerpen en (her)ontwikkelen in PHP, PHP

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

19/06/2019 18:05:04
 
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.