Variabele waarden vermenigvuldigen in tekstvakken
Graag zou ik hier hulp willen vragen met het vermenigvuldigen van 2 tekstvakken en de uitkomst te laten zien in een 3de tekstvak.
De personen in kwestie zouden een hoogte en een breedte moeten opgeven en dan zou het totaal automatich moeten uitgerekend worden maar na verschillende mislukte pogingen is het me nog steeds niet gelukt.
Alvast bedank.
Gewijzigd op 06/10/2015 14:41:14 door Kevin W
Met vaste variabele lukt me dat maar de eerste en tweede tekstvariabele zijn altijd verschillend en daar zit de moeilijkheid.
Je klasgenootjes hebben al een topic lopen.
http://www.phphulp.nl/php/forum/topic/oppervlakte-berekene-dmv-function/98694/last/
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
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
<?php
// init
define('EOL', "\n");
$totaal = 0;
$var1 = 0; if (isset($_POST['var1'])) $var1 = intval($_POST['var1']);
$var2 = 0; if (isset($_POST['var2'])) $var2 = intval($_POST['var2']);
$totaal = $var1 + $var2;
// formuliertje
print '<!DOCYTYPE html>' . EOL;
print '<html>' . EOL;
print ' <head>' . EOL;
print ' <title>Variabele tekstvelden optellen</title>' . EOL;
print ' </head>' . EOL;
print ' <body>' . EOL;
print ' <form action="?" method="post">' . EOL;
print ' <label for="var1">Eerste variabele: </label>' . EOL;
print ' <input id="var1" name="var1" type="text" value="' . $var1 . '" />' . EOL;
print ' <br/>' . EOL;
print ' <label for="var2">Tweede variabele: </label>' . EOL;
print ' <input id="var2" name="var2" type="text" value="' . $var2 . '" />' . EOL;
print ' <br/>' . EOL;
print ' Totaal: ' . $totaal . EOL;
print ' </form>' . EOL;
print ' </body>' . EOL;
print '</html>' . EOL;
?>
// init
define('EOL', "\n");
$totaal = 0;
$var1 = 0; if (isset($_POST['var1'])) $var1 = intval($_POST['var1']);
$var2 = 0; if (isset($_POST['var2'])) $var2 = intval($_POST['var2']);
$totaal = $var1 + $var2;
// formuliertje
print '<!DOCYTYPE html>' . EOL;
print '<html>' . EOL;
print ' <head>' . EOL;
print ' <title>Variabele tekstvelden optellen</title>' . EOL;
print ' </head>' . EOL;
print ' <body>' . EOL;
print ' <form action="?" method="post">' . EOL;
print ' <label for="var1">Eerste variabele: </label>' . EOL;
print ' <input id="var1" name="var1" type="text" value="' . $var1 . '" />' . EOL;
print ' <br/>' . EOL;
print ' <label for="var2">Tweede variabele: </label>' . EOL;
print ' <input id="var2" name="var2" type="text" value="' . $var2 . '" />' . EOL;
print ' <br/>' . EOL;
print ' Totaal: ' . $totaal . EOL;
print ' </form>' . EOL;
print ' </body>' . EOL;
print '</html>' . EOL;
?>
Zet dan meteen neer dat je ook kan kiezen of je wilt delen, optellen, vermenigvuldigen en etc...
Het is gelukt!! Bedankt allemaal.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
// init
define('EOL', "\n");
$vars = array('var1', 'var2', 'totaal');
foreach ($vars as $v) $$v = 0;
if (isset($_POST['var1'])) $var1 = $_POST['var1'];
if (isset($_POST['var2'])) $var2 = $_POST['var2'];
foreach ($vars as $v) $$v = floatval(str_replace(',', '.', $$v));
$ops = array('*' => 'X', '/' => '/', '+' => '+', '-' => '-', '%' => 'mod', '**' => 'exp', /* PHP 5.6+ */);
$op = '+'; $totaal = '#Foutje'; $foutje = '';
if (isset($_POST['op']) && array_key_exists($_POST['op'], $ops)) $op = $_POST['op'];
if ($var2 == 0 && ($op == '/' || $op == '%')) $totaal = 'Delen door nul is flauwekul.';
else {
try {
$rc = @eval('$totaal = $var1 ' . $op . ' $var2;');
if ($rc === false) throw new Exception('PHP 5.6+ is hiervoor nodig.');
}
catch (\Exception $e) {$foutje = 'window.alert("' . $e->getMessage() . '")';}
finally {foreach ($vars as $v) $$v = str_replace('.', ',', $$v);}
}
// formuliertje
print '<!DOCYTYPE html>' . EOL;
print '<html>' . EOL;
print ' <head>' . EOL;
print ' <title>Variabele tekstvelden optellen</title>' . EOL;
print ' <style type="text/css">' . EOL;
print ' * {font-size:12pt; font-family:monospace;}' . EOL;
print ' body {margin:3em;}' . EOL;
print ' select, input {border-radius:0.5em;outline:0;' . EOL;
print ' width:15em; text-align:right; box-shadow:none; margin:0.33em; border:1px solid lightgrey; padding:0.4em 0.6em;}' . EOL;
print ' select {width:4em; text-align:left;}' . EOL;
print ' select:focus,input:focus {animation: foc 0.5s ease;box-shadow:0 0 0.2em rgba(0,127,0,1);background:#F3FFF3;}' . EOL;
print ' @keyframes foc{0%{box-shadow:0 0 2em rgba(0,0,255,0);} 100%{box-shadow:0 0 0.2em rgba(0,127,0,1);}}' . EOL;
print ' option{background:white;}' . EOL;
print ' option[selected]{background:lightgreen;}' . EOL;
print ' input[readonly]{background:#F3F3F3;}' . EOL;
print ' hr {display:block; height:0.15em; border:0; padding:0; margin:0.5em 0; background:grey; width:21em; }' . EOL;
print ' </style>' . EOL;
print ' </head>' . EOL;
print ' <body>' . EOL;
print ' <script type="text/javascript">' . EOL;
print ' ' . $foutje . EOL;
print ' </script>' . EOL;
print ' <form action="" method="post">' . EOL;
print ' <input name="var1" type="text" value="' . $var1 . '" onchange="form.submit();" />' . EOL;
print ' <br/>' . EOL;
print ' <input name="var2" type="text" value="' . $var2 . '" onchange="form.submit();" />' . EOL;
print ' <select id="op" name="op" onchange="form.submit();">' . EOL;
foreach($ops as $k => $v) {
$s = ''; if ($op == $k) $s = 'selected="selected"';
print ' <option value="' . $k . '"' . $s .'>' . $v . '</option>' . EOL;
}
print ' </select>' . EOL;
print ' <hr/>' . EOL;
print ' <input type="text" readonly="readonly" value="' . $totaal . '" />' . EOL;
print ' </form>' . EOL;
print ' </body>' . EOL;
print '</html>' . EOL;
exit(0);
?>
// init
define('EOL', "\n");
$vars = array('var1', 'var2', 'totaal');
foreach ($vars as $v) $$v = 0;
if (isset($_POST['var1'])) $var1 = $_POST['var1'];
if (isset($_POST['var2'])) $var2 = $_POST['var2'];
foreach ($vars as $v) $$v = floatval(str_replace(',', '.', $$v));
$ops = array('*' => 'X', '/' => '/', '+' => '+', '-' => '-', '%' => 'mod', '**' => 'exp', /* PHP 5.6+ */);
$op = '+'; $totaal = '#Foutje'; $foutje = '';
if (isset($_POST['op']) && array_key_exists($_POST['op'], $ops)) $op = $_POST['op'];
if ($var2 == 0 && ($op == '/' || $op == '%')) $totaal = 'Delen door nul is flauwekul.';
else {
try {
$rc = @eval('$totaal = $var1 ' . $op . ' $var2;');
if ($rc === false) throw new Exception('PHP 5.6+ is hiervoor nodig.');
}
catch (\Exception $e) {$foutje = 'window.alert("' . $e->getMessage() . '")';}
finally {foreach ($vars as $v) $$v = str_replace('.', ',', $$v);}
}
// formuliertje
print '<!DOCYTYPE html>' . EOL;
print '<html>' . EOL;
print ' <head>' . EOL;
print ' <title>Variabele tekstvelden optellen</title>' . EOL;
print ' <style type="text/css">' . EOL;
print ' * {font-size:12pt; font-family:monospace;}' . EOL;
print ' body {margin:3em;}' . EOL;
print ' select, input {border-radius:0.5em;outline:0;' . EOL;
print ' width:15em; text-align:right; box-shadow:none; margin:0.33em; border:1px solid lightgrey; padding:0.4em 0.6em;}' . EOL;
print ' select {width:4em; text-align:left;}' . EOL;
print ' select:focus,input:focus {animation: foc 0.5s ease;box-shadow:0 0 0.2em rgba(0,127,0,1);background:#F3FFF3;}' . EOL;
print ' @keyframes foc{0%{box-shadow:0 0 2em rgba(0,0,255,0);} 100%{box-shadow:0 0 0.2em rgba(0,127,0,1);}}' . EOL;
print ' option{background:white;}' . EOL;
print ' option[selected]{background:lightgreen;}' . EOL;
print ' input[readonly]{background:#F3F3F3;}' . EOL;
print ' hr {display:block; height:0.15em; border:0; padding:0; margin:0.5em 0; background:grey; width:21em; }' . EOL;
print ' </style>' . EOL;
print ' </head>' . EOL;
print ' <body>' . EOL;
print ' <script type="text/javascript">' . EOL;
print ' ' . $foutje . EOL;
print ' </script>' . EOL;
print ' <form action="" method="post">' . EOL;
print ' <input name="var1" type="text" value="' . $var1 . '" onchange="form.submit();" />' . EOL;
print ' <br/>' . EOL;
print ' <input name="var2" type="text" value="' . $var2 . '" onchange="form.submit();" />' . EOL;
print ' <select id="op" name="op" onchange="form.submit();">' . EOL;
foreach($ops as $k => $v) {
$s = ''; if ($op == $k) $s = 'selected="selected"';
print ' <option value="' . $k . '"' . $s .'>' . $v . '</option>' . EOL;
}
print ' </select>' . EOL;
print ' <hr/>' . EOL;
print ' <input type="text" readonly="readonly" value="' . $totaal . '" />' . EOL;
print ' </form>' . EOL;
print ' </body>' . EOL;
print '</html>' . EOL;
exit(0);
?>
Nice! :)
Dat is een manier om HTML compleet onleesbaar te maken, I suppose.
Thomas van den Heuvel op 07/10/2015 12:07:09:
Dat is een manier om HTML compleet onleesbaar te maken, I suppose.
Zou leuk zijn dat als je het anders ziet, je dan ook met de naar in jouw ogen juiste oplossing komt?
Alleen maar commentaar geven op anderen helpt het probleem niet op te lossen?
Verder is het ook aan te raden of if-elseif-else- statement en while/for loops etc netjes uit te lijnen met de TAB-toets, zodat je precies onder elkaar kan zien welke bij elkaar hoort.
Ik weet niet welke editor je gebruikt, maar een goede fatsoenlijke PHP-editor heeft de mogelijkheid voor 'formatting' in een handomdraai.
Dit probleem is redelijk triviaal, daarnaast vraagt de topicstarter om een (complete) oplossing onder het mom van "hulp", zonder te laten zien wat deze zelf geprobeerd heeft. Dat komt dan bij mij over (en dit is een indruk die verkeerd kan zijn) alsof de topicstarter geen moeite wil doen of heeft gedaan om zelf tot een antwoord te komen. Je geeft nota bene zelf aan dat het waarschijnlijk om een huiswerkopdracht gaat.
Simpelweg omdat een oplossing werkt, maakt dit nog niet juist of "goed". De bovenstaande code mag dan wellicht werken, maar deze is gewoon totaal onleesbaar. Het is helemaal niet nodig om statische HTML te echo'en of te printen, het dient geen enkel doel. En voordat je begint te klagen dat ik enkel over esthetische kwesties aan het zwetsen ben: stel dat dit een applicatie is die ook onderhouden moet worden en waarbij AL je code zo geschreven is... dat is niet bepaald prettig werken wel?
Ik had liever gezien dat de topicstarter met fragmenten kwam en aangaf waar precies het probleem zat en dat als vertrekpunt te nemen in plaats van deze knip-en-plak-cultuur die er tegenwoordig steeds meer lijkt te ontstaan. Mensen zijn niet meer geinteresseerd in de (achterliggende) werking of de vorm, men wil direct een kant-en-klare oplossing. Het nadeel van dat soort mensen bedienen is dat ze morgen, nee, vandaag alweer achteraan in de rij aansluiten voor hun volgende probleem in plaats van zelf eens na te denken.
Ik zou zeggen, kijk eens wat verder dan je neus lang is voordat je de moraalridder uit gaat hangen.
Gewijzigd op 07/10/2015 14:48:41 door Thomas van den Heuvel
Ik heb niet gevraagd achter een kant en klare oplossing. Enkel om hulp. Het is toch phpHULP??
De code die ik heb gekregen moet ik nog aanpassen zodat deze werkt zoals ik het wil.
Ik wou weten hoe ik tekstvakken kon koppelen aan een variabele. Ik was al een tijdje op zoek naar een oplossing (php.net, documentatie,...) maar zonder resultaat dus richt ik me tot jullie en ik ben ook dankbaar voor de hulp.
Het is gemakkelijk om commentaar te geven als je het allemaal al weet maar iedereen moet beginnen van 0 en ik doe mijn best om eerst zelf naar de oplossing te zoeken voor ik hulp vraag.
Quote:
Ik weet niet welke editor je gebruikt, maar een goede fatsoenlijke PHP-editor heeft de mogelijkheid voor 'formatting' in een handomdraai.
Voor dit voorbeeld heb ik de textarea van phphulp gebruikt, maar ik heb de formatting-button nog niet gevonden.
Quote:
De bovenstaande code mag dan wellicht werken, maar deze is gewoon totaal onleesbaar.
Een developer moet elke code kunnen lezen die de parser snapt, want die regels zijn gewoon van te voren afgesproken. Welke delen van mijn voorbeeld snap je niet? Ik wil het wel verder toelichten.
Quote:
Een developer moet elke code kunnen lezen die de parser snapt, want die regels zijn gewoon van te voren afgesproken.
Ik weet niet met wat voor developers jij normaal werkt, maar als ik van een collega dit soort code krijg om mee te werken, dan zou ik hem/haar vriendelijk doch dringend verzoeken eerst e.e.a. te fatsoeneren als deze verwacht dat ik hier ook maar iets mee ga doen.
Fijn dat machines hier chocola van kunnen maken, maar het zijn ook mensen die hier naar kijken (en in dit geval mensen die er iets van willen leren, daarom denk ik ook dat dit niet de makkelijkste vorm is).
Daarnaast denk ik dat er op deze site niet zo gek veel developers zitten, dus het lijkt me handiger om je code wat toegankelijker te houden.
Het is makkelijk om iets moeilijk(er) te maken, het is de kunst om zaken zo eenvoudig mogelijk te houden.
Nogmaals, welk deel is onduidelijk? En hoe zou jij het beter doen?
Zo zou ik het doen (en ik denk ook wel de voorkeur van de meeste mensen):
- niet bakkenvol html echo-en
- overzichtelijker php-code schrijven
En nogmaals, je kunt wel commentaar geven maar waar is een beter codevoorbeeld?
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
// init
$vars = array('var1', 'var2', 'totaal');
foreach($vars as $v){
$$v = 0;
}
if(isset($_POST['var1'])){
$var1 = $_POST['var1'];
}
if(isset($_POST['var2'])){
$var2 = $_POST['var2'];
}
foreach($vars as $v){
$$v = floatval(str_replace(',', '.', $$v));
}
$ops = array('*' => 'X', '/' => '/', '+' => '+', '-' => '-', '%' => 'mod', '**' => 'exp', /* PHP 5.6+ */);
$op = '+';
$totaal = '#Foutje';
$foutje = '';
if(isset($_POST['op']) && array_key_exists($_POST['op'], $ops)){
$op = $_POST['op'];
}
if($var2 == 0 && ($op == '/' || $op == '%')){
$totaal = 'Delen door nul is flauwekul.';
}
else{
try{
$rc = @eval('$totaal = $var1 ' . $op . ' $var2;');
if($rc === false){
throw new Exception('PHP 5.6+ is hiervoor nodig.');
}
}
catch(\Exception $e){
$foutje = 'window.alert("' . $e->getMessage() . '")';
}
finally{
foreach($vars as $v){
$$v = str_replace('.', ',', $$v);
}
}
}
// formuliertje
?>
<!DOCYTYPE html>
<html>
<head>
<title>
Variabele tekstvelden optellen
</title>
<style type="text/css">
*{
font-size:12pt;
font-family:monospace;
}
body{
margin:3em;
}
select, input{
border-radius:0.5em;
outline:0;
width:15em;
text-align:right;
box-shadow:none;
margin:0.33em;
border:1px solid lightgrey;
padding:0.4em 0.6em;
}
select{
width:4em;
text-align:left;
}
select:focus, input:focus{
animation:foc 0.5s ease;
box-shadow:0 0 0.2em rgba(0,127,0,1);
background:#F3FFF3;
}
@keyframes foc{
0%{
box-shadow:0 0 2em rgba(0,0,255,0);
}
100%{
box-shadow:0 0 0.2em rgba(0,127,0,1);
}
}
option{
background:white;
}
option[selected]{
background:lightgreen;
}
input[readonly]{
background:#F3F3F3;
}
hr{
display:block;
height:0.15em;
border:0;
padding:0;
margin:0.5em 0;
background:grey;
width:21em;
}
</style>
</head>
<body>
<script type="text/javascript">
<?=$foutje; ?>
</script>
<form action="" method="post">
<input name="var1" type="text" value="<?=$var1; ?>" onchange="form.submit();" />
<br/>
<input name="var2" type="text" value="<?=$var2; ?>" onchange="form.submit();" />
<select id="op" name="op" onchange="form.submit();">
<?php
foreach($ops as $k => $v){
?>
<option value="<?=$k; ?>" <?=$op == $k ? "selected" : ""; ?>><?=$k; ?></option>
<?php
}
?>
</select>
<hr/>
<input type="text" readonly="readonly" value="<?=$totaal; ?>" />
</form>
</body>
</html>
// init
$vars = array('var1', 'var2', 'totaal');
foreach($vars as $v){
$$v = 0;
}
if(isset($_POST['var1'])){
$var1 = $_POST['var1'];
}
if(isset($_POST['var2'])){
$var2 = $_POST['var2'];
}
foreach($vars as $v){
$$v = floatval(str_replace(',', '.', $$v));
}
$ops = array('*' => 'X', '/' => '/', '+' => '+', '-' => '-', '%' => 'mod', '**' => 'exp', /* PHP 5.6+ */);
$op = '+';
$totaal = '#Foutje';
$foutje = '';
if(isset($_POST['op']) && array_key_exists($_POST['op'], $ops)){
$op = $_POST['op'];
}
if($var2 == 0 && ($op == '/' || $op == '%')){
$totaal = 'Delen door nul is flauwekul.';
}
else{
try{
$rc = @eval('$totaal = $var1 ' . $op . ' $var2;');
if($rc === false){
throw new Exception('PHP 5.6+ is hiervoor nodig.');
}
}
catch(\Exception $e){
$foutje = 'window.alert("' . $e->getMessage() . '")';
}
finally{
foreach($vars as $v){
$$v = str_replace('.', ',', $$v);
}
}
}
// formuliertje
?>
<!DOCYTYPE html>
<html>
<head>
<title>
Variabele tekstvelden optellen
</title>
<style type="text/css">
*{
font-size:12pt;
font-family:monospace;
}
body{
margin:3em;
}
select, input{
border-radius:0.5em;
outline:0;
width:15em;
text-align:right;
box-shadow:none;
margin:0.33em;
border:1px solid lightgrey;
padding:0.4em 0.6em;
}
select{
width:4em;
text-align:left;
}
select:focus, input:focus{
animation:foc 0.5s ease;
box-shadow:0 0 0.2em rgba(0,127,0,1);
background:#F3FFF3;
}
@keyframes foc{
0%{
box-shadow:0 0 2em rgba(0,0,255,0);
}
100%{
box-shadow:0 0 0.2em rgba(0,127,0,1);
}
}
option{
background:white;
}
option[selected]{
background:lightgreen;
}
input[readonly]{
background:#F3F3F3;
}
hr{
display:block;
height:0.15em;
border:0;
padding:0;
margin:0.5em 0;
background:grey;
width:21em;
}
</style>
</head>
<body>
<script type="text/javascript">
<?=$foutje; ?>
</script>
<form action="" method="post">
<input name="var1" type="text" value="<?=$var1; ?>" onchange="form.submit();" />
<br/>
<input name="var2" type="text" value="<?=$var2; ?>" onchange="form.submit();" />
<select id="op" name="op" onchange="form.submit();">
<?php
foreach($ops as $k => $v){
?>
<option value="<?=$k; ?>" <?=$op == $k ? "selected" : ""; ?>><?=$k; ?></option>
<?php
}
?>
</select>
<hr/>
<input type="text" readonly="readonly" value="<?=$totaal; ?>" />
</form>
</body>
</html>
Dat gaat in tegen het basisprincipe van HTML en PHP gescheiden houden?