Optelling
en daarom wou ik is proberen een rekenscriptje te maken.
Een script dat 2 getallen met elkaar optellen.
Ik heb al vanalles geprobeerd.
Maar het lukt nooit!
Code (php)
<input type="text" name="a">
<input type="text" name="b">
<input type="submit" name="versturen" value="Versturen">
Dit lukte niet.
En dus probeerde ik dit:
$a=$_POST["a"];
$b=$_POST["b"];
$resultaat=$a+$b;
if($_POST["versturen"])
{
echo "Het resultaat van $a + $b = $resultaat";
}
else
{
echo "<input type=\"text\" name=\"a\">
<input type=\"text\" name=\"b\">
<input type=\"submit\" name=\"versturen\" value=\"Versturen\">";
?>
Maar dit lukt ook niet.
Kan iemand me helpen?
Nu nog zoeken waar het staat XD
dus zo moet het:
Voor de rest kan je beter qouten met '' en variabelen buiten de qoutes plaatsen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if ($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['versturen']
&& isset($_POST['a']) && ctype_digit($_POST['a')
&& isset($_POST['b']) && ctype_digit($_POST['b')) {
echo 'Het resultaat van '.$_POST['a']. ' + '.$_POST['b'].' = '.(int) $_POST['a'] + (int) $_POST['b'];
}
echo '<form method="post" action=""><input type="text" name="a">
<input type="text" name="b">
<input type="submit" name="versturen" value="Versturen"></form>';
?>
if ($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['versturen']
&& isset($_POST['a']) && ctype_digit($_POST['a')
&& isset($_POST['b']) && ctype_digit($_POST['b')) {
echo 'Het resultaat van '.$_POST['a']. ' + '.$_POST['b'].' = '.(int) $_POST['a'] + (int) $_POST['b'];
}
echo '<form method="post" action=""><input type="text" name="a">
<input type="text" name="b">
<input type="submit" name="versturen" value="Versturen"></form>';
?>
http://nl3.php.net/manual/en/ref.ctype.php
http://nl2.php.net/isset
@Jan
Als je een voorbeeld geeft dan moet ie vind ik wel kloppen!!
Gewijzigd op 01/01/1970 01:00:00 door Noppes
Maar het is precies niet zo gemakkelijk als ik had gedacht.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if(isset($_POST['a'], $_POST['b'])
&& is_numeric($_POST['a']) && is_numeric($_POST['a'])) {
$totaal = $_POST['a'] + $_POST['b'];
echo "Het resultaat van {$_POST['a']} + {$_POST['b']} = {$totaal}";
}
?>
<form method="post" action=""><input type="text" name="a">
<input type="text" name="b">
<input type="submit" name="versturen" value="Versturen"></form>
if(isset($_POST['a'], $_POST['b'])
&& is_numeric($_POST['a']) && is_numeric($_POST['a'])) {
$totaal = $_POST['a'] + $_POST['b'];
echo "Het resultaat van {$_POST['a']} + {$_POST['b']} = {$totaal}";
}
?>
<form method="post" action=""><input type="text" name="a">
<input type="text" name="b">
<input type="submit" name="versturen" value="Versturen"></form>
Mischien meer begrijpbaar als voorgaand voorbeelt? En niet minder goed
Gewijzigd op 01/01/1970 01:00:00 door Christiaan Baartse
vars buiten quotes ;)
@3de regel, 2de $_POST: ['a'] moet ['b'] zijn ;)
Gewijzigd op 01/01/1970 01:00:00 door Eduard
Hij werkt perfect
Bedankt voor jullie hulp
Zowieso is dit al tegen mijn principes want ik werk altijd met logica en presentatie gescheiden.
Gewijzigd op 01/01/1970 01:00:00 door Christiaan Baartse
Noppes schreef op 12.04.2008 18:24:
Alle waarden in $_POST zijn van het type string en strings bijelkaar optellen dat is onzin dus moet je type casten maar dat gaat pas goed als je ook daadwerkelijk weet of de $_POST alleen cijfers bevat
Voor de rest kan je beter qouten met '' en variabelen buiten de qoutes plaatsen.
@Jan
Als je een voorbeeld geeft dan moet ie vind ik wel kloppen!!
Voor de rest kan je beter qouten met '' en variabelen buiten de qoutes plaatsen.
@Jan
Als je een voorbeeld geeft dan moet ie vind ik wel kloppen!!
Het mooie aan php ten opzicht van bijvoorbeeld java is, dat je niet per se hoeft te type casten. Jan's voorbeeld is dus wel goed, hij gaat er alleen vanuit dat de gebruiker cijfers invult. En anders krijgt ie gewoon 0 (als het alleen letters zijn, anders het getal wat in die string staat), of als er een getal is ingevoerd, dat ene getal.
Ik zou zelfs zeggen dat Jan's voorbeeld netter is dan die van jou.
Waarom checken op $_POST['versturen']? Je kijkt al naar de request methode.
Je kunt beter gebruik maken van is_numeric.
Ook zal is_numeric zal false terug geven als de post niet bestaat, dus de isset hoef je ook niet te doen.
Type casting hoeft niet, omdat je al weet dat de vars getallen zijn, die je kunt optellen, bovendien type cast jij naar int, dus als iemand 1.5 (wat niet mag van jou, omdat er een puntje in staat) komt er 1 uit. Zie ook deze warning.
Zijn variable hoeven niet buiten quotes, omdat het enkele zijn. Die worden niet door de parser gehaalt. Er zal dus gewoon $a komen te staan. Alleen moeten ze bij dubbele quotes buiten quotes.
Dus herschrijven we jou zooi effe:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && is_numeric($_POST['a'])
&& is_numeric($_POST['b']))
{
echo 'Het resultaat van ' . $_POST['a'] . ' + ' . $_POST['a'] . ' = ' . ($_POST['a'] + $_POST['b']);
} else { // Niet gepost, dus moeten we het form laten zien
echo '<form method="post" action="#"><input type="text" name="a">
<input type="text" name="b">
<input type="submit" name="versturen" value="Versturen"></form>';
}
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST' && is_numeric($_POST['a'])
&& is_numeric($_POST['b']))
{
echo 'Het resultaat van ' . $_POST['a'] . ' + ' . $_POST['a'] . ' = ' . ($_POST['a'] + $_POST['b']);
} else { // Niet gepost, dus moeten we het form laten zien
echo '<form method="post" action="#"><input type="text" name="a">
<input type="text" name="b">
<input type="submit" name="versturen" value="Versturen"></form>';
}
?>
Wat me trouwens opvalt in jou code, en wat ik eigenlijk veel erger vind is dit:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php // Kleurtjes
if ($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['versturen']
&& isset($_POST['a']) && ctype_digit($_POST['a')
&& isset($_POST['b']) && ctype_digit($_POST['b')) {
#dus:
&& isset($_POST['versturen'] // Achja, laten we een eind ) vergeten
&& ctype_digit($_POST['a') // Weljah, net hebben we een ) vergeten, nu vergeten we een ]
&& ctype_digit($_POST['b')) { // Ik vind ] vergeten veel leuker
?>
if ($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['versturen']
&& isset($_POST['a']) && ctype_digit($_POST['a')
&& isset($_POST['b']) && ctype_digit($_POST['b')) {
#dus:
&& isset($_POST['versturen'] // Achja, laten we een eind ) vergeten
&& ctype_digit($_POST['a') // Weljah, net hebben we een ) vergeten, nu vergeten we een ]
&& ctype_digit($_POST['b')) { // Ik vind ] vergeten veel leuker
?>