Nieuwe velden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Douwe Westra

Douwe Westra

06/07/2016 22:20:27
Quote Anchor link
Voor onderstaande code zoek ik iets, ik wil graag automatisch, of door middel van een knopje de velden "bedrag" en "bethaalmethode" elke keer extra laten verschijnen.
Maximaal 100 stuks ofzo (niet alle 100 tegelijk)

Bij het verzenden van de data moeten alle velden meegenomen worden en de datum ook.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
include ("db_config.php");
include ("site_config.php");

$sqlquery = "INSERT INTO omzet (datum, betaalmethode, bedrag) VALUES('".$_POST['datum']."','".$_POST['betaalmethode']."','".$_POST['bedrag']."')";

$results = mysql_query($sqlquery) or die ("Fout: " .
mysql_error());

mysql_close();
?>

<html>
 <head>
 <meta charset="utf-8">
 <title><?php echo $titel; ?></title>
 <link rel="stylesheet" href="css/style.css">
 </head>

 <body>
 <form id="zoekform" method="post" action="toevoegen.php">
 <div class="row">
 <label for="datum"><?php echo $datum; ?></label>
 <input type="text" name="datum" id="datum" datum=""> </br></br>
 </div>
 
 <div class="row">
 <label for="betaalmethode"><?php echo $betaalmethode; ?></label>
 <select type="text"  name="betaalmethode" id="betaalmethode" betaalmethode=""> </br></br>
                <option value="contant" selected>Contant</option>
                <option value="pin">Pin</option>
</select></br></br>
 </div>
 
 <div class="row">
 <label for="bedrag"><?php echo $bedrag; ?></label>
 <input type="text"  name="bedrag" id="bedrag" bedrag=""> </br></br>
 </div>
 
 <hr>
 <input type="submit" value="toevoegen">
 <input type="reset" value="terugzetten">
 </form>

<a href= index.php >Home</a>
 </body>
 </html>

- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken. Quote-tags zijn alleen bedoeld voor citaten.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 06/07/2016 22:21:37 door - Ariën -
 
PHP hulp

PHP hulp

15/11/2024 04:26:33
 
- Ariën  -
Beheerder

- Ariën -

06/07/2016 22:22:38
 
Douwe Westra

Douwe Westra

06/07/2016 23:03:14
Quote Anchor link
Niet aan gedacht nee,

Maar JavaScript werkt niet op iOS toch?

De site word voornamelijk gebruikt door een iPad
 
- Ariën  -
Beheerder

- Ariën -

06/07/2016 23:06:48
Quote Anchor link
Bijna elke website gebruikt wel een sloot aan Javascripts, dus geheid dat iOS er ook wel raad mee weet.

Ik denk dat je in de war met Adobe Flash bent?
Gewijzigd op 06/07/2016 23:08:40 door - Ariën -
 
Douwe Westra

Douwe Westra

09/07/2016 00:49:39
Quote Anchor link
o ja, dat was flash idd.

Het is me gelukt, nu rest me nog 1 probleem.

Hij stuurt alleen de data van de laatste invoer naar de db
Dus als ik er 3 invoer, pakt ie de 3e invoer, de 1e en 2e voert ie niet in.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
<?php
include ("db_config.php");
include ("site_config.php");

$sqlquery = "INSERT INTO omzet (datum, betaalmethode, bedrag) VALUES('".$_POST['datum']."','".$_POST['betaalmethode']."','".$_POST['bedrag']."')";

$results = mysql_query($sqlquery) or die ("Fout: " .
mysql_error());

mysql_close();
?>

<html>
 <head>
 <meta charset="utf-8">
 <title><?php echo $titel; ?></title>
 <link rel="stylesheet" href="css/style.css">
 <script src="/js/meer.js" language="Javascript" type="text/javascript"></script>
 </head>

 <body>
 <form id="zoekform" method="post" action="toevoegen.php">
 <div class="row">
 <label for="datum"><?php echo $datum; ?></label>
 <input type="text" name="datum" id="datum" datum=""> </br></br>
 </div>
 
 <div id="regels">
        Betaalmethode <input type="text" name="betaalmethode">
           Bedrag <input type="text" name="bedrag">
    </div>
    <input type="button" value="Extra bon" onClick="meer('regels');">
  
  <hr>
 <input type="submit" value="toevoegen">
 <input type="reset" value="terugzetten">
 </form>

<a href= index.php >Home</a>
 </body>
 </html>


Me javascript:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
var counter = 1;
var limit = 50;
function meer(divName){
     if (counter == limit)  {
          alert("Maximum bereikt " + counter + " inputs");
     }
     else {
          var newdiv = document.createElement('div');
          newdiv.innerHTML = "Entry " + (counter + 1) + " <div class='row'>Betaalmethode <input type='text' name='bethaalmethode' required></section><section class='unit span6'>Bedrag <input type='text' name='bedrag'>";
          document.getElementById(divName).appendChild(newdiv);
          counter++;
     }
}
Gewijzigd op 09/07/2016 00:53:00 door Douwe Westra
 
- Ariën  -
Beheerder

- Ariën -

09/07/2016 08:56:11
Quote Anchor link
Omdat je de veldnamen overschrijft. Maak ze per klik uniek: betaalmethode[1], bedrag[1] etc.
 
Obelix Idefix

Obelix Idefix

09/07/2016 11:03:12
Quote Anchor link
Op basis van bovenstaande code voer je de query maar 1 keer uit.

Je bent er van op de hoogte dat mysql verouderd is? Stap over op mysqli of PDO.
 
Douwe Westra

Douwe Westra

12/07/2016 12:20:04
Quote Anchor link
@obelix, nee wist ik niet, maar ik denk dat het voor mij niet veel uitmaakt.
Veel ga ik er niet mee doen, puur stukje ondersteuning.

on-topic, ik snap het wel, maar krijg het niet voor mekaar, ik zal vast iets vreselijks fouts doen :S
Met de $meerinvoer wil ik het oplossen hopelijk.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
include ("db_config.php");
include ("site_config.php");

$meerinvoer = $_POST['datum']."','".$_POST['betaalmethode']."','".$_POST['bedrag']."')";
foreach ($meerinvoer as $sqlquery) {
     echo $sqlquery . "<br>";
}


$sqlquery = "INSERT INTO omzet (datum, betaalmethode, bedrag) VALUES('".$_POST['datum']."','".$_POST['betaalmethode']."','".$_POST['bedrag']."')";

$results = mysql_query($sqlquery) or die ("Fout: " .
mysql_error());

mysql_close();
?>

<html>
 <head>
 <meta charset="utf-8">
 <title><?php echo $titel; ?></title>
 <link rel="stylesheet" href="css/style.css">
 <script src="/js/meer.js" language="Javascript" type="text/javascript"></script>
 </head>

 <body>
 <form id="zoekform" method="post" action="toevoegen.php">
 <div class="row">
 <label for="datum"><?php echo $datum; ?></label>
 <input type="text" name="datum" id="datum" datum=""> </br></br>
 </div>
 
 <div id="regels">
        <?php echo $betaalmethode; ?> <input type="text" name="betaalmethode[]">
           <?php echo $bedrag; ?> <input type="text" name="bedrag[]">
    </div>
    <input type="button" value="Extra bon" onClick="meer('regels');">
  
  <hr>
 <input type="submit" value="toevoegen">
 <input type="reset" value="terugzetten">
 </form>

<a href= index.php >Home</a>
 </body>
 </html>
 
- Ariën  -
Beheerder

- Ariën -

12/07/2016 12:26:18
Quote Anchor link
Douwe Westra op 12/07/2016 12:20:04:
@obelix, nee wist ik niet, maar ik denk dat het voor mij niet veel uitmaakt.
Veel ga ik er niet mee doen, puur stukje ondersteuning.

Totdat je webhosting over stapt op PHP 7. En je site ligt plat....

Toevoeging op 12/07/2016 12:30:31:

Elke set ingevoerde set hoort bij één item, Dus in je javascript moet je bij elke iteratie dus de boel nummeren, zoals je dit krijgt:

betaalmethode[0]
bedrag[0]
betaalmethode[1]
bedrag[1]
betaalmethode[2]
bedrag[2]
 
Douwe Westra

Douwe Westra

12/07/2016 12:30:56
Quote Anchor link
ok, tnx, bedankt.
Maar wat moet ik dan doen?

Dat betekent dat ik 50x in de javascript moet zetten???
Dat is de max
het kan niet automatisch?
Gewijzigd op 12/07/2016 12:32:22 door Douwe Westra
 
Thomas van den Heuvel

Thomas van den Heuvel

12/07/2016 12:58:49
Quote Anchor link
Het enige wat je hoeft te doen is de veldnamen in je JavaScript snippet te voorzien van rechte haken?

Er zit mogelijk een spellingsfout in de veldnaam -> bethaalmethode.

En voor de goede orde zouden waarden van tag-eigenschappen tussen "dubbele quotes" moeten staan in plaats van enkele.
 
- Ariën  -
Beheerder

- Ariën -

12/07/2016 13:11:02
Quote Anchor link
Jup, dat kan ook. In mijn geval bedoelde ik overigens per iteratie. Dus per keer dat er geklikt wordt tussen de blokhaken doortellen.

Maar Thomas zijn manier is beter.
 
Thomas van den Heuvel

Thomas van den Heuvel

12/07/2016 13:20:21
Quote Anchor link
Stel dat je deze regels ook weer even gemakkelijk wilt verwijderen, of anders wilt rangschikken. Ik denk dat je dan alleen maar meer hinder ondervindt van een vaste nummering dan dat je hier profijt van hebt.

Ook heeft de index geen echte betekenis noch echte meerwaarde, want de velden worden toch verzonden in de volgorde waarin ze visueel op het scherm staan.

Om toch/gemakkelijk het aantal elementen te kunnen tellen zou ik hier een soort van container/wrapper (div) met een id omheen zetten, en dan gewoon elke keer als er geklikt wordt het aantal elementen in de container tellen.
Gewijzigd op 12/07/2016 13:21:11 door Thomas van den Heuvel
 
Douwe Westra

Douwe Westra

12/07/2016 13:59:15
Quote Anchor link
Thomas van den Heuvel op 12/07/2016 12:58:49:
Het enige wat je hoeft te doen is de veldnamen in je JavaScript snippet te voorzien van rechte haken?

Er zit mogelijk een spellingsfout in de veldnaam -> bethaalmethode.

En voor de goede orde zouden waarden van tag-eigenschappen tussen "dubbele quotes" moeten staan in plaats van enkele.


thx voor de spellingsfout, was idd zo.
Maar blijkbaar snap ik het niet.
Ik heb de js aangepast, volgens mij correct, maar het werkt nog steeds niet.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
var counter = 1;
var limit = 50;
function meer(divName){
     if (counter == limit)  {
          alert("Maximum bereikt " + counter + " inputs");
     }
     else {
          var newdiv = document.createElement('div');
          newdiv.innerHTML = "Entry " + (counter + 1) + " <div class="row">Betaalmethode <input type="text" name="betaalmethode[]"><section> Bedrag <input type="text" name="bedrag[]">";
          document.getElementById(divName).appendChild(newdiv);
          counter++;
     }
}
 
- Ariën  -
Beheerder

- Ariën -

12/07/2016 14:01:42
Quote Anchor link
Kijk eens met print_r($_POST) wat er ge-POST wordt?
 
Thomas van den Heuvel

Thomas van den Heuvel

12/07/2016 14:40:08
Quote Anchor link
@Douwe ik denk dat je JavaScript breekt omdat je de zowel de string begrensd met dubbele quotes, en ook in de string zelf dubbele quotes gebruikt... Als je nu eens je string begrensd met enkele quotes?

Concreet, vervang regel 9 door:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
newdiv.innerHTML = 'Entry ' + (counter + 1) + ' <div class="row">Betaalmethode <input type="text" name="betaalmethode[]"><section> Bedrag <input type="text" name="bedrag[]">';


Waarom open je daar trouwens een section? :/
 
Douwe Westra

Douwe Westra

12/07/2016 15:04:13
Quote Anchor link
- Ariën - op 12/07/2016 14:01:42:
Kijk eens met print_r($_POST) wat er ge-POST wordt?

Dan komt er dit uit:

Array ( [datum] => 11.2.16 [betaalmethode] => Array ( [0] => Overmaken [1] => Pin ) [bedrag] => Array ( [0] => 11,11 [1] => 52.25 ) )

Thomas van den Heuvel op 12/07/2016 14:40:08:
@Douwe ik denk dat je JavaScript breekt omdat je de zowel de string begrensd met dubbele quotes, en ook in de string zelf dubbele quotes gebruikt... Als je nu eens je string begrensd met enkele quotes?

Concreet, vervang regel 9 door:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
newdiv.innerHTML = 'Entry ' + (counter + 1) + ' <div class="row">Betaalmethode <input type="text" name="betaalmethode[]"><section> Bedrag <input type="text" name="bedrag[]">';


Waarom open je daar trouwens een section? :/


Helaas nog steeds niet in de db
Die section is weg, was een probeerseltje nvt
Gewijzigd op 12/07/2016 15:05:29 door Douwe Westra
 
Thomas van den Heuvel

Thomas van den Heuvel

12/07/2016 16:16:32
Quote Anchor link
Okay.

Het HTML en JavaScript gedeelte zou nu opgelost moeten zijn. Resteert je nog het bakken van INSERT-queries.

Ik denk dat je het jezelf gemakkelijker maakt om dit soort dingen in verschillende deelproblemen op te delen want je neemt teveel hooi op je vork. Je probeert alles in 1x op te lossen en dan "werkt het niet", in plaats van dingen stap voor stap en gestructureerd aan te pakken.

Je bent nu zover dat je je POST data kunt gaan inspecteren en op grond daarvan queries kunt gaan bouwen. Het is misschien ook handig om eerst te controleren of je formulier verzonden is voordat je lukraak $_POST variabelen gaat gebruiken die mogelijk helemaal niet bestaan...

Probeer even wat meer orde te scheppen in je (eigen) chaos.
 
Douwe Westra

Douwe Westra

28/07/2016 10:18:07
Quote Anchor link
Thomas van den Heuvel op 12/07/2016 16:16:32:
Okay.

Het HTML en JavaScript gedeelte zou nu opgelost moeten zijn. Resteert je nog het bakken van INSERT-queries.

Ik denk dat je het jezelf gemakkelijker maakt om dit soort dingen in verschillende deelproblemen op te delen want je neemt teveel hooi op je vork. Je probeert alles in 1x op te lossen en dan "werkt het niet", in plaats van dingen stap voor stap en gestructureerd aan te pakken.

Je bent nu zover dat je je POST data kunt gaan inspecteren en op grond daarvan queries kunt gaan bouwen. Het is misschien ook handig om eerst te controleren of je formulier verzonden is voordat je lukraak $_POST variabelen gaat gebruiken die mogelijk helemaal niet bestaan...

Probeer even wat meer orde te scheppen in je (eigen) chaos.


Hoi Thomas,

Excuus voor de late reactie (vakantie), maar mijn kennis rijkt niet ver genoeg (nog) om te snappen wat je bedoeld en uit te voeren.
Kan/wil je mij op weg helpen?
 
- Ariën  -
Beheerder

- Ariën -

28/07/2016 10:32:46
Quote Anchor link
Zorg dat je eerst structuur in je code brengt, waarbij je de afhandeling en de 'view' met wat je ziet gescheiden houdt binnen een enkel PHP-script.

In dit ietswat gestripte voorbeeld houd ik rekening dat je de MySQLi-functies gebruikt. Je zult hierbij nog wel je db_config.php moeten aanpassen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
include ("db_config.php");
include ("site_config.php");
if($_SERVER['REQUEST_METHOD'] == "POST") {
    $sqlquery = "INSERT INTO omzet (datum,
                    betaalmethode,
                    bedrag)
                 VALUES('"
.mysqli_real_escape_string($con,$_POST['datum'])."',
                    '"
.mysqli_real_escape_string($con,$_POST['betaalmethode']."',
                    '"
.mysqli_real_escape_string($con,$_POST['bedrag']."
                    ')"
;

    $results = mysqli_query($con,$sqlquery) or die ("Fout: " .mysqli_error($con));
}
else {
?>

/* HIER JE HTML-GEDEELTE
<?php
}
?>
Gewijzigd op 28/07/2016 10:38:58 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

28/07/2016 13:17:48
Quote Anchor link
@Ariën het hele idee was juist dat je meerdere records in 1x in kon voeren :). Je zult dus op zijn minst met een foreach-loop door je POST data heen moeten.

Daarnaast is het verstandig om je invoer te filteren, je wilt dat datums goed geformatteerde datums zijn, dat (bij voorkeur) de betaalmethode een id(entifier) is van een betaalmethode-tabel en dat een bedrag ook echt een numeriek bedrag is. Dit alles om er zorg voor te dragen dat de informatie die de database in gaat ook echt (in ieder geval qua formattering) klopt.

Oh en als je hier dan toch een foreach van maakt wil je waarschijnlijk ook dat al deze records worden ingevoerd, of geen van alle. Misschien is dan gebruikmaking van een transactie verstandig. Wat tot gevolg heeft dat de engine van deze tabel(len) InnoDB moet zijn.

Daarnaast wil je dan waarschijnlijk ook terugkoppeling over wat er fout is indien er iets niet klopt en wil je tevens niet alles opnieuw invullen maar het formulier terugkrijgen met alle zojuist ingevulde informatie, waarbij de velden met fouten voorzien zijn van een aantekening. Anders wordt het invoeren van omzet nogal een beproeving.

Oftewel: het invoeren moet makkelijk zijn, geen extra werk kosten en de data die de database in gaat moet van het juiste format zijn.

@Douwe hoe zijn deze bedragen opgebouwd? Met een komma als decimaal scheidingsteken, of een punt? Of vul je alles in in centen? Indien je bedragen invoert met een komma dan kan PHP/MySQL hier niet (goed) mee rekenen. Daarnaast, hoe luidt de tabeldefinitie van omzet (op te vragen met SHOW CREATE TABLE omzet)?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.