Goeden middag collegadevelopers,

Voor mijn systeem m.b.t. urenregistratie ben ik een variabel aantal rijen aan het creëren. Nu wil ik deze rijen (in variërend aantal) dus wegschrijven in een SQL-database m.b.v. een post-form.

Om de rijen te creeëren gebruik ik de volgende code (script gevonden elders op internet):

<form method="post">
	<table id="myTable">
    	<tr>
        	<td><input type="text" name="links"></td>
			<td><input type="text" name="keywords"></td>
			<td><input type="text" name="violationtype"></td>
    	</tr>
	</table>
	<input type="button" class="button" value="Add another line" onclick="addField();">
	<script>
		function addField (argument) {
			var myTable = document.getElementById("myTable");
			var currentIndex = myTable.rows.length;
			var currentRow = myTable.insertRow(-1);

			var linksBox = document.createElement("input");
			linksBox.setAttribute("name", "links" + currentIndex);

			var keywordsBox = document.createElement("input");
			keywordsBox.setAttribute("name", "keywords" + currentIndex);

			var violationsBox = document.createElement("input");
			violationsBox.setAttribute("name", "violationtype" + currentIndex);

			var addRowBox = document.createElement("input");
			addRowBox.setAttribute("type", "button");
			addRowBox.setAttribute("value", "Add another line");
			addRowBox.setAttribute("onclick", "addField();");
			addRowBox.setAttribute("class", "button");

			var currentCell = currentRow.insertCell(-1);
			currentCell.appendChild(linksBox);

			currentCell = currentRow.insertCell(-1);
			currentCell.appendChild(keywordsBox);

			currentCell = currentRow.insertCell(-1);
			currentCell.appendChild(violationsBox);
    	}
	</script>
</form>


Zou iemand mij kunnen helpen met het maken van het PHP-stukje? alvast bedankt!

Tim
Volgens mij moet je eerst nadenken over jouw model en opbouw. Je hebt een invoer. Een opslag en een raadpleeg fase.

Het invoeren, welke waarden wil jij vastleggen, wie geef je toegang. Welke controles wil je gebruiken om de invoer te controleren. Zit er een login voor. Kunnen, mogen gebruikers gegevens dubbel invullen? Daar moet je over nadenken
.
Het verwerken, opslag, hier worden de data naar de database geschreven. Hier worden de gegevens uit het invoerscherm in de database gezet.

Het raadplegen kan door een kalender of week te kiezen, en dan vervolgens een selectie uit de database te presenteren, uiteraard oplopend.

Je moet dus eerst nadenken, wat heb ik straks nodig. En of er nu 40 of 100 medewerkers iets ingevoerd hebben, dat maakt voor de database niet uit. Die slaat dat keurig op. Maak eens een stroomschema, wat jij per fase wilt doen, wat aan invoer, wat aan uitvoer.

Succes
Goede morgen! Ik jullie tips tot mij genomen en ben eruit gekomen!

Ik heb de volgende code:


<form method="post">
	<input type="submit" name="Submit">
	<table id="myTable">
    	<tr>
			<td><input name="name[]"></td>
			<td><input name="timeIn[]" class="time"></td>
			<td><input name="timeOut[]" class="time"></td>
		</tr>
	</table>
	<input type="button" class="button" value="Add another line" onclick="addField();">
	<script>
		function addField (argument) {
			var myTable = document.getElementById("myTable");
			var currentIndex = myTable.rows.length;
			var currentRow = myTable.insertRow(-1);

			var linksBox = document.createElement("input");
			linksBox.setAttribute("name", "name[]");

			var keywordsBox = document.createElement("input");
			keywordsBox.setAttribute("name", "timeIn[]",);
			keywordsBox.setAttribute("class", "time",);

			var violationsBox = document.createElement("input");
			violationsBox.setAttribute("name", "timeOut[]");
			violationsBox.setAttribute("class", "time");

			var addRowBox = document.createElement("input");
			addRowBox.setAttribute("type", "button");
			addRowBox.setAttribute("value", "Add another line");
			addRowBox.setAttribute("onclick", "addField();");
			addRowBox.setAttribute("class", "button");

			var currentCell = currentRow.insertCell(-1);
			currentCell.appendChild(linksBox);

			currentCell = currentRow.insertCell(-1);
			currentCell.appendChild(keywordsBox);

			currentCell = currentRow.insertCell(-1);
			currentCell.appendChild(violationsBox);
			
			var time = document.getElementsByClassName('time'); //Get all elements with class "time"
for (var i = 0; i < time.length; i++) { //Loop trough elements
    time[i].addEventListener('keyup', function (e) {; //Add event listener to every element
        var reg = /[0-9]/;
        if (this.value.length == 2 && reg.test(this.value)) this.value = this.value + ":"; //Add colon if string length > 2 and string is a number 
        if (this.value.length > 5) this.value = this.value.substr(0, this.value.length - 1); //Delete the last digit if string length > 5
    });
};
    	}
	</script>
	<?php
	if(isset($_POST['Submit'])){
		$name = $_POST['name'];
		$timeIn = $_POST['timeIn'];
		$timeOut = $_POST['timeOut'];
		
		foreach( $name as $key => $n ) {
			if(!empty($name[$key]) && !empty($timeIn[$key]) && !empty($timeOut[$key])){
				mysqli_query($con, "INSERT INTO `AddRows`(`Name`, `timeIn`, `timeOut`) VALUES ('$name[$key]','$timeIn[$key]','$timeOut[$key]')");
			}
		}
	}
	?>
</form>


Hiermee schrijf ik he succesvol naar de database! Ik weet niet of dit de netste oplossing is, maar het werkt :)

Groetjes
Tim

Reageren