Invoervelden toevoegen met een button

Status
Niet open voor verdere reacties.

mcfreak

Gebruiker
Lid geworden
21 feb 2012
Berichten
508
hallo HMers,
ik ben een site aan het maken waar je toetsen op af kan nemen.
nu gaat een ding niet goed:
Ik wil dat je onbeperkt vragen kan plaatsen, daarvoor wil ik dat je als je op een button klikt 2 regels bijkomen om vragen in te plaatsen.
dat is met gelukt via internet:

PHP:
<html>
<head>
<title>Add Form Fields</title>
</head>

<body>

<form method="post" action="">
<table border="1">
<?
if(!array_key_exists("c", $_GET))
$_GET["c"] = 1;

for($i = 0; $i < $_GET["c"]; $i++) {
if($i == ($_GET["c"] - 1)) {
$n = $_GET["c"] + 1;
?>
<tr>
<td><input type="text" name="veld1[]"></td>
<td><input type="text" name="veld2[]"></td>
<td><input type="button" value="ADD" onClick="javascript:document.location.href='<? echo $_SERVER['PHP_SELF']; ?>?c=<? echo $n; ?>'"></td>
</tr>
<?
}
else {
?>
<tr>
<td><input type="text" name="veld1[]"></td>
<td><input type="text" name="veld2[]"></td>
<td colspan="2"><input type="text" name="veld3[]"></td>
</tr>
<?
}
}
?>
<tr>
<td colspan="4">&nbsp;</td>
</tr>
<tr>
<td colspan="4" align="center"><input type="submit" value="SUBMIT">&nbsp;&nbsp;<input type="reset" value="WISSEN"></td>
</tr>
</table>
</form>

</body>
</html>

hij werkt ook maar hoe kan ik de vragen met een toets-id in mysql zetten?
de twee invoervelden die per regel zitten moeten ook een vraag id krijgen om ze aan elkaar te linken, hoe doe ik dat?
ik hoop dat het een beetje duidelijk is, vraag maar als er te weinig info staat. :)
 
Je wilt dus de huidige vragen in een database zetten, met elke hetzelfde toets_id en uiteraard een ander vraag_id.

Dat is een veel op veel relatie dus sowieso een tabel maken voor toetsen met een toets_id.
Een tabel voor vragen met een vraag_id
en deze koppelen met een toets_vraag tabel.

Vervolgens wil je elk input veld die je tevoorschijn tovert dezelfde name geven zodat je ze daar aan kunt herkennen tijdens het verwerken.

Als je de toets in de database stopt kun je deze gewoon met een auto increment id in de database stoppen.
Vervolgens heeft MySQL functies om het laatst automatisch ingevulde id te gebruiken, deze zet je in een $_SESSION variabele.

Om de vragen te behandelen kun je op de post van het formulier een foreach statement gebruiken.
PHP:
//Insert toets
$mysqli->query("INSERT INTO toets (kolom1, kolom2) VALUES (waarde1, waarde2);")
$_SESSION['toets_id'] = $mysqli->insert_id;
 
foreach($_POST['toets_vraag'] as $vraag)
{
    $mysqli->query("INSERT INTO vragen (`vraag`) VALUES (".$vraag.")");
    $mysqli->query("INSERT INTO toets_vraag (`toets_id`, 'vraag_id') VALUES (".$_SESSION['toets_id'].", ".$mysqli->insert_id.")");
}

Ergens in die richting zou ik gaan kijken, uiteraard wel een stukje veiliger dan dit ;)
 
Laatst bewerkt:
Heel even als tip,

Ik zou de vragen niet gelijk aan de toets hangen, laat de vragen helemaal apart staan. Het voordeel hiervan weer is dat je verschillende toetsen kunt maken met de zelfde vragen.

Eventueel kan je de vragen in een categorie hangen, en dan kan een leerling een categorie kiezen, en het aantal vragen selecteren die hij/zij wilt beantwoorden. Daarna run je een script waarmee je een toets aanmaakt met het gekozen aantal vragen van de leerling.

Hierdoor wordt jou programma nog mooier :)
 
Voor de leerlingen wel ja. Zelf kiezen hoeveel vragen ze hebben. :)

verschillende toetsen maken kan je ook gedaan krijgen door 50 vragen in de database te hebben en dan random 30 vragen kiezen voor de leerling.

Ook zou je het met 1 tabel kunnen doen.
Vragen {
-vraag_id
-toets_id
-vraag
-antwoord
}

Dit is aan te vullen met het te behalen punten per vraag, docent, moeilijkheidsgraad....
 
Voor de leerlingen wel ja. Zelf kiezen hoeveel vragen ze hebben. :)
Ook zou je het met 1 tabel kunnen doen.

Zou kunnen, maar normalisering bestaat niet voor niets en een veel op veel relatie dien je gewoon met een koppeltabel te benaderen.
 
maar hoe moet is nou onbeperkt vragen erin zetten?
niet dus zoiets van grumbkow:
PHP:
$mysqli->query("INSERT INTO toets (kolom1, kolom2) VALUES (waarde1, waarde2);")
want dan kan je er geen onbeperkt vragen toevoegen. (hier zelfs maar 1 :confused:)
wel bedankt voor de antwoorden :thumb:
 
Laatst bewerkt:
Op http://www.jebble.nl/helpmij/mcfreak/ vind je een werkend voorbeeld.

Ik heb een formulier met daaronder een link om via jquery een nieuw input veld toe te voegen.
Alle inputvelden hebben als name attribuut name="vraag[]" de [] zorgen ervoor dat het een array wordt.

In de PHP controlleer ik of het formulier verzonden is en als dat zo is dan start ik een foreachloop.
Deze doorloop de vraag[] array en voor elke $_POST['vraag'] echo ik de vraag op het scherm.

Onderstaande code is hiervoor gebruikt.
Mijn eerder genoemde voorbeeld zou dus prima moeten werken.


PHP:
<?php

	if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['submit']))
	{
		foreach($_POST['vraag'] as $vraag)
		{
			if($_POST['vraag'] != '')
			{
				echo $vraag.'<br />';
			}
		}
	}

?>

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
	<script type= "text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function()
		{
			$('#newField').click(function()
			{
				$('#submitVragen').before('<input type="text" name="vraag[]" id=""><br />');
			});
		});
	</script>
</head>
<body>
	<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
		<input type="text" name="vraag[]" id=""><br />
		<input type="submit" name="submit" id="submitVragen" value="Verstuur"><br />
		<br />
		<a href="#" id="newField">Voeg een vraag toe</a>
	</form>
</body>
</html>
 
Laatst bewerkt:
hij werkt!
hij zet nu alles ook in de database en dat wilde ik.:D

ik heb nu een code gemaakt om ook het antwoord erbij te zetten, als je er een in zet gaat het goed.
maar als je er meer in zet, gebeurt er dit:

je wil deze erin zetten: rij 1: vraag=helpmij antwoord=goed
rij 2: vraag=bugs antwoord=zijn hatelijk
enz.
maar nu zet hij dit in de tabel:
rij 1: vraag=helpmij antwoord=goed
rij 2: vraag=helpmij antwoord=zijn hatelijk
rij 3: vraag=bugs antwoord=goed
rij 4: vraag=bugs antwoord=zijn hatelijk

hoe los ik dat op?

dit is mijn code:
PHP:
<?php
 
    if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['submit']))
    {
        foreach($_POST['vraag'] as $vraag)
		foreach($_POST['andwoord'] as $andwoord)
        {
            if($_POST['vraag'] != '' && $_POST['andwoord'])
            {
                echo $vraag.' '.$andwoord.'<br />';
				
				$con = mysql_connect("localhost","gebnaam","ww");
if (!$con)
  {
  die('Kan de vragen er niet inzetten: ' . mysql_error());
  }
mysql_select_db("database", $con);
$sql="INSERT INTO toetsen (vraag, andwoord)
VALUES
('$vraag', '$andwoord')";
mysql_query($sql,$con);

mysql_close($con);
            }
        }
    }
 
?>
 
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type= "text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function()
        {
            $('#newField').click(function()
            {
                $('#submitVragen').before('<input type="text" name="vraag[]" id="">	<input type="text" name="andwoord[]" id=""><br />');
            });
        });
    </script>
</head>
<body>
    <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
        <input type="text" name="vraag[]" id="">	
		<input type="text" name="andwoord[]" id=""><br />
        <input type="submit" name="submit" id="submitVragen" value="Verstuur"><br />
        <br />
        <a href="#" id="newField">Voeg een vraag toe</a>
    </form>
</body>
</html>
 
Laatst bewerkt:
PHP:
foreach($_POST['vraag'] as $vraag)
        foreach($_POST['andwoord'] as $andwoord)

Je doet hier voor elke vraag ieder antwoord.

Je zou eerst elke vraag in een nieuw array kunnen zetten, daarna alle vragen ernaast.
Dan heb je daarna 1 array, met vraag en antwoord.

(voor voorbeelden moet je even google-en, ik heb nu geen tijd)
 
:confused: ik snap het niet, wat moet ik veranderen aan mijn code?
en wat moet ik op google zoeken?
 
We hebben de code nu vrijwel voorgeschoteld behalve het laatste stukje, misschien moet je eerst eens dieper in PHP gaan verdiepen zodat je beter snapt wat er precies gebeurd?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan