automatisch invoervelden bij maken
Ik wil een pagina hebben waar ik een X aantal invoervelden heb die ik van
te voren niet weet.
Voorbeeldje.
ik kom op de pagina.
ik zie 1 invoerveld zodra ik hier op klik om deze in te voeren moet er een
tweede bij komen wanneer ik hier op klik moet er een 3de bij komen. wanneer
ik klaar ben met in voeren klik ik op submit en worden de invoerwaardes (
bijv ) naar bewerk.php verstuurd op bewerk.php worden de invoerwaarde verwerkt.
de invoerwaardes moeten dan dus ook een naam krijgen. dit kan bijvoorbeeld 1,2,4,5,6 etc. zijn.
Het kan goed zijn dat ik de ene keer maar 2 waardes heb die ik moet voeren
maar de andere keer 50 waardes in moet voeren.
Dit weet ik niet van te voeren.
Ik hoop dat jullie me hierbij kunnen en willen helpen.
Dit lijkt mij niet zo heel
moeilijk namelijk echter weet ik niet echt hoe ik dit aan moet pakken.
Deze worden dan in een array gezet en kan je dan door middel van een for each uitlezen.
Oke, dit snap ik maar hoe word dit genoemd zodat ik zelf op internet kan zoeken hoe deze code er ongeveer uit moet komen te zien.
Of je het zo makkelijk kan vinden weet ik niet. Maar met welk stuk loop je vast? Wat lukt je wel, wat niet? Een heel script tikken ga ik niet doen, maar als je gerichte vragen heb dan kan je daar natuurlijk bij geholpen worden.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<script language="javascript">
var teller = 0;
function nieuwBestand(veldnaam)
{
teller++;
var parent = document.getElementById(veldnaam);
var child = document.createElement('div');
child.setAttribute('id', teller);
child.setAttribute('name', teller);
child.innerHTML = '<input type="button" onclick="verwijderVeld(\'' + teller + '\',\''+veldnaam+'\')" value="X" /><label for="'+veldnaam+'['+teller+']">'+veldnaam+'</label><input type="file" id="'+veldnaam+'['+teller+']" name="'+veldnaam+'['+teller+']" /><br />'
parent.appendChild(child);
}
/* Veld verwijderen */
function verwijderVeld(teller, veldnaam) {
var parent = document.getElementById(veldnaam);
var verwijder = document.getElementById(teller);
parent.removeChild(verwijder);
}
</script>
<html>
<div class="labels">Bestanden uploaden</div><br />
<div id="afbeelding">
<label for="afbeelding"><a href="javascript:nieuwBestand('afbeelding')">[+]</a> Afbeelding</label>
<input type="file" name="afbeelding[]" id="afbeelding" <?=$width?>>
</div><br />
</html>
var teller = 0;
function nieuwBestand(veldnaam)
{
teller++;
var parent = document.getElementById(veldnaam);
var child = document.createElement('div');
child.setAttribute('id', teller);
child.setAttribute('name', teller);
child.innerHTML = '<input type="button" onclick="verwijderVeld(\'' + teller + '\',\''+veldnaam+'\')" value="X" /><label for="'+veldnaam+'['+teller+']">'+veldnaam+'</label><input type="file" id="'+veldnaam+'['+teller+']" name="'+veldnaam+'['+teller+']" /><br />'
parent.appendChild(child);
}
/* Veld verwijderen */
function verwijderVeld(teller, veldnaam) {
var parent = document.getElementById(veldnaam);
var verwijder = document.getElementById(teller);
parent.removeChild(verwijder);
}
</script>
<html>
<div class="labels">Bestanden uploaden</div><br />
<div id="afbeelding">
<label for="afbeelding"><a href="javascript:nieuwBestand('afbeelding')">[+]</a> Afbeelding</label>
<input type="file" name="afbeelding[]" id="afbeelding" <?=$width?>>
</div><br />
</html>
Iets doen met de ingevoerde waarden:
Code (php)
Zelf even aanpassen naar je eigen situatie. Ik heb dit gebruikt voor het uploaden van afbeeldingen.
Gewijzigd op 20/06/2012 17:16:23 door Marco ----
Is het nog gelukt met de code die ik je heb gegeven?
Echter kom ik nu met het volgende in de knoop.
Ik heb het op de manier gedaan die marco heeft voorgedaan.
Ik heb 3 invoervelden "aantal" "omschrijving" "prijs_ps".
Nu kan ik deze weer geven met het volgende lusje.
for ( &i = 0 < count($_POST['aantal']); $i++ ) {
$prijs_totaal_ps = $_POST["aantal"][$i] * $_POST["prijs_ps"][$i];
echo ("<tr><td width='50'><center>". $_POST["aantal"][$i]."</td>" );
echo ("<td width='500'>". $_POST["omschrijving"][$i]."</td>" );
echo ("<td width='100'>€ ". $_POST["prijs_ps"][$i]."</td>" );
echo ("<td width='100'>€ $prijs_totaal_ps </td></tr>" );
}
Nu is het de bedoeling dat $prijs_totaal_ps heel de reeks bijelkaar op gaat tellen.
echter heb ik niet echt een idee hoe ik dit voor elkaar moet krijgen.
Zouden jullie mij nog 1 keer kunnen helpen ?
P.S.
Let even niet op de manier van scripten en het gebruikt van de variabelen.
Ik wil eerst hebben dat ik het werkend heb en dan word het netjes opgemaakt ;)
Toevoeging op 02/08/2012 19:03:30:
heb het gevonden, met de functie $totaal += $prijs_totaal_ps;
Gewijzigd op 02/08/2012 18:53:29 door Bas van gils
Stuur het ID van het product mee en haal de prijs op uit de database.
Netjes opmaken direct doen: scheelt een hoop gezeur en gezoek later.
Daarbij vind ik het raar dat $_POST['aantal'] een array is.
Ik zou eerder een array $_POST[productid] verwachten met daarin (eventueel prijs) en aantal.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$prijs_totaal = 0;
for ( $i = 0; $i < count($_POST['aantal']); $i++ )
{
// get price by this product-id
$price_res = mysqli_query($link, "SELECT price FROM tabel WHERE id = '".$_POST['id'][$i]."';");
$price_fetch = mysql_fetch_row($price_res);
$price_single = $price_fetch['price'];
// calculate price*aantal
$price_multiplied = $_POST["aantal"][$i] * $price_single;
// get total_sum of all prices
$prijs_totaal += $price_multiplied;
// show in table (prima hoor, 't is ook data)
echo ' <tr>
<td>'. $_POST["aantal"][$i].'</td>
<td>'. $_POST["omschrijving"][$i].' á '.$price.'</td>
<td>€ '. $price_multiplied.'</td>
</tr>';
}
echo ' <tr>
<td colspan="2">Totaal</td>
<td>'.$prijs_totaal.'</td>
</tr>';
?>
$prijs_totaal = 0;
for ( $i = 0; $i < count($_POST['aantal']); $i++ )
{
// get price by this product-id
$price_res = mysqli_query($link, "SELECT price FROM tabel WHERE id = '".$_POST['id'][$i]."';");
$price_fetch = mysql_fetch_row($price_res);
$price_single = $price_fetch['price'];
// calculate price*aantal
$price_multiplied = $_POST["aantal"][$i] * $price_single;
// get total_sum of all prices
$prijs_totaal += $price_multiplied;
// show in table (prima hoor, 't is ook data)
echo ' <tr>
<td>'. $_POST["aantal"][$i].'</td>
<td>'. $_POST["omschrijving"][$i].' á '.$price.'</td>
<td>€ '. $price_multiplied.'</td>
</tr>';
}
echo ' <tr>
<td colspan="2">Totaal</td>
<td>'.$prijs_totaal.'</td>
</tr>';
?>
echter is dit niet voor een winkel systeem ;)
Het is om facturen te gaan genereren die ik zelf in voer.
Dus simpel weg:
bij de klant heb ik 2 stopcontacten gebruikt van 4 euro per stuk.
dus de invoer word dan
aantal "2"
omschrijving "stopcontact"
prijs_ps "4"
op de bewerkpagina krijg je dan de berekeningen.
dat hij aantal * prijs_ps = totaalprijs
met number_format(totaalprijs,2,',','.') gebruik ik de nette notatie
en bereken ik nog de btw.
en ben nu aan het prutsen hoe ik die for lus in een variable kan krijgen.
Kijk even wat ik doe met $price_totaal. Die staat in de for-lus en wordt dus elke keer (voor elk ding dat je hebt gebruikt) verhoogt.
Maar waarom doe je dit niet in Excel dan?
klantenbestand
reparatie bestand
facturering
voorraad
klantenbestand heb ik al
reparatie ook
facturering mee bezich
voorraad is klaar
dit al is nu allemaal gekoppelt.
voorbeeldje:
ik heb bij klaas 10 stopcontacten geplaatst.
nu staat klaas al in het bestand dus zijn klantnummer en adres gegevens heb ik dus hoef ik alleen maar aan te klikken.
dan vul ik bij aantal 10 in omschrijving busch Jeager WCD+RA SI Cremé en bij prijs p.s 4.50
ík vink, als de klant dat ook wilt, mail aan.
dan op factuur en het pdfje word gemailt naar de klant, 1 exemplaar ligt in de printer voor de boekhouding en het pdfje word op geslagen in de map factuur 2012
snappie ?