Ik ben een echter beginner maar ik doe me best om het onder de knie te krijgen. Nu heb ik een script gehaald (vragenlijst) die gegevens uit een DB haalt een gebruiker moet dat via een radiobutton wat vragen beantwoorden, het resultaat van deze aangeklikte buttons moeten dan worden weggeschreven worden naar een andere tabel binnen deze db, helaas lukt het niet met dit script wik kan mij vertellen wat ik heb fout gedaan ik krijg nl. ook geen foutmelding. Verschillende boeken, sites geraadgepleegd.
<?php
error_reporting(E_ALL);
$db=mysql_connect("localhost", "root")
or die("Kan niet verbinden: ". mysql_error());
$res=mysql_select_db("tevredenheidsonderzoek",$db);
if(!$res)
{
echo "Kan de database niet openen";
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$query = "INSERT INTO antwoorden (volgordenr, antwoord)VALUES
(
'" . mysql_real_escape_string ($_POST['volgordenr']) . "',
'" . mysql_real_escape_string ($_POST['antw1']) . "',
'" . mysql_real_escape_string ($_POST['antw2']) . "',
'" . mysql_real_escape_string ($_POST['antw3']) . "',
'" . mysql_real_escape_string ($_POST['antw4']) . "',
'" . mysql_real_escape_string ($_POST['antw5']) . "'
'" . mysql_real_escape_string ($_POST['antw6']) . "'
)";
if (!mysql_query ($sql)) {
trigger_error (mysql_error ());
}
echo('De gegevens zijn in de db gezet, bedankt voor het invullen.');
}
$sql="SELECT * FROM `vragen` WHERE `hoofdstuknr`=1 order by `volgordenr`";
$resultaat=mysql_query($sql);
if (mysql_num_rows($resultaat)==0)
echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
echo "ALGEMENE VRAGEN";
echo "<table border=1 width=100%>";
while($rij=mysql_fetch_array($resultaat))
{
echo "<tr>\n";
echo "<td>".$rij["volgordenr"]."</td>";
echo "<td>".$rij["vraagtekst"]."</td>";
echo "<td>";
if (trim($rij["antw1"]) != "")
{
echo "<input type=\"radio\" name=\"antw" . $rij['volgordenr'] . "\" value=\"Antw1\"/>" .$rij["antw1"];
}
else
{
echo "&nbsp;";
}
echo "<td>";
if (trim($rij["antw2"]) != "")
{
echo "<input type=\"radio\" name=\"antw" . $rij['volgordenr'] . "\" value=\"Antw2\"/>" .$rij["antw2"];
}
else
{
echo "&nbsp;";
}
echo "</td>";
echo "<td>";
if (trim($rij["antw3"]) != "")
{
echo "<input type=\"radio\" name=\"antw" . $rij['volgordenr'] . "\" value=\"Antw3\"/>" .$rij["antw3"];
}
else
{
echo "&nbsp;";
}
echo "</td>";
echo "<td>";
if (trim($rij["antw4"]) != "")
{
echo "<input type=\"radio\" name=\"antw" . $rij['volgordenr'] . "\" value=\"Antw4\"/>" .$rij["antw4"];
}
else
{
echo "&nbsp;";
}
echo "</td>";
echo "<td>";
if (trim($rij["antw5"]) != "")
{
echo "<input type=\"radio\" name=\"antw" . $rij['volgordenr'] . "\" value=\"Antw5\"/>" .$rij["antw5"];
}
else
{
echo "&nbsp;";
}
echo "</td>";
echo "<td>";
if (trim($rij["antw6"]) != "")
{
echo "<input type=\"radio\" name=\"antw" . $rij['volgordenr'] . "\" value=\"Antw6\"/>" .$rij["antw6"];
}
else
{
echo "&nbsp;";
}
echo "</td>";
echo "</tr>\n";
}
echo "</table></form>";
echo "<input type=\"submit\"name=\"submit\"value=\"formulier verwerken\"/>";
mysql_close($db);
?>
Je INSERT query klopt niet. Je probeert 7 waarden in te voegen in maar 2 kolommen, dat gaat natuurlijk niet werken.

Daarnaast ben ik bang dat het datamodel dat je nu gebruikt niet helemaal juist is. Dit vermoeden krijg ik door de variabelen $rij['antw1'] etc. Zodra je namelijk kolommen gaat nummeren wijst dat bijna altijd op een incorrect datamodel. Dat zou onder andere ook de problemen die je nu hebt kunnen verklaren.

Zou je misschien eens aan kunnen geven hoe je datamodel er nu uit ziet?
<?php
$query = "INSERT INTO antwoorden (volgordenr, antwoord)VALUES
(
'" . mysql_real_escape_string ($_POST['volgordenr']) . "',
'" . mysql_real_escape_string ($_POST['antw1']) . "',
'" . mysql_real_escape_string ($_POST['antw2']) . "',
'" . mysql_real_escape_string ($_POST['antw3']) . "',
'" . mysql_real_escape_string ($_POST['antw4']) . "',
'" . mysql_real_escape_string ($_POST['antw5']) . "'
'" . mysql_real_escape_string ($_POST['antw6']) . "'
)";
?>

Dit gaat igg geval al op 2 punten fout. Je geeft hier 2 velden die je wilt vullen met 7 waarden.
Je zult die query in een for of while loop moeten zetten.

<?php
$max = aantal vragen;
for ($i=1;$i<=$max;$i++) {
$result=mysql_query("INSERT INTO antwoorden (volgordenr, antwoord)VALUES
(
'" . mysql_real_escape_string ($_POST['volgordenr']) . "',
'" . mysql_real_escape_string ($_POST['antw'.$i]) . "'");
}
?>
Dat zie je dus ook meteen dat je de mysql_query niet aanroept en daarom ook niets in je database gezet wordt, zelfs geen foute data.

Edit: Haha, blanche was me voor :)
Ehm wat lukt er niet? Wat gebeurt er wel? Wat had je verwacht?

Je methode om te controleren of het formulier is gepost is sowieso fout.
Je controleert of de request method POST is, maar niet of de variabelen bestaan...

Vind het trouwens ook wel vreemd dat je radio buttons gebruikt. Je hebt namelijk maar 1 optie per name... Hoezo dan radio? Radio is om te kiezen uit verschillende opties voor 1 name.
Denk dat je checkbox moet hebben. Dan heb je elke name met 1 value en die staat dan uit of aan.
Dat kan je controleren met isset().
Je methode om te controleren of het formulier is gepost is sowieso fout.
Dat is niet waar. Dit is de manier om te controleren of er een formulier gepost is. Natuurlijk moet je vervolgens ook (!) controleren of de velden wel ingevulde zijn (cq. variabelen wel bestaan).

En hoogstwaarschijnlijk zit de fout in een verkeerd datamodel, dus dat zal eerst opgelost moeten worden.
Blanche schreef op 22.03.2007 14:37
Je INSERT query klopt niet. Je probeert 7 waarden in te voegen in maar 2 kolommen, dat gaat natuurlijk niet werken.

Daarnaast ben ik bang dat het datamodel dat je nu gebruikt niet helemaal juist is. Dit vermoeden krijg ik door de variabelen $rij['antw1'] etc. Zodra je namelijk kolommen gaat nummeren wijst dat bijna altijd op een incorrect datamodel. Dat zou onder andere ook de problemen die je nu hebt kunnen verklaren.

Zou je misschien eens aan kunnen geven hoe je datamodel er nu uit ziet?
Ik heb 1 database dat bestaat uit een vraagnr., volgordernr., vraagtekst, antw1, antw2, antw3, antw4, antw5, antw6 hierin staan alle gegevens deze haalt hij met de Select om een toont zo de vragen etc. Het datamodel waar het naar toe moet worden gestuurd bestaat uit een kolom volgordenr. en een kolom antwoord. In de kolom volgorder moet de nr. van de vraag komen en in de kolom antwoord 1 van de antwoorden die bij die desbetreffende rij is ingevuld (hier kan je dan kiezen uit 6 antwoorden) dus er hoeft alleen maar het volgordenr. en een antwoord per vraag worden weggeschreven (ik hoop dat je het nog snapt) voor jullie misschien gesneden koek maar ik vindt het nog steeds een erge moeilijke materie
Dan klopt je datamodel dus niet helemaal. Want je gaat er nu bijvoorbeeld altijd van uit dat er 6 antwoorden per vraag zijn. Maar wat nu als er 5 of zelfs 7 zijn?

Hoe het er bijvoorbeeld uit zou kunnen zien is als volgt:

vragen
--------
id
vraag

antwoorden
-------------
id
antwoord
vraag_id

gegeven_antwoorden
------------------------
id
vraag_id
antwoord_id

In de vragen tabel komen alle vragen te staan. In de antwoorden tabel staan alle antwoorden met daarbij aangegeven bij welke vraag ze horen. In de gegeven_antwoorden tabel sla je de antwoorden die gegeven worden op.

Zoals je ziet is het nu een anoniem systeem, maar je zou er natuurlijk ook nog een tabel 'gebruikers' in op kunnen nemen en vervolgens in de 'gegeven_antwoorden' tabel ook het gebruiker_id kunnen plaatsen.
Ik ga er niet van uit dat er 6 antwoorden per vraag zijn maar 6 keuze mogelijkheden per vraag waar maar 1 antwoord op mogelijk mag zijn,
dus er wordt per vraag een volgordenr. (van de vraag) + één antwoord weggeschreven.
Ja ok, maar ook dan is je datamodel niet correct. Want wat nu als je 5 of 7 keuzemogelijkheden wilt geven? Over het algemeen kun je aannemen dat zodra jij kolomnamen gaat nummeren, dat er iets in je datamodel niet correct is.

Kijk ook eens naar de verschillende tutorials over het normaliseren van een database. Dat is wat je nu namelijk te doen staat.

Reageren