[php] checkboxen in db opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Longlegg
  • Registratie: Januari 2002
  • Laatst online: 13-04-2022

Longlegg

Danoontje POWERRRRR

Topicstarter
ik ben bezig om voor een soort vragenlijst de antwoorden te verwerken naar een database, alleen lukt me 1 ding niet eerst de code:

de file waarin de vragenlijst staat:

dit werkt wel, ik krijg netjes de vragenopties uit de db..

PHP:
1
2
3
4
5
6
        <?php
         $i = 0; 
         while($record2 = mysql_fetch_object($resopties)) { 
        (isset(${$result.$i})); 
      echo("$record2->veld value=\"$record2->optie\" name=\"result[$i]\" $checked>$record2->optie<br>");
      print ${$result.$i++}; }?>


als men op volgende drukt wordt deze data verstuurt naar:


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 $super = "INSERT INTO antwoorden(antwoordid, sessionid, vraagnr, antwoord)
VALUES ('', '$userid', '$vraagnr', '$result[$i]')";    
 
      for($i=0; $i < 20; $i++) 
        {            
            if ($result[$i]== 0) 
            { 
            } 
            else 
            { 
            $super = "INSERT INTO antwoorden(antwoordid, sessionid, vraagnr, antwoord) 
VALUES ('', '$userid', '$vraagnr', '$result[$i]')";
mysql_query($super); 
$superresult = mysql_query($super);
 }     
        } 
        //Foutcontrole 
   $result = mysql_query($super) or die("<b>A fatal MySQL error occured</b>.\n<br />
Query: " . $super . "<br />\nError: (" . mysql_errno() . ") " . mysql_error());


op deze manier maakt ie in de tabel WEL een record aan met een antwoordid, een sessionid, het goede vraagnr, maar GEEN antwoord, het blijft simpel weg leeg.

ik heb de query (insert into bla bla, op 2 plekken staan, omdat ie anders met de melding komt dat de query leeg is.. :/.

ziet iemand zo wat ik fout doe ? mijn dank is groot :) _/-\o_

ik heb al enige oplossingen die worden aangeboden op got geprobeerd, maar niks mocht baten helaas

[ Voor 11% gewijzigd door Longlegg op 09-06-2004 22:38 ]

Specs


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Je zou eens kunnen proberen om die laatste regel (met de foutcontrole) eruit te halen. Aan het begin van je script is $result[$i] namelijk nog leeg en als je dan die laatste query uitvoert overschrijf je hetgeen je eerder hebt toegevoegd in de db weer met een leeg antwoord.

edit:
En die or die natuurlijk bij de eerste keer dat je de query uitvoert neerzetten ;)

[ Voor 16% gewijzigd door Shadowman op 09-06-2004 22:45 ]


Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
Die dubbele query daar klopt natuurlijk niets van.
Je tabs staan een beetje raar, maar ik zie dus dat je een for functie gebruikt. Die voert dan bij de juiste waardes steeds die query uit. Waarom jje dan onderaan nogmaals die query uit gaat voeren is een beetje gek.

Je if functie kan handiger, als je nu eens
PHP:
1
2
3
4
if ($result[$i] != 0) 
            { 
            code
            }

gebruikt is mooier ;)

Welke melding krijg je bij welke query op welke plaats?

Hoe zo'n for functie precies werkt weet ik even niet meer (schaam :P) maar wat wil je precies doen?

edit:
Ik neem aan dat je via POST of GET die data erin weet te stampen :)
Wat ook handig is om te debuggen, is om even een die ("$iets"); neer te zetten, zodat je ziet waar het misloopt, of tot waar de variabele nog wel de juiste waarde heeft.

[ Voor 20% gewijzigd door pierre-oord op 09-06-2004 22:49 ]


Acties:
  • 0 Henk 'm!

  • Longlegg
  • Registratie: Januari 2002
  • Laatst online: 13-04-2022

Longlegg

Danoontje POWERRRRR

Topicstarter
tabs komen doordat ik anders de layout verneuk :p, verder heb ik die 2e query eruit gehaald en nu schrijft ie dus niks meer in de db :?.. if zalk ff aanpassen !:)

--update--

if inmiddels veranderd in die van pierre, mocht ook niks baten ! hij schrijft NIETS in de db, maar hij geeft ook geen DIE error van mysql.. :s

wat ik wil doen is net zolang als $i waardes heeft de insert query uitvoeren, dit omdat er bij sommige vragen 5 opties zijn die aangevinkt mogen worden en bij de andere meer of minder.. :)

[ Voor 53% gewijzigd door Longlegg op 09-06-2004 22:52 ]

Specs


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Als je nu eens de query gaat echo'en zie je misschien wel wat er fout gaat.

edit: Ook al gebruik gemaakt van de superglobals?

[ Voor 94% gewijzigd door Shadowman op 09-06-2004 23:00 ]


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 19-09 09:59
Longlegg schreef op 09 juni 2004 @ 22:37:
ik ben bezig om voor een soort vragenlijst de antwoorden te verwerken naar een database, alleen lukt me 1 ding niet eerst de code:

de file waarin de vragenlijst staat:

dit werkt wel, ik krijg netjes de vragenopties uit de db..

PHP:
1
2
3
4
5
6
        <?php
         $i = 0; 
         while($record2 = mysql_fetch_object($resopties)) { 
        (isset(${$result.$i})); 
      echo("$record2->veld value=\"$record2->optie\" name=\"result[]\" $checked>$record2->optie<br>");
      print ${$result.$i++}; }?>
Gebruik dat eens. En maak eens gebruik van $_POST variabelen.

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • Longlegg
  • Registratie: Januari 2002
  • Laatst online: 13-04-2022

Longlegg

Danoontje POWERRRRR

Topicstarter
ik heb hem ge-echoëd:

resultaat
code:
1
INSERT INTO antwoorden(antwoordid, sessionid, vraagnr, antwoord) VALUES ('', 'a9883e7bb20e56060778cf794125afc4', '1', '')


het blijft dus akelig leeg :s

[ Voor 22% gewijzigd door Longlegg op 09-06-2004 23:35 ]

Specs


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Een echo $_POST zal wellicht meer helderheid verschaffen, bedenk daarbij dat sommige form-controls geen waarde meesturen als ze niet geselecteerd zijn.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Longlegg
  • Registratie: Januari 2002
  • Laatst online: 13-04-2022

Longlegg

Danoontje POWERRRRR

Topicstarter
crisp schreef op 09 juni 2004 @ 23:37:
Een echo $_POST zal wellicht meer helderheid verschaffen, bedenk daarbij dat sommige form-controls geen waarde meesturen als ze niet geselecteerd zijn.
ook geprobeerd, echo-ed niks dan :s

Specs


Acties:
  • 0 Henk 'm!

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

[quote]Longlegg schreef op 09 juni 2004 @ 22:37:
PHP:
1
2
3
4
5
6
        <?php
         $i = 0; 
         while($record2 = mysql_fetch_object($resopties)) { 
        (isset(${$result.$i})); 
      echo("$record2->veld value=\"$record2->optie\" name=\"result[$i]\" $checked>$record2->optie<br>");
      print ${$result.$i++}; }?>


De regel met (isset(${$result.$i})); komt mij een beetje heel vreemd over... Wat is het nut hiervan?

Heb je in de uiteindelijk gegenereerde broncode van het vragenformulier gecheckt of name=\"result[$i]\" ook daadwerkelijk result[0], result[1], etc etc geeft? en ook values hebben?

Daarnaast geven checkboxen en radiobuttons geen waardes mee als er geen gechecked is.

Ook kom je met een print ${$result.$i++}; waarbij ik me afvraag wat het nut ervan is.

Dan voer je in de afhandeling van de form results 3x de query uit (!!??) Op lijn 13, 14 en 18.

Je hebt waarschijnlijk een hoop regels weggelaten uit de geplaatste code om het wat overzichtelijker te maken maar uit die weggelaten code zal misschien blijken dat je $result[] leegmaakt en/of $super leegmaakt, bv door een makkelijk te maken fout als if ($veld = "") {} ipv met 2 = tekens.

To study and not think is a waste. To think and not study is dangerous.


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Ik snap deze regel niet helemaal:
PHP:
1
echo("$record2->veld value=\"$record2->optie\" name=\"result[$i]\" $checked>$record2->optie<br>");


Maar ik denk dat dit voorbeeldje van mij wellicht wat helpt.

Te testen op mij site: http://www.bnux.nl/tstform.php
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
<html>
<head>
<title>test</title>
</head>
<body>
<form action="tstform.php" method="POST">
  <input type="checkbox" name="vraag[]" value="1" /> 0<br>
  <input type="checkbox" name="vraag[]" value="2" /> 1<br>
  <input type="checkbox" name="vraag[]" value="3" /> 2<br>
  <input type="checkbox" name="vraag[]" value="4" /> 3<br>
  <input type="checkbox" name="vraag[]" value="5" /> 4<br>
  <input type="submit" value="Submit">
</form>
<p><strong>De volgende vragen heb je aangevinkt:</strong><br>
<?php

if (isset($_POST['vraag'])) { // Check of er uberhoubt wat ingevuld is.

  // De "value" van elke aangevinkte checkbox
  // staat in de array $_POST['vraag'] (de anderen dus niet).
  foreach($_POST['vraag'] as $checkbox) { 
    echo "Vraag nummer $checkbox<br>";
  }

} else {
  echo "-geen-";
}


?>
</p>
</body>
</html>
Zie dus vooral die method="POST" (regel 6) en $_POST['vraag'] (regel 17,18)

Jouw for() zou dan worden:
PHP:
1
2
3
4
5
6
7
8
if (isset($_POST['vraag'])) {
  foreach($_POST['vraag'] as $checkbox) {
    $super = "INSERT INTO antwoorden(antwoordid, sessionid, vraagnr, antwoord)
              VALUES ('', '$userid', '$vraagnr', '$result[$i]')";
    // Wel ff die variabelen aanpassen :)
    mysql_query($super);
  }
}


EDIT: Vind ik altijd zo grappig, he. Dan geef je antwoord en dan blijft de TS weg... :/

[ Voor 75% gewijzigd door Room42 op 11-06-2004 19:09 . Reden: Waar is de TS nou... ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron

Pagina: 1