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
Waar loop je precies op vast? Er is genoeg te vinden op internet over het opslaan van data in MySQL.
Hoi Ariën! Ik had inderdaad iets duidelijker moeten zijn. Nu weet ik hoe ik een, twee of drie gegevens weg kan schrijven m.b.v. een SQL naar een database. Echter, ik zou niet weten hoe ik dit moet doen bij een variabel aantal rijen!

Voor mijn resultaat van de rijen toevoegen, zie http://wrbloods.000webhostapp.com/addrows.php.

Tim
Ikzelf raad aan om de velden als array te genereren:

<tr>
	<td><input name="item[3]['name']"></td>
	<td><input name="item[3]['timeIn']"></td>
	<td><input name="item[3]['timeOut']"></td>
</tr>

Dan is het na afloop een kwestie van het doorlopen van een array met foreach.
print_r() zal een goede hulp hierbij zijn.
Hoi Ariën! Helaas heb ik nog niet veel kaas gegeten van arrays, en ik zou ook niet weten hoe ik dit toe kan passen in mijn code. Zou jij mij hierbij willen helpen? Alvast bedankt voor je (vorige), snelle antwoorden!

Tim
Zorg er eens eens voor dat je de HTML-code opbouw volgens deze manier, waarbij de '3' natuurlijk steeds het variabele oplopende nummer is.

Dan moet je vervolgens $_POST['item'] (heb mijn vorige post even bijgewerkt) gebruiken in je foreach, waarmee je steeds elke rij doorloopt.
sidenote: Waarom niet gewoon item[]... zodat je ook rijen kunt toevoegen/weghalen. Het forceren van een volgnummer bij het toevoegen van rijen lijkt mij niet echt nodig?

Het wordt een ander verhaal als je reeds opgeslagen items wilt aanpassen (voordat je deze vergrendelt, wat mij ook wel handig lijkt als de uren gefactureerd worden / definitief worden gemaakt) - dan zet je tussen de rechte haken het id van het logboek-record zodat je weet wat er vervolgens bijgewerkt dient te worden.

Enne, "nog niet veel kaas gegeten van arrays", dan wordt dat hoog tijd als je je al met geavanceerdere zaken als databases/dynamische formulieren bezighoudt.
Hoi allemaal; bedankt voor jullie snelle reacties!

Ik ben bang dat ik het probleem niet helemaal goed heb uitgelegd :(
Ik ben bezig om de aanwezigheidsadministratie bij te houden. Ik voer daarom één keer de datum in, waarna ik bij iedere rij uit mijn tabel de gegevens in één keer weg wij schrijven in een SQL-tabel. Iedere rij in mijn tabel wordt dus ook een unieke rij/record in de SQL tabel, voorzien van de gebruikersnaam, datum en de aankomst/vertrektijd.

Omdat het aantal mensen niet altijd het zelfde is (soms 1, op een drukke dag 35), lijkt het mij handig om een aantal rijen toe te kunnen voegen in mijn tabel, voor iedere aanwezige 1 dus.

Nu weet ik dat ik dit kan doen met een "foreach" als ik me niet vergis, waarin ik bij iedere tabelrij een nieuwe SQL uitvoer (wanneer ik op een "save" button druk. Dit lijkt voor mij het makkelijkst.

Nu loop ik vast bij de brug van het "toevoegen van rijen" naar het creëren van een SQL voor iedere rij. Nu kan ik zoals Ariën hiervoor al aangaf een array gebruiken, maar ik snap niet helemaal wat hij bedoelt. Welke tutorial/voorbeeld kan ik hier het best voor gebruiken?

Nogmaals, hartelijk dank voor jullie reacties.

Tim
Laten we stapje voor stapje werken, zodat je de kennis gaat begrijpen in plaats van dat je teveel hooi op je vork neemt, en door de array's de bomen niet meer ziet.

Zorg er eerst voor dat je jouw Javascript hebt aangepast zodat de browser de HTML verwerkt tot dit:

<tr>
    <td><input name="item[]['name']"></td>
    <td><input name="item[]['timeIn']"></td>
    <td><input name="item[]['timeOut']"></td>
</tr> 


@Thomas: Thnx! Dat werkt inderdaad makkelijker.

Zorg er dan voor dat je dit gebruikt, na de controle of je formulier ge-POST'ed is.

<?php
echo "<pre>".print_r($_POST['item'],true)."</pre>";
?>

Vervolgens zie je een 'boom' van een gestructureerde array met daarin alles wat je verstuurd hebt. Dit heet een multi-dimensionale array.
Oké, ik denk dat ik dit nu heb toegepast. Afgaande op jullie beide verhalen, heb ik mijn code aangepast. Dit resulteert in de volgende code:


<form method="post">
	<table id="myTable">
    	<tr>
			<td><input name="item[]['name']"></td>
			<td><input name="item[]['timeIn']"></td>
			<td><input name="item[]['timeOut']"></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", "item[]['name']");

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

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

			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>


Voor het resultaat hiervan, zie http://wrbloods.000webhostapp.com/addrows.php

Hoe ga ik nu verder?

@Arien, hartstikke bedankt voor het stap-voor-stap begeleiden!

Tim
Dankje :-)
Zorg er eerst maar voor dat je het formulier kan versturen via POST met en submit-knop.

Reageren