Gå til innhold

[Løst] Kalkulator


Anbefalte innlegg

Lag en webside der du kan skrive inn to tall i tekstbokser også få ut summen (+), differansen (-), produktet (*) og kvotienten (/) ved hjelp av 4 forskjellige knapper. Resultatet skal vises på neste side avhengig av hvilken knapp som trykkes. F.eks skal det skrives ut ”Summen av 5 og 5 er 10” dersom + tasten trykkes på forrige side. Tips : Bruk if(isset($_GET[”knappenavn”])) i PHP koden på neste side for å sjekke om hvilken knapp som er trykket på i skjema.

 

 

Noen som har en link hvor jeg kan lære meg dette?

Lenke til kommentar
Videoannonse
Annonse

Rent praktisk, hva kan du fra før? Klarer du f.eks. å lage en PHP-side som skriver ut noe?

 

Hvis du kan det, foreslår jeg at du leser litt om html forms. Prøv å lag en enkel form med et par felter og en submit-knapp i en fil, og i den samme fila skriver du ut alt innholdet i $_REQUEST for å se hva du fikk. (tips: Bruk print_r til å skrive den ut, og putt det inni <pre> </pre> for å gjøre det litt lettere å lese.)

 

Les gjerne også dette.

Endret av Djn
Lenke til kommentar

Blir spurt om jeg vil åpne resultat.php? Jeg blir ikke sendt til neste side....

<!DOCTYPE html>
<html>
   <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   </head>
   <body>
<form action="resultat.php" method="post">
Firstnumber: <input name="num1" type="text" /><br>
Secondnumber: <input name="num2" type="text" />
<input type="submit" />
</form>
   </body>
</html>

 

 

<?php
$num1 = $_POST['num1'];
$num2 = $_POST['num2'];
$a = $num1 + $num2;
echo "The sum of the two numbers is ". $a;
?>

Endret av nepz
Lenke til kommentar

Slik ble det ;)

<form action="kalkulator.php" method="post">
Tall 1:
<input type="text" name="tall1" /><br/>
Tall 2:
<input type="text" name="tall2" /><br/>
<input type="submit" value="+" name="pluss" />
<input type="submit" value="-" name="minus" />
<input type="submit" value="*" name="gange" />
<input type="submit" value="/" name="dele" />
</form>

 

<?php
if(isset($_POST["pluss"]))
{
$sum = $_POST["tall1"] + $_POST["tall2"];
}
elseif(isset($_POST["minus"]))
{
$sum = $_POST["tall1"] - $_POST["tall2"];
}
elseif(isset($_POST["gange"]))
{
$sum = $_POST["tall1"] * $_POST["tall2"];
}
elseif(isset($_POST["dele"]))
{
$sum = $_POST["tall1"] / $_POST["tall2"];
}
echo "svaret er $sum.";

 

Kom gjerne med kommentarer om dette f.eks kan gjøres på en annen måte. Gira på å lære.

Endret av nepz
Lenke til kommentar

du ut alt innholdet i $_REQUEST for å se hva du fikk.

Ikke bruk $_REQUEST, du vet ikke hvor ting kommer i fra. $_REQUEST innholder alt fra $_POST, $_GET og $_COOKIE. Når man først bruker html form, så spesifiserer man jo method og vet dermed om data kommer via post eller get, og bruker da tilhørende variabel.

 

Det var mest for å ikke rote til posten med en ting til han måtte tenke på. :)

(Og altså, hva er galt med request? Hvis du skriver litt ordentlig skal det ikke ha stort å si uansett.)

Lenke til kommentar

Problemet er mangel på kontroll. Hva skjer hvis du har f.eks. en cookie og ett url parameter ($_GET) med samme navn, og du skal hente ut begge med (kun) $_REQUEST? Dette er ikke ett problem når man bruker $_COOKIE og $_GET, da vet man nøyaktig hvor man henter ting i fra, og det gjør det mer ryddig å lese koden.

 

(om cookie er med i $_REQUEST er avhengig av php.ini oppsettet og versjonen av PHP)

Lenke til kommentar

Problemet er mangel på kontroll. Hva skjer hvis du har f.eks. en cookie og ett url parameter ($_GET) med samme navn, og du skal hente ut begge med (kun) $_REQUEST? Dette er ikke ett problem når man bruker $_COOKIE og $_GET, da vet man nøyaktig hvor man henter ting i fra, og det gjør det mer ryddig å lese koden.

 

(om cookie er med i $_REQUEST er avhengig av php.ini oppsettet og versjonen av PHP)

 

Nå vil man vel typisk lagre forskjellige ting i cookies vs. post/get, og jeg sliter med å finne et eksempel hvor blanding mellom post og get ville være problematisk - men joda, jeg er forsåvidt enig i at det kan være ryddig å være eksplisitt. (Bare ikke nok til å ta opp forskjellen mellom post og get som nok et moment i en intro-post.)

Lenke til kommentar

dette er vel den letteste måten å oppnå dette på etter min mening:

<?php
if(isset($_POST['submit'])):
extract($_POST);
switch($operator):
	case 'add':  $answer = (int)$int1 + (int)$int2;  break;
	case 'sub':  $answer = (int)$int1 - (int)$int2;  break;
	case 'tms':  $answer = (int)$int1 * (int)$int2;  break;
	case 'dev':  $answer = (int)$int1 / (int)$int2;  break;
endswitch;
endif;
?>
<form method="post">
<input type="text" name="int1">
<select name="operator">
	<option value="add">+</option>
	<option value="sub">–</option>
	<option value="tms">*</option>
	<option value="dev">/</option>
</select>
<input type="text" name="int2">
<input type="submit" name="submit" value="Er lik">   <strong><?=$answer?></strong>
</form>

Endret av Yawa
Lenke til kommentar

Hvorfor bruke extract($_POST) i stedet for kun switch($_POST['operator']) ? Virker unødvendig for meg, i tillegg må du ta hensyn til at den kan komme i konflikt med eksisterende variabler, og det må håndteres (selv om det ikke er tilfellet i denne kode snutten, men tenker på generelt basis og gode vaner).

Lenke til kommentar

Variablene i kodesnutten er kun tilgjenglig når en bruker har klikket submit-knappen som gjelder for kalkulatoren. Personlig benytter jeg extract() svært ofte pga. jeg er nøye med navngivning og fordi det går endel fortere å skrive kode sånn fremfor slik:

switch($_POST['operator']):
case 'add':  $answer = (int)$_POST['int1'] + (int)$_POST['int2'];  break;
case 'sub':  $answer = (int)$_POST['int1'] - (int)$_POST['int2'];  break;
case 'tms':  $answer = (int)$_POST['int1'] * (int)$_POST['int2'];  break;
case 'dev':  $answer = (int)$_POST['int1'] / (int)$_POST['int2'];  break;
endswitch;

Å skrive $_POST['name'] for hver av de 9 syns jeg er unødvendig, og så ser det stygt ut (i mine øyne).

Til tider setter jeg en prefix om jeg skulle være i tvil om navnet jeg benytter kan komme i konflikt med annen kode på samme side. I dette tilfellet ville jeg nok valgt "calc_". altså $calc_operator, $calc_int1, $calc_int2.

 

 

Appropos gode vaner; Jeg mener at god programmerings-teknikk er å skrive så lite og rent som mulig. Hovedsaklig pga. tidsmessig arbeid for programmerer.

 

Ved å benytte extract() samt sette en forklarende prefix/suffix gjør man koden mye mer lettleslig fremfor å benytte $_POST['name']...

Endret av Yawa
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...