[php] probleem met uitlezen post arrays

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi, ik zit met een probleem

ik heb een form en deze kan data laten versturen (duh :P) maar wanneer iemand deze form heeft beantwoord en gesubmit worden de antwoorden in de db gezet, wanneer iemand terug komt op 'die' pagina worden alle antwoorden van deze pagina terug gezet in de pagina... nu zit ik met een probleem met het submitten en verwerken van deze data.

dit is de 1e 'form'
code:
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
43
44
45
<select name="qid[1][]" size="1">
    <option value="0">- Select -</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="open">Other</option>
</select>
<br>Open answer: <input type="text" size="20" name="qid[1][opentext]" value="">
<br>
<input type="checkbox" name="qid[2][0]" value="10">&nbsp;<strong>1</strong>&nbsp;
<input type="checkbox" name="qid[2][1]" value="11">&nbsp;<strong>2</strong>&nbsp;
<input type="checkbox" name="qid[2][2]" value="12">&nbsp;<strong>3</strong>&nbsp;
<input type="checkbox" name="qid[2][3]" value="13">&nbsp;<strong>4</strong>&nbsp;
<input type="checkbox" name="qid[2][4]" value="14">&nbsp;<strong>5</strong>&nbsp;
<input type="checkbox" name="qid[2][5]" value="15">&nbsp;<strong>6</strong>&nbsp;
<input type="checkbox" name="qid[2][6]" value="16">&nbsp;<strong>7</strong>&nbsp;
<input type="checkbox" name="qid[2][7]" value="17">&nbsp;<strong>8</strong>&nbsp;
<input type="checkbox" name="qid[2][open]" value="open">&nbsp;<strong>Other</strong>&nbsp;
<br>Open answer: <input type="text" size="20" name="qid[2][opentext]" value="">
<br>
<input type="radio" name="qid[3]" value="18">&nbsp;<strong>1</strong>&nbsp;
<input type="radio" name="qid[3]" value="19">&nbsp;<strong>2</strong>&nbsp;
<input type="radio" name="qid[3]" value="20">&nbsp;<strong>3</strong>&nbsp;
<input type="radio" name="qid[3]" value="21">&nbsp;<strong>4</strong>&nbsp;
<input type="radio" name="qid[3]" value="22">&nbsp;<strong>5</strong>&nbsp;
<input type="radio" name="qid[3]" value="23">&nbsp;<strong>6</strong>&nbsp;
<input type="radio" name="qid[3]" value="24">&nbsp;<strong>7</strong>&nbsp;
<input type="radio" name="qid[3]" value="25">&nbsp;<strong>8</strong>&nbsp;
<br>

<select multiple name="qid[4][]" size="4">
    <option value="26">this</option>
    <option value="27">is</option>
    <option value="28">one</option>
    <option value="29">of</option>
    <option value="30">my</option>
    <option value="31">options</option>
    <option value="open">Other</option>
</select>
<br>Open answer: <input type="text" size="20" name="qid[4][opentext]" value="">


wanneer ik deze invul krijg ik deze output

Antwoorden van me query (voor testen)
code:
1
2
3
4
5
6
7
8
9
1 Question: 1 --> Openanswer : anders 
2 Question: 2 --> Answer : 17 
1 Question: 2 --> Openanswer : open 2 
1 Question: 4 --> Openanswer : also another 
2 Question: 4 --> Answer : 27 
2 Question: 4 --> Answer : 28 
2 Question: 4 --> Answer : 29 
2 Question: 4 --> Answer : 30 
2 Question: 4 --> Answer : 31


en als $_POST results
code:
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
array(4) {
  [1]=>
  array(2) {
    [0]=>
    string(4) "open"
    ["opentext"]=>
    string(6) "anders"
  }
  [2]=>
  array(3) {
    [7]=>
    string(2) "17"
    ["open"]=>
    string(4) "open"
    ["opentext"]=>
    string(6) "open 2"
  }
  [3]=>
  string(2) "25"
  [4]=>
  array(8) {
    [0]=>
    string(2) "26"
    [1]=>
    string(2) "27"
    [2]=>
    string(2) "28"
    [3]=>
    string(2) "29"
    [4]=>
    string(2) "30"
    [5]=>
    string(2) "31"
    [6]=>
    string(4) "open"
    ["opentext"]=>
    string(12) "also another"
  }
}


als ik deze weer inlees zie ik dat de volgende dingen fout zijn gegaan.

1. de 'round' buttons waarvan er maar 1 geselecteerd kan zijn is niet verwerkt :"(
2. wanneer ik deze gegevens weer laad mis ik steeds 1 van de 'pulldown' geselecteerde items..

code na submitten pagina
code:
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
43
44
45
46
47
<select name="qid[1][]" size="1">
    <option value="0">- Select -</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="open" selected>Other</option>
</select>
<br>Open answer: <input type="text" size="20" name="qid[1][opentext]" value="anders">
<br>

<input type="checkbox" name="qid[2][0]" value="10">&nbsp;<strong>1</strong>&nbsp;
<input type="checkbox" name="qid[2][1]" value="11">&nbsp;<strong>2</strong>&nbsp;
<input type="checkbox" name="qid[2][2]" value="12">&nbsp;<strong>3</strong>&nbsp;
<input type="checkbox" name="qid[2][3]" value="13">&nbsp;<strong>4</strong>&nbsp;
<input type="checkbox" name="qid[2][4]" value="14">&nbsp;<strong>5</strong>&nbsp;
<input type="checkbox" name="qid[2][5]" value="15">&nbsp;<strong>6</strong>&nbsp;
<input type="checkbox" name="qid[2][6]" value="16">&nbsp;<strong>7</strong>&nbsp;
<input type="checkbox" name="qid[2][7]" value="17" checked>&nbsp;<strong>8</strong>&nbsp;
<input type="checkbox" name="qid[2][open]" value="open" checked>&nbsp;<strong>Other</strong>&nbsp;
<br>Open answer: <input type="text" size="20" name="qid[2][opentext]" value="open 2">
<br>

<input type="radio" name="qid[3]" value="18">&nbsp;<strong>1</strong>&nbsp;
<input type="radio" name="qid[3]" value="19">&nbsp;<strong>2</strong>&nbsp;
<input type="radio" name="qid[3]" value="20">&nbsp;<strong>3</strong>&nbsp;
<input type="radio" name="qid[3]" value="21">&nbsp;<strong>4</strong>&nbsp;
<input type="radio" name="qid[3]" value="22">&nbsp;<strong>5</strong>&nbsp;
<input type="radio" name="qid[3]" value="23">&nbsp;<strong>6</strong>&nbsp;
<input type="radio" name="qid[3]" value="24">&nbsp;<strong>7</strong>&nbsp;
<input type="radio" name="qid[3]" value="25">&nbsp;<strong>8</strong>&nbsp;
<br>

<select multiple name="qid[4][]" size="4">
    <option value="26">this</option>
    <option value="27" selected>is</option>
    <option value="28" selected>one</option>
    <option value="29" selected>of</option>
    <option value="30" selected>my</option>
    <option value="31" selected>options</option>
    <option value="open" selected>Other</option>
</select>
<br>Open answer: <input type="text" size="20" name="qid[4][opentext]" value="also another">


het 'complete' stukje source dat ik hiervoor heb gebruikt (zelf gemaakt is)

PHP:
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
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        foreach ($_POST['qid'] as $key => $value) {
            clearAnswers($key); // remove eerder gezette antwoorden :)
            if (count($_POST['qid'][$key]) >1) {
                foreach($_POST['qid'][$key] as $secKey => $secValue) {
                    if ($secKey == "open") {
                        // insert open anwer into database
                        $questionid = $key;
                        $questionopenanswer = $_POST['qid'][$key]['opentext'];

                        saveOpenAnswer($_GET['id'], $questionid, addslashes(htmlspecialchars($questionopenanswer)));
                        echo "1 Question: $questionid --> Openanswer : $questionopenanswer <br>";
                    }elseif ($secKey != "opentext" && $secValue != "open") {
                        // insert normal antwoord in database
                        $questionid = $key;
                        $questionanswer = $secValue;
                        saveAnswer($_GET['id'], $questionid, $questionanswer);
                        echo "2 Question: $questionid --> Answer : $questionanswer <br>";
                    }
                }
            }else{
                if ($key == "open") {
                    // insert open anwer into database
                    $questionid = $key;
                    $questionopenanswer = $_POST['qid'][$key]['opentext'];
                    echo "3 Question: $questionid --> Openanswer : $questionopenanswer <br>";
                }else{
                    // insert normal antwoord in database
                    $questionid = $key;
                    $questionopenanswer = $secValue;
                    echo "4 Question: $questionid --> Answer : $questionopenanswer <br>";
                }
            }
        }
        echo '<pre>'; // laat die $_POST zien ;)
        var_dump($_POST['qid']);
        echo '</pre>';
    }


ik hoop dat er iemand is die me wil helpen, indien je hier niets aan hebt en de gehele source graag wilt zien zal ik dat persoonlijk overwegen, niet iedereen is natuurlijk te vertrouwen ;)

Alvast zeer bedankt.

dit is echter geen one day problem... tis maar ff dat jullie het weten!

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

wat doet $secValue op regel 30 :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
eingelijk heel weinig zoals ik nu wel zie, alleen als je kijkt naar wat er aangeroepen wordt zie je dat 3 en 4 niet gebruikt worden :{

ik moet dus op een of andere manier de output van de $_POSTs beter verwerken al heb ik geen flauw idee hoe? :'(

Acties:
  • 0 Henk 'm!

  • sjon.
  • Registratie: November 2002
  • Laatst online: 14-01-2024
ik snap even niet waarom je qid[1][] gebruikt ipv qid[1]
neem aan dat qid staat voor question_id, en dat elke entry in die array staat voor een vraag.
waarom dan een array in een array voor 't antwoord ???

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
idd

qid = question id
[1] = het id dus
[] = voor een array (als die mag bestaan (dus meerdere antwoorden), zoniet dan staat dat er dus niet)

maar toch gaat het ergens fout ik moet dus een routine schrijven die het volgende doet
code:
1
2
3
4
5
1. bestaat qid? -> nee? (exit)
        |
       Ja? ---> is het een array? --> nee? --> pak die waarden (qid[id] == waarde)
                           |
                          ja? --> doe een loop en fetch alle waarden

maar op een of andere manier gaat dat dus fout..

[ Voor 0% gewijzigd door Verwijderd op 12-11-2002 21:55 . Reden: editje ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

gebruik btw om te checken of iets een array is niet count, maar gewoon is_array (). Is wat logischer/transparanter.

edit:

code:
1
2
3
4
5
6
7
8
9
10
foreach ( $qid as $question_nr => $answers ) {
   if ( is_array ( $answers ) ) {
      echo "Vraag $question_nr heeft meerdere antwoorden:\n";
      foreach ( $answers as $answer_nr => $answer ) {
         echo $answer, "\n";
      }
   } else {
      echo "Vraag $question heeft 1 antwoord: $answers\n";
   }
}


zoiets :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
geweldig, idd die isarray werkt gewoon veel beter, stom dat dat niet werkt... maar nu werkt hij helemaal :* super bedankt voor je tijd :D

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
[ en wat deden we ook alweer met Sitechecks? ]

[ Voor 0% gewijzigd door drm op 20-11-2002 22:44 ]

Pagina: 1