Dat wil je juist niet. Kolomnamen moeten nooit genummerd zijn. Je wilt je database altijd zo schaalbaar mogelijk hebben zonder je structuur steeds aan te passen.
Verdiep je eens in normalisatie.
Link gekopieerd
maar kan het wel?
heb je misschien ergens een voorbeeld?
Link gekopieerd
Het is inderdaad niet aan te bevelen, maar het kan wel.
Maar het kan nog makkelijker.
<?php
$fields = "("
$values = "VALUES ("
foreach ($_POST as $fieldname => $value) {
$fields .= $fieldname . ",";
$values .= "'" . $value . "',";
}
$fields = substr($fields, 0, -1); //laatste komma weghalen
$values = substr($values, 0, -1); // idem
$sql = "INSERT INTO tabelname " . $fields . ") " . $values . ")";
?>
Voorwaarde is natuurlijk wel dat dat de namen van de invoervelden overeenkomen met de kolomnamen in de tabel.
Link gekopieerd
Beste Ger,
Ik snap even niet de werking van dit geheel.
Wat ik heb gedaan is de velden als volgt gedefinieerd:
while ($vraag < $AantalVragen + 1)
{
echo "<INPUT NAME=\"Vraag$vraag\" TYPE=\"hidden\" ";
foreach ($_POST['Vraag'.$vraag++] as $Field)
{
echo "VALUE=\"$Field\" />";
@$totaal += $Field;
}
}
Aan de hand hiervan worden de waarden uit een vorige pagina hier in een hidden veld geplaatst.
deze wil ik dan in de database plaatsen.
Mijn intentie was ook om de veldnamen over1 te laten komen met de kolomnamen.
Wat vragen:
Als ik jouw script zo bekijk dan is het dus de bedoeling dat ik de velden nu de naam $fieldname moet gaan geven?
Link gekopieerd
E
Erwin H
06-02-2012 01:22
gewijzigd op 06-02-2012 01:22
Probeer eens uit te leggen wat je hiermee van plan bent. Want volgens mij gaat dit schreeuwend fout:
<?php
echo "<INPUT NAME=\"Vraag$vraag\" TYPE=\"hidden\" ";
foreach ($_POST['Vraag'.$vraag++] as $Field)
{
echo "VALUE=\"$Field\" />";
@$totaal += $Field;
}
?>
Heb je al eens in je HTML gekeken wat er dan terecht komt?
Link gekopieerd
Allan de Bruin op 05/02/2012 22:32:35
maar kan het wel?
heb je misschien ergens een voorbeeld?
Maar.... waarom wil je het? Met een structuur met genummerde kolomnamen wordt het erg lastig om straks nog leuke queries uit te kunnen poepen.
Link gekopieerd
Wat er in de html komt is het volgende:
<INPUT NAME="Vraag1" TYPE="hidden" VALUE="1" />
<INPUT NAME="Vraag2" TYPE="hidden" VALUE="2" />
<INPUT NAME="Vraag3" TYPE="hidden" VALUE="3" />
<INPUT NAME="Vraag4" TYPE="hidden" VALUE="4" />
<INPUT NAME="Vraag5" TYPE="hidden" VALUE="5" />
<INPUT NAME="Vraag6" TYPE="hidden" VALUE="6" />
<INPUT NAME="Vraag7" TYPE="hidden" VALUE="7" />
<INPUT NAME="Vraag8" TYPE="hidden" VALUE="8" />
<INPUT NAME="Vraag9" TYPE="hidden" VALUE="9" />
<INPUT NAME="Vraag10" TYPE="hidden" VALUE="10" />
etc tot en met Vraag39 (het aantal kolommen met vragen).
Wat ik precies doe is het volgende:
Een tabel met 39 vragen.
Deze vragen staan in de COMMENTS van het veld in de tabel.
Die roep ik op via:
SHOW FULL COLUMNS FROM tblvragenlijst WHERE Comment > '0'
Dus alleen die velden waar een waarde staat bij Comment zal worden getoond.
Pagina met vragen. Op deze pagina heb ik de vragen uit de tabel.
Deze kunnen worden geselecteerd aan de hand van radioboxjes
Die worden als volgt weergegeven, maal 10
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="1" />
Deze kan de bezoeker de waarden verzenden naar een volgende pagina met een overzicht van de gegeven antwoorden + daar zal de bezoeker nog 3 velden moeten invullen. (naam, email en woonplaats).
Dan is het de bedoeling dat vanaf deze pagina de gegevens in de tabel komen.
Heb ik hier antwoord gegeven op jouw vraag?
[size=xsmall]
Toevoeging op 06/02/2012 01:34:41: [/size]
- Aar - op 06/02/2012 01:28:47
Maar.... waarom wil je het? Met een structuur met genummerde kolomnamen wordt het erg lastig om straks nog leuke queries uit te kunnen poepen.
nah, ik dacht dat het misschien wel een passende en makkelijke manier was.
Het is alleen een vragenlijst die ik, persoonlijk gezien dan, makkelijk zou kunnen onderhouden door er alleen maar een kolomnaam in te voeren..
Link gekopieerd
Allan de Bruin op 06/02/2012 01:32:14
Heb ik hier antwoord gegeven op jouw vraag?
Ja, behalve dan of je de code die ik quote al hebt getest. Want volgens mij gaat daar nooit uitkomen wat je wilt, als er al iets uitkomt. Je doet namelijk een foreach op een $_POST element dat volgens mij geen array is. Dat kan dus helemaal niet, dat zou een foutmelding moeten opleveren. Of, als het wel een array is, dan krijg je meerdere values in je hidden input. Dat kan ook niet natuurlijk.
Link gekopieerd
Ik zal de code even geheel insluiten.
Als eerste de pagina met de vragen, met beperkte HTML code
//database connectie maken om vragen op te halen
mysql_select_db($database_ziv, $ziv);
$query_rsGetVragen = "SHOW FULL COLUMNS FROM tblvragenlijst WHERE Comment > '0'";
$rsGetVragen = mysql_query($query_rsGetVragen, $ziv) or die(mysql_error());
$row_rsGetVragen = mysql_fetch_assoc($rsGetVragen);
$totalRows_rsGetVragen = mysql_num_rows($rsGetVragen);
Dan het formulier waar de vragen worden weergegeven:
<form method="POST" name="frmVragenLijst" id="frmVragenLijst" action="vragenlijst_stap3.php">
<strong>
<?php if ($totalRows_rsGetInstelling == 0) { // Show if recordset empty ?>
Deze instelling is nog niet geactiveerd door de contactpersoon van de organisatie.
<?php } // Show if recordset empty ?>
</strong>
<table width="100%" border="0" cellpadding="2" cellspacing="0" class="tekst_normaal">
<tr>
<td colspan="2" valign="top"><h1>Vragenlijst: <?php echo $row_rsGetInstelling['InstNaam']; ?></h1></td>
</tr>
<tr>
<td colspan="2" valign="top" class="td_vergelijkingstabel"><?php echo $row_rsGetInstelling['InstAdresStraat']; ?> <?php echo $row_rsGetInstelling['InstAdresNr']; ?>, <?php echo $row_rsGetInstelling['InstPostCijfer']; ?> <?php echo $row_rsGetInstelling['InstPostLetter']; ?> <?php echo $row_rsGetInstelling['InstPlaats']; ?>. Onderdeel van: <a href="Koepelorganisatie-bekijken.php?KoepelId=<?php echo $row_rsGetInstelling['KoepelId']; ?>"><?php echo $row_rsGetInstelling['KoepelNaam']; ?></a></td>
</tr>
<tr>
<td colspan="2" valign="top"> </td>
</tr>
<tr>
<td colspan="2" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="560" valign="top"><strong>Welk cijfer geeft u voor:
<input name="InstId" type="hidden" id="InstId" value="<?php echo $row_rsGetInstelling['InstId']; ?>" />
<input type="hidden" name="AantalVragen" id="AantalVragen" value="<?php echo $totalRows_rsGetVragen ?>" />
</strong></td>
<td align="center" valign="top"><strong> 1</strong></td>
<td align="center" valign="top"><strong> 2</strong></td>
<td align="center" valign="top"><strong> 3</strong></td>
<td align="center" valign="top"><strong> 4</strong></td>
<td align="center" valign="top"><strong> 5</strong></td>
<td align="center" valign="top"><strong> 6</strong></td>
<td align="center" valign="top"><strong> 7</strong></td>
<td align="center" valign="top"><strong> 8</strong></td>
<td align="center" valign="top"><strong> 9</strong></td>
<td align="center" valign="top"><strong> 10</strong></td>
</tr>
<?php do { ?>
<tr onmouseover=style.backgroundColor="#99CC66" onmouseout=style.backgroundColor="#FFFFFF">
<td valign="top"><?php echo htmlentities($row_rsGetVragen['Comment']); ?></td>
<td colspan="10" align="center" valign="top"> <span id="<?php echo $row_rsGetVragen['Field']; ?>">
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="1" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="2" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="3" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="4" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="5" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="6" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="7" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="8" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="9" />
<input type="radio" name="<?php echo $row_rsGetVragen['Field']; ?>[]" value="10" />
<span class="radioRequiredMsg">*</span></span>
</td>
</tr>
<script type="text/javascript">
var spryradio1 = new Spry.Widget.ValidationRadio("<?php echo $row_rsGetVragen['Field']; ?>");
</script>
<tr>
<td colspan="11" valign="top" class="td_vergelijkingstabel"><img src="images/pixel.jpg" width="1" height="1" /></td>
</tr>
<?php } while ($row_rsGetVragen = mysql_fetch_assoc($rsGetVragen)); ?>
</table></td>
</tr>
<tr>
<td valign="top"><input type="reset" id="button" value="Formulier opnieuw invullen" /></td>
<td align="right" valign="top"><input type="submit" value="Antwoorden opslaan" /></td>
</tr>
</table>
</form>
Dan de pagina om de gegevens te tonen en in de database te plaatsen.
Hier zit nog geen INSERT in:
$vraag = 1;
$AantalVragen = $_POST['AantalVragen']; //aantal vragen tonen
<FORM name="frmAddVragenlijst" ACTION="vragenlijst_stap4_einde.php" METHOD="POST" id="frmAddVragenlijst">
<?php
//formulier velden opstellen om in de tabel te plaatsen
while ($vraag < $AantalVragen + 1)
{
echo "<INPUT NAME=\"Vraag$vraag\" TYPE=\"hidden\" ";
foreach ($_POST['Vraag'.$vraag++] as $Field)
{
echo "VALUE=\"$Field\" />";
@$totaal += $Field;
}
}
//ipadres ophalen van de invullen zodat deze niet twee keer de lijst kan invullen.
if (!empty($_SERVER["HTTP_CLIENT_IP"]))
{
//check for ip from share internet
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
// Check for the Proxy User
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
$ip = $_SERVER["REMOTE_ADDR"];
}
?>
<table width="100%" border="0" cellpadding="2" cellspacing="0" class="tekst_normaal">
<tr>
<td colspan="3" valign="top"><h1>Vragenlijst: <?php echo $row_rsGetInstelling['InstNaam']; ?></h1></td>
</tr>
<tr>
<td colspan="3" valign="top"><?php echo $row_rsGetInstelling['InstAdresStraat']; ?> <?php echo $row_rsGetInstelling['InstAdresNr']; ?>, <?php echo $row_rsGetInstelling['InstPostCijfer']; ?> <?php echo $row_rsGetInstelling['InstPostLetter']; ?> <?php echo $row_rsGetInstelling['InstPlaats']; ?>. Onderdeel van: <a href="Koepelorganisatie-bekijken.php?KoepelId=<?php echo $row_rsGetInstelling['KoepelId']; ?>"><?php echo $row_rsGetInstelling['KoepelNaam']; ?></a> </td>
</tr>
<tr>
<td colspan="3" valign="top"> </td>
</tr>
<tr>
<td colspan="3" valign="middle">Uw gemiddelde cijfer is een
<?php
$totaalpunten = $totaal;
$Gemiddeld = $totaal / $AantalVragen;
echo "<span class=GegevenCijfer>" . number_format($Gemiddeld, 1, ',', '') . "</span>";
echo "<br />Totaal alles opgeteld: ". $totaalpunten . " gedeeld door ". $AantalVragen . " vragen";
?></td>
</tr>
<tr>
<td colspan="3" valign="top"> </td>
</tr>
<tr>
<td colspan="3" valign="top">Om deze vragenlijst compleet te maken vragen wij u alleen nog de volgende gegevens:</td>
</tr>
<tr>
<td colspan="3" valign="top"> </td>
</tr>
<tr>
<td valign="top">Uw naam</td>
<td colspan="2" valign="top"><span id="sprytextfield2">
<input name="InvullerNaam" type="text" id="InvullerNaam" size="50" maxlength="255" />
<span class="textfieldRequiredMsg">*</span></span></td>
</tr>
<tr>
<td width="17%" valign="top">Uw emailadres</td>
<td colspan="2" valign="top"><span id="sprytextfield1">
<input name="InvullerEmailadres" type="text" id="InvullerEmailadres" size="50" maxlength="255" />
<span class="textfieldRequiredMsg">*</span></span></td>
</tr>
<tr>
<td valign="top">Uw woonplaats</td>
<td colspan="2" valign="top"><span id="sprytextfield3">
<input name="InvullerWoonplaats" type="text" id="InvullerWoonplaats" size="50" maxlength="255" />
<span class="textfieldRequiredMsg">*</span></span></td>
</tr>
<tr>
<td valign="top">Aanvullingen</td>
<td colspan="2" valign="top"><span id="sprytextarea1">
<textarea name="VragenOverigeInformatie" id="VragenOverigeInformatie" cols="45" rows="5"></textarea><br />
U heeft al <span id="countsprytextarea1"> </span> karakters ingevuld.<span class="textareaMaxCharsMsg">U kunt maximlaal 5000 karakters invullen.</span></span></td>
</tr>
<tr>
<td valign="top">
<input name="InstId" type="hidden" id="InstId" value="<?php echo $row_rsGetInstelling['InstId']; ?>" />
<input name="InvullerIpadres" type="hidden" id="InvullerIpadres" value="<?php echo $ip ?>" />
<input name="KoepelId" type="hidden" id="KoepelId" value="<?php echo $row_rsGetInstelling['KoepelId']; ?>" />
<input name="VraagStatus" type="hidden" id="VraagStatus" value="0" />
<input name="AantalVragen" type="hidden" id="AantalVragen" value="<?php echo $AantalVragen ?>" /></td>
<td colspan="2" valign="top"> </td>
</tr>
<tr>
<td valign="top"> </td>
<td width="37%" align="right" valign="top"><input type="submit" value="Vragenlijst afronden" /></td>
<td width="46%" valign="top"> </td>
</tr>
<tr>
<td colspan="3" valign="top"> </td>
</tr>
</table>
</FORM>
Ik hoop dat ik hier wat meer inzicht heb kunnen geven in waar ik naar op zoek ben.
Link gekopieerd
Ten eerste:
Je slaat een gegeven op in de comment van de kolom. Die is daar helemaal voor bedoeld.
Dus als je dat gegeven zou moeten wijzigen moet je de tabel wijzigen (met ALTER TABLE). In SQLite kan dat zelfs niet.
Ten tweede pleur je alle info in 1 tabel
Ga nu eerst je database is goed opzetten, als je op deze manier doorgaat vraag je om problemen. Hint: tabel voor vragen, tabel voor invullers en een tabel voor antwoorden.
Link gekopieerd