Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23

    Script media aritmetica in PHP

    Salve ragazzi,
    Avrei bisogno di un aiutino per il lavoro che sto realizzando. Mi servirebbe creare uno script in PHP che, tramite alcuni dati inseriti tramite caselle di input, restituisca, alla pressione di un tasto submit, il risultato della media aritmetica fra quei valori.
    Ho elaborato il codice:

    <input type="text" name="variable" value="<?php echo $var1; ?>">
    <input type="text" name="variable" value="<?php echo $var2; ?>">
    <input type="text" name="variable" value="<?php echo $var3; ?>">
    <?php
    $nums = array($var1,$var2,$var3);
    if ($nums)
    echo array_sum($nums) / count($nums), "\n";
    else
    echo "0\n"; ?>

    Ma non va. Nel senso che il valore della media aritmetica non cambia se inserisco diversi valori nelle caselle input; rimane sempre 0.
    Qualche idea? Ringrazio anticipatamente.

  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    prima di tutto i nomi degli input devono essere diversi

    <input type="text" name="variable1" value="">
    <input type="text" name="variable2" value="">
    <input type="text" name="variable3" value="">

    e poi devi leggerli con quei nomi:

    $nums = array($_POST['variable1'],$_POST['variable1'],$_POST['variable1']);

    ... se il metodo del form è get ovviamente dovrai usare $_GET al posto di $_POST


    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Originariamente inviato da markboucher12
    PHP Script arithmetic mean from an array of values taken from input forms. The arithmetic mean should be calculated ONLY after a "submit" button is pressed.
    presumo che quello che ha postato sia solo un pezzo del codice, mi auguro che ci sia da qualche parte anche un form e un tasto di invio.
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Originariamente inviato da las
    presumo che quello che ha postato sia solo un pezzo del codice, mi auguro che ci sia da qualche parte anche un form e un tasto di invio.
    Certamente. Un form method post con action che rimanda a un file php che alla fine gestisce la funzione per ricavare la media. Il tutto condizionato da un bottone submit.
    C'è la possibilità, nella funzione (che riposto, per maggiore chiarezza):
    codice:
    <?php $nums = array($_POST['variable1'],$_POST['variable2'],$_POST['variable3']); if ($nums) echo array_sum($nums) / count($nums), "\n"; else echo "0\n"; ?>
    di escludere dal conteggio della media quei form che abbiano come valore 0 (o nessun valore, cioè bianco)? Non saprei come gestire quest'evenienza.
    Della serie, ho 3 campi di input: in 2 inserisco un numero, nell'altro non inserisco niente. Vorrei che la media venisse effettuata solo tra i 2 in cui ho inserito un valore.
    Grazie!

  5. #5
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Codice PHP:
    $nums = array($_POST['variable1'],$_POST['variable1'],$_POST['variable1']);

    if (
    $nums){

        foreach(
    $nums AS $key => $val){ // ciclo l'array

            
    if($val=="0" || $val==""){ // se trovo un elemento con valore 0 o vuoto
                
    unset($nums[$key]); // elimino l'elemento dall'array
            
    }

        }

        echo 
    array_sum($nums) / count($nums), "\n";
    }else{
        echo 
    "0\n";

    se poi vuoi fare le cose per bene puoi fare l'array direttamente nell'input mettendo come nome variable[] così poi nella parte php fai solo $nums = $_POST['variable'] e puoi aggiungere quanti input vuoi senza ritoccare la parte php
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Funziona alla perfezione. Grazie mille per l'aiuto! Diciamo che con PHP se non sono all'ABC... sto al DEF

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Scusate, devo chiedere una banalità (forse?) ma non penso sia il caso di aprire un altro topic.
    Ho bisogno di assegnare una funzione a una variabile. Mi spiego meglio: ho bisogno di una cosa del genere:

    $abc1 =

    if (($_POST['var10'] >= 27) AND ($_POST['var10'] <= 29)){
    echo '0.25';
    }
    else if (($_POST['var10'] = 30) AND ($_POST['var10'] != '30L')) {
    echo '0.50';
    }
    else if ($_POST['var10'] = '30L'){
    echo '0.75';
    }


    Ma chiaramente così la cosa non va perchè mi da errore di sintassi.
    Qualcuno ha qualche idea su come assegnare una funzione a una variabile?

  8. #8
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    non puoi assegnare una funzione a una variabile, quello che puoi fare è una funzione che restituisca un valore.

    Codice PHP:

    function miaFunzione($parametro1,$parametro2){
      
    // operazioni da compiere

    return $valore;
    }


    $abc1 =miaFunzione($parametro1,$parametro2); 
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Originariamente inviato da las
    non puoi assegnare una funzione a una variabile, quello che puoi fare è una funzione che restituisca un valore.

    Codice PHP:

    function miaFunzione($parametro1,$parametro2){
      
    // operazioni da compiere

    return $valore;
    }


    $abc1 =miaFunzione($parametro1,$parametro2); 
    Quindi una cosa del genere
    Codice PHP:
    function abc1(){
        if ((
    $_POST['var10'] >= 27) AND ($_POST['var10'] <= 29)){
        return 
    '0.25';
        }
        else if ((
    $_POST['var10'] = 30) AND ($_POST['var10'] != '30L')) {
        return 
    '0.50';
    }
    else if (
    $_POST['var10'] = '30L'){
        return 
    '0.75';
    }
    }
    $abc1 =abc1();
    echo 
    $abc1
    E' sintatticamente corretta? Ora dovrò solo ripetere questa stessa funzione 36 volte per tutte le 36 variabili che devo trasformare in quei valori a quelle condizioni non esiste un metodo più pulito, giusto? (Grazie ancora!!!)

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da gfr1991
    Quindi una cosa del genere
    Codice PHP:
    function abc1(){
        if ((
    $_POST['var10'] >= 27) AND ($_POST['var10'] <= 29)){
        return 
    '0.25';
        }
        else if ((
    $_POST['var10'] = 30) AND ($_POST['var10'] != '30L')) {
        return 
    '0.50';
    }
    else if (
    $_POST['var10'] = '30L'){
        return 
    '0.75';
    }
    }
    $abc1 =abc1();
    echo 
    $abc1
    E' sintatticamente corretta? Ora dovrò solo ripetere questa stessa funzione 36 volte per tutte le 36 variabili che devo trasformare in quei valori a quelle condizioni non esiste un metodo più pulito, giusto? (Grazie ancora!!!)
    Il confronto di valore si fa con ==, poi per velocizzarlo potresti mettere tutte le variabili in un array già dal form (name="variable[]") e richiamarle tramite ciclo $_POST['variable'][..numero della variabile..]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.