variable houdt enkel waarde bij radio buttons, niet bij gewone buttons

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ewergreen php

ewergreen php

25/11/2010 18:51:28
Quote Anchor link
Een van de voorstellen in de beginnersoefeningen thread die ik laatst startte, was een rekenmachine te schrijven. Hoewel ik vrij snel iets werkends had, kwam ik erachter dat ik telkens eerst de cijfers moest ingeven en dan pas de operator kon ingeven.

Niet helemaal correct, dus opnieuw begonnen. Oplossing in mijn ogen: de operator weg te schrijven in een variable. Nu blijft de operator blijkbaar helaas enkel in de variable staan als ik met radio buttons werk. Wat logisch is, want ze worden pas doorgegeven als ik submit. Iemand enig idee hoe ik dit oplos/omzeil? Hieronder het voorbeeld met radio buttons.

Ps: Ik zou wel liefst strict in php/HTML blijven werken, dus geen JavaScript.

Index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include 'calculator.php'; ?>

<form action="index.php" method="post">
<input type="text" name="input1" />
<input type="radio" name="op" value="+" />
<input type="radio" name="op" value="-" />
<input type="radio" name="op" value="/" />
<input type="radio" name="op" value="*" />
<input type="submit" value="submit" />
<input type="text" name="input2" />
</form>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$input1
= $_POST['input1'];
$input2 = $_POST['input2'];

echo calculate($input1,$input2);
?>


Calculator.php
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
<?php
function calculate($one,$two){
    switch ($_POST['op']){
        case
"+":
            $result = $one + $two;
            return $result;
            break;
        case
"-":
            $result = $one - $two;
            return $result;
            break;
        case
"*":
            $result = $one * $two;
            return $result;
            break;
        case
"/":
            $result = $one / $two;
            return $result;
            break;
    }
}

?>
Gewijzigd op 25/11/2010 21:24:07 door Ewergreen php
 
PHP hulp

PHP hulp

22/12/2024 11:22:30
 

25/11/2010 18:57:53
Quote Anchor link
Controleren of een post is gedaan doe je met if($_SERVER['REQUEST_METHOD'] == 'POST')
Gebruik var_dump($_POST); om te kijken wat je binnen krijgt.
 
Johan K

Johan K

25/11/2010 19:19:02
Quote Anchor link
Maak ook een "default:" aan in je switch statement voor het geval dat er word gekloot met de input. De default case word uitgevoerd als de vorige cases nog niet gebroken zijn.

En met je deling, kijk dan wel even uit dat je niet door 0 heen deelt, krijg je nare foutmeldingen van.
Gewijzigd op 25/11/2010 19:21:39 door Johan K
 
Maarten PHP

Maarten PHP

25/11/2010 19:46:34
Quote Anchor link
Je zegt HMTL ow ik dacht tog dat het HTML was hoor
Gewijzigd op 25/11/2010 19:46:59 door Maarten PHP
 

25/11/2010 19:48:29
Quote Anchor link
Gnotrgnotr gnotrgnotr op 25/11/2010 19:46:34:
Je zegt HMTL ow ik dacht tog dat het HTML was hoor


Misschien eerst maar eens een cursus Nederlands schrijven voor beginners doen?
 
Ewergreen php

ewergreen php

25/11/2010 21:24:44
Quote Anchor link
Constructief.
 
Jordi Kroon

Jordi Kroon

25/11/2010 21:35:26
Quote Anchor link
Html begint met <html>

Niet eerst de <form>
 
Ewergreen php

ewergreen php

25/11/2010 21:50:25
Quote Anchor link
Jordi kroon op 25/11/2010 21:35:26:
Html begint met <html>

Niet eerst de <form>

Thanks, had ze niet gecopy paste om de code niet te lang te maken.



Toevoeging op 25/11/2010 21:50:55:

Johan Kruse op 25/11/2010 19:19:02:
Maak ook een "default:" aan in je switch statement voor het geval dat er word gekloot met de input. De default case word uitgevoerd als de vorige cases nog niet gebroken zijn.

En met je deling, kijk dan wel even uit dat je niet door 0 heen deelt, krijg je nare foutmeldingen van.


Goede opmerking. Heb ze allebei aangepast.



Toevoeging op 25/11/2010 21:58:38:

Ik heb een paar veranderingen doorgevoerd, maar de operator wordt nog steeds niet doorgegeven als ik op submit duw. Ergens logisch, maar ik vind dus echt niet hoe ik dit wel kan oplossen.

Index.php
<html>
<head>
<title>Calculator</title>
</head>
<body>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include 'calculator.php'; ?>

<form action="index.php" method="post">
<input type="text" name="input1" />
<input type="button" name="op" value="+" />
<input type="button" name="op" value="-" />
<input type="button" name="op" value="/" />
<input type="button" name="op" value="*" />
<input type="submit" value="submit" />
<input type="text" name="input2" />
</form>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$input1
= $_POST['input1'];
$input2 = $_POST['input2'];

echo calculate($input1,$input2);
var_dump($_POST);
?>

</body>
</html>

Calculator.php
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
<?php
function calculate($one,$two){
    switch ($_POST['op']){
        case
"+":
            $result = $one + $two;
            return $result;
            break;
        case
"-":
            $result = $one - $two;
            return $result;
            break;
        case
"*":
            $result = $one * $two;
            return $result;
            break;
        case
"/":
            if ($two == "0"){
                echo "Divisions by 0 are not allowed";
                break;    
            }
else{
                $result = $one / $two;
                return $result;
                break;    
            }
        default:

           echo "No operator could be found";
    }
}

?>
Gewijzigd op 25/11/2010 22:04:10 door ewergreen php
 
Bas Cost Budde

Bas Cost Budde

26/11/2010 10:45:13
Quote Anchor link
De operator wordt wel gepost wanneer je een operator-knop gebruikt, maar hij staat niet in een veld. Type=button is niet nuttig om waardes door te geven.

Wat zou je willen? Met een script de waarde in een input type=hidden zetten? Dan kun je wanneer je het formulier daarna weer opbouwt, iets met de waarde doen.
 
Ewergreen php

ewergreen php

26/11/2010 12:35:31
Quote Anchor link
@Bas
Wat bedoel je exact met een operator knop?
Liefst had ik gewoon met type=button gewerkt, maar ik heb al door dat ik dan of JavaScript of een workaround ga moeten gebruiken.

Ik zou liefst de buttons houden, dus als ik daar een input type=hidden voor nodig heb, so be it. Kan je hier a.u.b. een voorbeeldje van geven, aangezien ik niet meteen weet wat je hiermee bedoelt. Exacter: hoe schrijf je de waarde met een druk op de knop weg naar dat input field?
 
Bas Cost Budde

Bas Cost Budde

26/11/2010 12:55:32
Quote Anchor link
"operator knop" is niet een vast begrip, maar een toepassing van wat ik op jouw pagina zie: knoppen, die rekenkundige operators weergeven.

Je kunt met de plusknop in het voorbeeld hieronder nog niet zien dat je erop hebt geklikt. Maar de waarde wordt nu wel meegesubmit.
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
<form method="POST" action="">
    <input type="text" name="arg1" />
    <input type="button" onclick="setOperator(this)" value="+" />
    <input type="text" name="arg2" />
    <input type="submit" value="=" />
<input type="hidden" id="operator" name="operator" />
</form>
<script type="text/javascript">
function $(el) {
    if (typeof el == "string") return document.getElementById(el);
    return el;
}

function setOperator(el) {
    $('operator').value = el.getAttribute('value');
}
</script>
 
Ewergreen php

ewergreen php

26/11/2010 14:17:05
Quote Anchor link
vreesde al dat ik het enkel met JavaScript ging kunnen oplossen. Bedankt voor de voorzet!
 

26/11/2010 14:19:44
Quote Anchor link
Hierom geldt dus ook dat je controleert of een form gesubmit is door if($_SERVER['REQUEST_METHOD'] == 'POST') te gebruiken ;-)
 



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.