Visualizzazione risultati 1 fino 8 di 8

Discussione: errore con calcolatrice in php

  1. #1
    L'avatar di altersams
    altersams non è connesso Neofita
    Data registrazione
    16-04-2011
    Messaggi
    6

    Question errore con calcolatrice in php

    buongiorno cari membri di altervista... ho da poco preso la strada del php e vorrei fare una piccola calcolatrice per prendere un po la mano, e ho fatto questo codice...solo che mi da sempre degli errori e quando li correggo ne appaiono altri, qualcuno potrebbe verificare se il mio codice è buono?

    questo è il form dell'inserimento dei dati per il calcolo:

    Codice HTML:
    <HTML>
    <HEAD>
    <TITLE>calcolatrice</TITLE>
    </HEAD>
    <BODY>
    
    <form method="post" action="calcolatrice.html">
    <table>
    <tr>
    <td><input name="num1" type="text" id="num1"></td>
    <td><select name="operatore">
        <option selected name="operatore" value="+"> + </option> 
    	<option name="operatore" value="-"> - </option>
    	<option name="operatore" value="*"> * </option>
    	<option name="operatore" value="/"> / </option>
    	<option name="operatore" value="^"> ^ </option>
    	<option name="operatore" value="sqrt"> sqrt </option>
    </select></td>
    <td><input name="num2" type="text" id="num2"></td>
    </tr>
    <tr>
    <td colspan="3"><input type="submit" value="calcola"></td>
    </tr>
    </table>
    </form>
    questo è il codice php della calcolatrice

    Codice PHP:
    <?

    //da qui recupero i dati dal form
    $num1=$_POST['num1']
    $num2=$_POST['num2']


    //verifico che i numeri siano diversi da 0

    if (!$num1 || !$num2 || !is_numeric($num1) || !is_numeric($num2))

    {
    //se trovo un campo vuoto o non numerico stampo un errore

    print "Errore...";
    }

    //in caso di numeri diversi da 0 procedo

    else
    {

    //somma
    if ($operatore=="+")
    {
    print
    "$num1 + $num2 =" . $num1 + $num2;
    }

    //sottrazione
    {
    print
    "$num1 - $num2 =" . $num1 - $num2;
    }

    //moltiplicazione
    {
    print
    "$num1 * $num2 =" . $num1 * $num2;
    }

    //divisione
    {
    print
    "$num1 / $num2 =" . $num1 / $num2;
    }

    //elevamento a potenza
    {
    print
    "$num1 ^ $num2 =" . pow($num1,$num2);
    }

    //radice quadrata
    {
    print
    " radq $num1=" . $num1^(1/2)
    }

    }

    ?>
    seconda piccola domanda un po stupida, i due codici vanno tutti su un unico documento in formato php
    grazie
    Ultima modifica di altersams : 29-05-2011 alle ore 15.25.42 Motivo: + tag [php] per il codice

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Vedo questo
    Codice PHP:
    if ($operatore=="+")
    ma tutti gli altri dove sono? Manca una riga di elseif, o preferiresti uno switch.
    Ultima modifica di dreadnaut : 29-05-2011 alle ore 15.23.16

  3. #3
    L'avatar di altersams
    altersams non è connesso Neofita
    Data registrazione
    16-04-2011
    Messaggi
    6

    Predefinito

    scusa adesso li ho messi

    Codice PHP:
    <?

    //da qui recupero i dati dal form
    $num1=$_POST['num1']
    $num2=$_POST['num2']


    //verifico che i numeri siano diversi da 0

    if (!$num1 || !$num2 || !is_numeric($num1) || !is_numeric($num2))

    {
    //se trovo un campo vuoto o non numerico stampo un errore

    print "Errore...";
    }

    //in caso di numeri diversi da 0 procedo

    else
    {

    //somma
    if ($operatore=="+")
    {
    print
    "$num1 + $num2 =" . $num1 + $num2;
    }

    if (
    $operatore=="-")
    //sottrazione
    {
    print
    "$num1 - $num2 =" . $num1 - $num2;
    }

    if (
    $operatore=="*")
    //moltiplicazione
    {
    print
    "$num1 * $num2 =" . $num1 * $num2;
    }

    if (
    $operatore=="/")
    //divisione
    {
    print
    "$num1 / $num2 =" . $num1 / $num2;
    }

    if (
    $operatore=="^")
    //elevamento a potenza
    {
    print
    "$num1 ^ $num2 =" . pow($num1,$num2);
    }

    if (
    $operatore=="sqrt")
    //radice quadrata
    {
    print
    " radq $num1=" . $num1^(1/2)
    }

    }

    ?>
    spero che adesso vada bene... potresti spiegarmi la differenza tra "elseif" e "switch"?

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,247

    Predefinito

    Citazione Originalmente inviato da altersams Visualizza messaggio
    seconda piccola domanda un po stupida, i due codici vanno tutti su un unico documento in formato php
    grazie
    Il form html puoi metterlo anche in una pagina html.
    Mentre il sorgente PHP deve essere rigorosamente in una pagina con estensione php.

    i dati del form vengno inviati alla pagina indicata nell' "action". Quindi hai scritto:

    Codice HTML:
    action="calcolatrice.html"
    ..ma i dati dovrebbero essere inviati ad una pagina *.php (ovvero, quella che contiene il php).

    Puoi benissimo fare un'unica pagina, impostando l'action a "se stessa".. ovvero, se la pagina si chiama "calcolatrice.php", l'action lo setterai con
    Codice HTML:
    action="calcolatrice.php"
    .

    Poi, nel sorgente php, non vedo dove hai inizializzato la variabile $operatore...

    EDIT:

    Modo con switch() / if - else if:

    Codice PHP:
    if($operatore == '+')
    {
    //codice da eseguire in caso di addizione
    }
    else if(
    $operatore == '-') #invece di else if, puoi usare elseif
    {
    //codice da eseguire in caso di sottrazione
    }
    else if(
    $operatore == '*') #invece di else if, puoi usare elseif
    {
    //codice da eseguire in caso di moltiplicazione
    }
    #tutti gli altri casi
    else
    {
    //codice da eseguire in caso di operatore sconosciuto
    }
    Switch:

    Codice PHP:
    switch($operatore)
    {
    case
    '+':
    //codice da eseguire in caso di addizione
    break;
    case
    '-':
    //codice da eseguire in caso di sottrazione
    break;
    #tutti gli altri casi...
    default:
    //codice da eseguire in caso di opoeratore non conosciuto
    }
    ..Comunque, prima di fare:
    Codice PHP:
    $num1=$_POST['num1']
    $num2=$_POST['num2']
    (che, tra l'altro, mancano i punti e virgola ( ; )), dovresti verificare che quei parametri esistano con la isset()

    Ciao!
    Ultima modifica di alemoppo : 29-05-2011 alle ore 15.44.01

  5. #5
    Guest

    Predefinito

    Non è meglio usare uno switch invece di tutte if?

    Codice PHP:
    <?

    //da qui recupero i dati dal form
    $num1=$_POST['num1']
    $num2=$_POST['num2']
    $operatore=$_POST['operatore'];

    //verifico che i numeri siano diversi da 0

    if (!$num1 || !$num2 || !is_numeric($num1) || !is_numeric($num2))

    {
    //se trovo un campo vuoto o non numerico stampo un errore

    print "Errore...";
    }

    //in caso di numeri diversi da 0 procedo

    else
    {

    switch(
    $operatore) {

    case +:
    print
    "$num1 + $num2 =" . $num1 + $num2;
    break;

    case -:
    print
    "$num1 - $num2 =" . $num1 - $num2;
    break;

    case *:
    print
    "$num1 * $num2 =" . $num1 * $num2;
    break;

    case /:
    print
    "$num1 / $num2 =" . $num1 / $num2;
    break;

    case ^:
    print
    "$num1 ^ $num2 =" . pow($num1,$num2);
    break;

    case
    sqrt:
    print
    " radq $num1=" . $num1^(1/2)
    break;

    }
    }

    ?>
    Avevi dimenticato di dichiarare $operatore.. OPS anticipato :S

  6. #6
    Guest

    Predefinito

    DOvrebbe funzionare (ora come ora non ho modo di testare in locale):

    Codice PHP:
    <?php

    $num1
    = (int) $_POST['num1'];
    $num2 = (int) $_POST['num2'];
    $operatore = $_POST['operatore'];

    if (!
    $num1 || !$num2)
    {
    echo
    'Errore...';
    }
    else
    {
    switch (
    $operatore)
    {
    case
    '+':
    case
    '-':
    case
    '/':
    case
    '*':
    case
    '^':
    case
    'sqrt':
    $text = "{$num1} {$operatore} {$num2}";

    switch (
    $operatore)
    {
    case
    '+':
    $result = $num1 + $num2;
    break;

    case
    '-':
    $result = $num1 - $num2;
    break;

    case
    '/':
    $result = $num1 / $num2;
    break;

    case
    '*':
    $result = $num1 * $num2;
    break;

    case
    '^':
    $result = bcpow($num1, $num2, 3); # 3 è il numero di decimali
    break;

    case
    'sqrt':
    $result = sqrt($num1);
    break;
    }

    echo
    "{$text} = {$result}";
    break;

    default:
    echo
    'Errore...';
    break;
    }
    }

    ?>
    Rivedendo il form è tutto sbagliato, prova così:
    Codice HTML:
    <select name="operatore">
        <option value="+"> + </option> 
    	<option value="-"> - </option>
    	<option value="*"> * </option>
    	<option value="/"> / </option>
    	<option value="^"> ^ </option>
    	<option value="sqrt"> sqrt </option>
    </select>
    Ultima modifica di biccheddu : 29-05-2011 alle ore 15.45.11

  7. #7
    L'avatar di altersams
    altersams non è connesso Neofita
    Data registrazione
    16-04-2011
    Messaggi
    6

    Predefinito

    grazie a tutti ho corretto il codice e adesso funziona che è una meraviglia...
    ho usato il codice di biccheddu.
    grazie ancora a tutti

  8. #8
    Guest

    Predefinito

    Aggiungo una cosa: @Suppliers, non hai messo gli apici/virgolette nei case dello switch! Lo script avrebbe generato un errore di sintassi!

    Sono contento che funzioni dato non l'ho potuto provare

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •