Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    65

    Script per calcolare il peso forma

    Ciao a tutti,

    sto cercando di metter su uno script che in base all'inserimento di altezza, peso ed età, dica se si è in forma oppure no.

    Attualmente il tutto è composto da tre file php: uno per stabilire un array, uno per il form e uno per verificare i dati inseriti e confrontare le variabili per poi esprimere un risultato.

    Precisamente:

    parametri.php

    codice:
    <?php
    	$parametri = array (
    						"altezza" => "Altezza",
    						"peso"	  => "Peso",
    						"eta"	  => "Età"
    						);
    ?>
    form.php

    codice:
    <?php
    
    echo "<form action=\"risultati.php\" method=\"post\">";
    	echo "<table>";
    		foreach ($parametri as $campo => $valore)
    		{
    			if(isset($_POST[$campo]))
    			{
    				$valore = $_POST[$campo];
    			}
    			else
    			{
    				$valore = "";
    			}
    			echo "<tr><td align='right'>{$parametri[$campo]}
    </td>
    				  <td><input type='text' name='$campo' size='10' maxlenght='10' value='$valore'></td></tr>";
    		}
    		
    		echo "<td>Sesso:</td> <td><select name=\"sesso\" />";
    								echo "<option>M</option>";
    								echo "<option>F</option>";
    		echo "</td>";
    		echo "<tr>";	
    			echo "<td><input type='submit' name='submit'/></td>";
    		echo "</tr>";
    	echo "</table>";
    echo "</form>";
    
    ?>

    risultati.php

    codice:
    <?php
    include("parametri.php");
    
    if (!isset($_POST['submit']))
    	{
    	include("form.php");
    	}
    else {
    		foreach ($_POST as $campo => $valore) 
    		{
    			if (empty($_POST[$campo]))
    			{
    				$blank[$campo] = "vuoto";
    			}
    			else
    			{
    				if (!preg_match("/^[0-9.]{5}$/",$valore))
    				{
    					$formats[$campo] = "errato";
    				}
    			}	
    		}
    	}
    /*Verifichiamo*/
    if (@sizeof($blank) > 0 or @sizeof($formats) >0)
    {
    	if (@sizeof($blank) > 0)
    	{
    		echo "I seguenti campi obbligatori non sono stati riempiti: 
    ";
    		foreach ($blank as $campo => $valore)
    		{
    			echo "&bull; {$parametri[$campo]} 
    ";
    		}
    	}
    	if (@sizeof($formats) > 0)
    	{
    		echo "I seguenti campi non hanno un formato corretto: 
    ";
    		foreach ($formats as $campo => $valore)
    		{
    			echo "&bull; {$parametri[$campo]} 
    ";
    		}
    	}
    	echo "<hr>";
    	include("form.php");
    }
    /*else
    {
    Qui parte lo script per confrontare i vari parametri
    }*/
    ?>


    Allora: il form me lo visualizza correttamente, ma una volta inseriti i valori (o anche se non li inserisco), mi dà quest'errore:


    codice:
    I seguenti campi obbligatori non sono stati riempiti: 
    • Altezza 
    • Peso 
    • Età 
    I seguenti campi non hanno un formato corretto: 
    
    Notice: Undefined index: sesso in C:\Programmi\EasyPHP5.3.0\www\script peso forma\risultati.php on line 40
    • 
    
    Notice: Undefined index: submit in C:\Programmi\EasyPHP5.3.0\www\script peso forma\risultati.php on line 40
    •
    Al posto di preg_match ho usato ereg, ma mi dice che è ormai obsoleto e quindi non saprei come gestire il tutto. E poi non so perché mi dà come errore la variabile sesso e submit.

    Qualcuno potrebbe aiutarmi?

    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    perchè cicli sull'array "parametri" in base ai dati inviati via POST, dove ci sono anche i campi "sesso" e "submit" che infatti non sono definiti in parametri.php

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    65
    Originariamente inviato da eiyen
    perchè cicli sull'array "parametri" in base ai dati inviati via POST, dove ci sono anche i campi "sesso" e "submit" che infatti non sono definiti in parametri.php
    Grazie per la risposta, credo di aver capito.

    Quindi dopo il commento

    /*Verifichiamo*/

    dovrei inserire un'ulteriore condizione all'if oppure posso risolvere in un altro modo?



    E come mai poi mi dà sempre i parametri errati utilizzando preg_match? (in realtà me o fa anche con ereg, ma non riesco a capire cosa sbaglio...)

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    io rivedrei l'intera struttura, ma per tenerla così puoi cambiare

    Codice PHP:
    foreach ($_POST as $campo => $valore) { 
    (che cicla su tutti i campi $_POST)

    con
    Codice PHP:
    foreach ($parametri as $campopar => $valorepar) {
      
    $campo $campopar$valore $_POST[$campo]; 
    (che cicla solo sui campi di $parametri: ho poi richiamato le variabili che usavi nel ciclo precedente... non ho visto dove le usa lo script)

    Per il controllo modifica:
    Codice PHP:
    $formats[$campo] = "errato"
    con:
    Codice PHP:
    $formats[$campo] = "errato".": ".var_export($valoretrue); 
    per visualizzare che valori vengono stampati (dovrebbero essere tutte stringhe con solo cifre decimali, di massimo 5 caratteri di lunghezza)

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    65
    Grazie per il suggerimento

    Originariamente inviato da eiyen

    Per il controllo modifica:
    Codice PHP:
    $formats[$campo] = "errato"
    con:
    Codice PHP:
    $formats[$campo] = "errato".": ".var_export($valoretrue); 
    per visualizzare che valori vengono stampati (dovrebbero essere tutte stringhe con solo cifre decimali, di massimo 5 caratteri di lunghezza)
    Ehm, purtroppo non sono ancora a questo livello (ho cominciato a studiarlo da pochissimo). Comunque nello script ci dovrebbero essere solo valori numerici...


    io rivedrei l'intera struttura
    Per rivederla, secondo te, come potrei impostarla? (Non voglio tutto lo script bello e pronto, mi piacerebbe sapere solo la struttura che tu utilizzeresti, così da avere un'idea...sempre se non ti scocci).

    Grazie ancora


    PS. diciamo che la struttura di questo script l'ho presa da un libro sul quale sto studiando e siccome è vecchio (e il php si aggiorna di continuo) porta ancora la struttura con ereg...e per questo ho scelto questo tipo di logica nello script

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    65
    Allora, ho rifatto lo script da zero e adesso mi funziona (lo devo completare con i parametri da esaminare, ma il tutto funziona...)

    parametri.php:

    Codice PHP:
    <?php
        $parametri 
    = array (
                            
    "altezza" => "Altezza",
                            
    "peso"      => "Peso",
                            
    "eta"      => "Età"
                            
    );
        
    $sesso        = array (
                            
    "m"       => "M",
                            
    "f"       => "F",
                            );
    ?>

    form.php:

    Codice PHP:
    <?php
    include("parametri.php");

    echo 
    "<form action=\"risultato.php\" method=\"post\">";
        echo 
    "<table>";
            foreach (
    $parametri as $campo => $valore)
            {
                if(isset(
    $_POST[$campo]))
                {
                    
    $valore $_POST[$campo];
                }
                else
                {
                    
    $valore "";
                }
                echo 
    "<tr><td align='right'>{$parametri[$campo]}
    </td>
                      <td><input type='text' name='
    $campo' size='10' maxlenght='10' value='$valore'></td>";
                        if (@
    sizeof($blank[$campo]) > 0)
                        {
                            echo 
    "<td>Il seguente campo è obbligatorio. </td>";
                    
                        }
                        if (@
    sizeof($formats[$campo]) > 0)
                        {
                            echo 
    "<td>Il seguente campo non ha un formato corretto. </td>";
                    
                        }
                      
                     echo 
    "</tr>";
                      
            }
            
            echo 
    "<td>Sesso:</td> <td><select name=\"sesso\" />";
            
                                if (
    $_POST[sesso] == '')
                                {    
                                    echo 
    "<option>{$sesso['m']}</option>";
                                    echo 
    "<option>{$sesso['f']}</option>";
                                }
                                elseif (
    $_POST[sesso] == 'M')
                                {    
                                    echo 
    "<option>{$sesso['m']}</option>";
                                    echo 
    "<option>{$sesso['f']}</option>";
                                }
                                elseif (
    $_POST[sesso] == 'F')
                                {    
                                    echo 
    "<option>{$sesso['f']}</option>";
                                    echo 
    "<option>{$sesso['m']}</option>";
                                }
            echo 
    "</td>";
            echo 
    "<tr>";    
                echo 
    "<td><input type='submit' name='submit'/></td>";
            echo 
    "</tr>";
        echo 
    "</table>";
    echo 
    "</form>";

    ?>

    risultato.php:

    Codice PHP:
    <?php
    include("parametri.php");

    if (!isset(
    $_POST['submit']))
        {
        include(
    "form.php");
        }

    else 
        {
            
                foreach (
    $parametri as $campo => $valore)
                {
            
                    if (empty(
    $_POST[$campo]))
                    {
                        
    $blank[$campo] = "vuoto";
                    }                
                    elseif (!
    preg_match("/^[0-9.]{1,3}$/",$_POST[$campo]))
                    {
                        
    $formats[$campo] = "errato";
                    }
                    
                }
                
            if (@
    sizeof($blank) > or @sizeof($formats) > 0)
            {
                include(
    "form.php");
            }
            
            else 
    //Qui parte l'else per il confronto dei dati...
            
    {
                echo 
    "Funziona";
            }
                    
        }
    ?>


    L'unica cosa che mi "infastidisce" è il fatto che se vedo il codice sorgente nella pagina del browser, mi trovo questo:

    codice:
    <form action="risultato.php" method="post"><table><tr><td align='right'>Altezza
    </td> 
    				  <td><input type='text' name='altezza' size='10' maxlenght='10' value=''></td></tr><tr><td align='right'>Peso
    </td> 
    				  <td><input type='text' name='peso' size='10' maxlenght='10' value=''></td></tr><tr><td align='right'>Età
    </td> 
    				  <td><input type='text' name='eta' size='10' maxlenght='10' value=''></td></tr><td>Sesso:</td> <td><select name="sesso" />
     
    Notice:  Use of undefined constant sesso - assumed 'sesso' in /home/www/prove php/form.php on line 35
     
    
     
    Notice:  Undefined index: sesso in /home/www/prove php/form.php on line 35
     
    <option>M</option><option>F</option></td><tr><td><input type='submit' name='submit'/></td></tr></table></form>
    Precisamente questa parte qua:

    Notice: Use of undefined constant sesso - assumed 'sesso' in /home/www/prove php/form.php on line 35

    Notice: Undefined index: sesso in /home/www/prove php/form.php on line 35


    Come posso fare per eliminarla? Ho provato a dare dei valori alla variabile sesso, ma poi mi si falsa lo script...

    Suggerimenti?

    Grazie in anticipo

  7. #7
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Prova ad usare le ' ' per gli indici degli array: $_POST['sesso']

    inoltre per verificare se è settato o no l'indice non devi usare if ($_POST[sesso] == ''), ma isset()

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    65
    EDIT: grazie mille, funziona

    A chi dovesse servire uno script simile, ho modificato in questo modo:

    Codice PHP:
    if (isset($_POST['sesso']) == '')
                                {    
                                    echo 
    "<option>{$sesso['m']}</option>";
                                    echo 
    "<option>{$sesso['f']}</option>";
                                }
                                elseif (
    $_POST[sesso] == 'M')
                                {    
                                    echo 
    "<option>{$sesso['m']}</option>";
                                    echo 
    "<option>{$sesso['f']}</option>";
                                }
                                elseif (
    $_POST[sesso] == 'F')
                                {    
                                    echo 
    "<option>{$sesso['f']}</option>";
                                    echo 
    "<option>{$sesso['m']}</option>";
                                } 





    Ps. Anche perché rilascerò i codici una volta completato lo script

  9. #9
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Certo, nessuna delle condizioni si verifica alla 1° visualizzazione (non c'è $_POST)
    Devi fare così
    if (!isset($_POST['sesso']))

    o, meglio ancora, puoi raggruppare le prime due condizioni in

    if (!isset($_POST['sesso']) OR ($_POST['sesso'] == 'M'))

    visto che l'HTML che vuoi ottenere è lo stesso

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    65
    Grazie, ho modificato come hai detto tu

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.