Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    form controllo numeri decimali

    Salve, ho un form in cui si devono inserire vari valori; in una textbox in particolare voglio che l'utente possa scrivere solo numeri con al max due soli numeri dopo la virgola (es: 11,3--1235,90--0,1). In rete ho trovato un codice molto semplice ma non riesco a modificarlo per ottenere:
    1-a fare in modo che il numero non venga inserito con più di due cifre dopo la virgola;
    2-se scrivo ...1234 me lo accetta comunque;

    codice:
    <?php
    //$numero= $_POST['numero'];
    //var_dump($_POST);
    $a = $_POST['numero'];
    $al = strlen($a );/*Strlen() conta il numero di caratteri presenti in una stringa, e ne restituisce il numero. */
    $num = '1234567890.';
    $numl  = strlen($num );
    for ($x=0;$x < $al ; $x++){
    $cont = 1;
    for ($y=0;$y < $numl ; $y++) {
    if ($a{$x} == $num{$y}){ $cont = 0; }
    }
    if ($cont==1){break; }
    
    }
    if ($cont==1){ 
     echo "carattere non valido"; }
    else { //inserisci nel db
    }
    //print $a;
    //print $al;
    //print $numl;
    //print $num;
    
    ?>
    qualcuno sa come modificarlo o se devo usare funzioni particolari?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Il tuo problema lo risolvi rapidamente con le espressioni regolari:

    Codice PHP:
    if(preg_match('/^\\d+(,\\d{1,2}){0,1}$/',$_POST['numero']=trim($_POST['numero'])){
        
    //Inserimento corretto
    }else{
        
    //inserimento non corretto

    Il pattern utilizzato richiede che sia presente almeno una cifra intera e opzionalmente una virgola seguita da uno o al massimo due cifre decimali.

    tutto il resto non passa il controllo.

    Esempi:
    codice:
     0,5   ---- ok
     1,34  ---- ok
    10     ---- ok
     4,0   ---- ok
      ,5   ---- errato
     2,345 ---- errato
     4,    ---- errato
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    lo provo subito...grazie mille.

  4. #4
    di preciso...a che punto del mio codice dovrei inserire preg_match??

  5. #5
    Allora lo script funziona perfettamente, ho un problema però: devo controllare il formato di molti form e solo se tutti sono corretti li inserisco nel db mediante query, altrimenti no e segnalo di ricontrollare i campi. Qualcuno sa dirmi come fare??

    codice:
     <?php
     var_dump($_POST);
    $id_piatto= $_POST['id_piatto'];
    $alimento1= $_POST['alimento1'];
    $quantità= $_POST['quantità'];
    $kcal= $_POST['kcal'];
    $proteine= $_POST['proteine'];
    $carboidrati=$_POST['carboidrati'];
    $grassi= $_POST['grassi'];
    $acqua=$_POST['acqua'];
    $zuccheri=$_POST['zuccheri'];
    $fibre=$_POST['fibre'];
    $amminoacidi=$_POST['amminoacidi'];
    
    $alimento2= $_POST['alimento2'];
    $quantità2= $_POST['quantità2'];
    $kcal2= $_POST['kcal2'];
    $proteine2= $_POST['proteine2'];
    $carboidrati2=$_POST['carboidrati2'];
    $grassi2= $_POST['grassi2'];
    $acqua2=$_POST['acqua2'];
    $zuccheri2=$_POST['zuccheri2'];
    $fibre2=$_POST['fibre2'];
    $amminoacidi2=$_POST['amminoacidi2'];
    
    $alimento3= $_POST['alimento3'];
    $quantità3= $_POST['quantità3'];
    $kcal3= $_POST['kcal3'];
    $proteine3= $_POST['proteine3'];
    $carboidrati3=$_POST['carboidrati3'];
    $grassi3= $_POST['grassi3'];
    $acqua3=$_POST['acqua3'];
    $zuccheri3=$_POST['zuccheri3'];
    $fibre3=$_POST['fibre3'];
    $amminoacidi3=$_POST['amminoacidi3'];
    
    $host = "localhost";
    $pass = "pw";
    $user = "r";
    $db = "pippo";
    $connessione = mysql_connect($host,$user,$pass) or die("Connessione non avvenuta!!!");
    $database = mysql_select_db($db,$connessione) or die ("Database non trovato!!!");
    
    //sezione per il controllo del formato dei numeri inseriti. Si possono inserire solo numeri separati da virgola con al max 2 cifre dopo la virgola.
    if(preg_match('/^\d+(,\d{1,2}){0,1}$/',$_POST['quantità']=trim($_POST['quantità']))){
        //Inserimento corretto
        
    }else{
        //inserimento non corretto
        
    }
    
    $sql = "INSERT INTO piatti(`id_piatto`) VALUES ('$id_piatto')";
    $result = mysql_query($sql) or die("Query non eseguita");
    
    $sql3 = " INSERT INTO valori SET id_piatto = '$id_piatto'   
    ,alimento1 ='$alimento1',  quantità= '$quantità', kcal= '$kcal', proteine ='$proteine', carboidrati ='$carboidrati', grassi ='$grassi', acqua ='$acqua', zuccheri = '$zuccheri', fibre = '$fibre', amminoacidi = '$amminoacidi'    
    ,alimento2 ='$alimento2', quantità2= '$quantità2',kcal2= '$kcal2', proteine2 ='$proteine2', carboidrati2 ='$carboidrati2', grassi2 ='$grassi2', acqua2 ='$acqua2', zuccheri2 = '$zuccheri2', fibre2 = '$fibre2', amminoacidi2 = '$amminoacidi2'     
    ,alimento3 ='$alimento3', quantità3= '$quantità3',kcal3= '$kcal3', proteine3 ='$proteine3', carboidrati3 ='$carboidrati3', grassi3 ='$grassi3', acqua3 ='$acqua3', zuccheri3 = '$zuccheri3', fibre3 = '$fibre3', amminoacidi3 = '$amminoacidi3' ";
    $result3 = mysql_query($sql3) or die("Query non eseguita2");
    ?>
    </html>
    voglio cioè controllare quantità, grassi, kcal...e solo alla fine, se è tutto ok, inserirli nel db. Ho provato con and ma non funziona.
    Grazie a tutti

  6. #6
    Ma perchè per lavorare con i numeri usate funzioni che servono per le stringhe?
    strlen(), preg_match()

    Ti ricordo, inoltre che la "virgola" in php si fa con il "punto".

    Infine, ti consiglio di lasciare libero l'utente di inserire un qualsiasi numero, anche con la virgola, poi in back sarai tu ad arrotondarlo alla seconda cifra decimale.

    ERGO
    Codice PHP:
    <?php
    // prendiamo il numero
    $numero = ( isset($_POST["numero"]) ) ? $_POST['numero'] : '';
    // sostituiamo eventualmente la virgola con il punto
    $numero str_replace(',''.'$numero);
    // verifichiamo che sia un numero e se sì lo arrotondiamo alla seconda cifra decimale
    $numero = ( is_numeric($numero) ) ? round($numero2) : '';

    if(
    $numero==''){
        exit(
    'non è un numero');
        }
    else{
        echo 
    'Il numero è ' $numero;
        }
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  7. #7
    ok è perfetto!! Una domanda: per controllare più numeri?? Come devo regolarmi per gli if?
    codice:
    <?php
    $a = $_POST['numero'];
    $b = $_POST['numero2'];
    $c = $_POST['numero3'];
    // prendiamo il numero
    $numero = ( isset($_POST["numero"]) ) ? $_POST['numero'] : '';
    $numero2 = ( isset($_POST["numero2"]) ) ? $_POST['numero2'] : '';
    // sostituiamo eventualmente la virgola con il punto
    $numero = str_replace(',', '.', $numero);
    $numero2 = str_replace(',', '.', $numero2);
    // verifichiamo che sia un numero e se sì lo arrotondiamo alla seconda cifra decimale
    $numero = ( is_numeric($numero) ) ? round($numero, 2) : '';
    $numero2 = ( is_numeric($numero2) ) ? round($numero2, 2) : '';
    
    if($numero==''){
        exit('non è un numero');
        }
    else{
        echo "Il numero:$numero";
        } 
    //print $a;
    //print $b;
    //print $c;
    ?>

  8. #8
    Codice PHP:
    <?php 
    function get_numero_filtrato($numero){
        
    $numero str_replace(',''.'$numero);
        
    $numero = ( is_numeric($numero) ) ? round($numero2) : ''
        return 
    $numero;
        }
        
    // prendiamo il numero 
    $numero = ( isset($_POST["numero"]) ) ? get_numero_filtrato($_POST['numero']) : '';
    $numero2 = ( isset($_POST["numero2"]) ) ? get_numero_filtrato($_POST['numero2']) : '';
    $numero3 = ( isset($_POST["numero3"]) ) ? get_numero_filtrato($_POST['numero3']) : '';

    if(
    $numero=='' OR $numero2=='' OR $numero2==''){ 
        exit(
    'Uno di questi tre nn è un numero'); 
        } 
        
    echo 
    $numero ' - ' $numero2 ' - ' $numero3;
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  9. #9
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Originariamente inviato da oly1982
    Ma perchè per lavorare con i numeri usate funzioni che servono per le stringhe?
    strlen(), preg_match()
    Opinabile, nel senso che l'utente ha diritto di inserire ciò che gli pare... anche valori errati, ma ciò non dà diritto all'applicativo di modificare tali valori e fare supposizioni. Di norma l'inserimento si verifica lato client con JS, ma data la possibilità che lo stesso non sia in esecuzione, può essere altrettanto utile fare delle verifiche lato server con delle maschere che sfruttano espressioni regolari.

    infine fossi in te cercherei di approfondire i fondamenti di PHP

    Il tuo codice
    Codice PHP:
    <?php 
    function get_numero_filtrato($numero){
        
    $numero str_replace(',''.'$numero);
        
    $numero = ( is_numeric($numero) ) ? round($numero2) : ''
        return 
    $numero;
        }
        
    // prendiamo il numero 
    $numero = ( isset($_POST["numero"]) ) ? get_numero_filtrato($_POST['numero']) : '';
    $numero2 = ( isset($_POST["numero2"]) ) ? get_numero_filtrato($_POST['numero2']) : '';
    $numero3 = ( isset($_POST["numero3"]) ) ? get_numero_filtrato($_POST['numero3']) : '';

    if(
    $numero=='' OR $numero2=='' OR $numero2==''){ 
        exit(
    'Uno di questi tre nn è un numero'); 
        } 
        
    echo 
    $numero ' - ' $numero2 ' - ' $numero3;
    contiene un bug da paura:
    se l'utente inserisce 0 il tuo codice non lo accetta. Questo perchè 0 è equivalente alla stringa vuota che con tanta disinvoltura utilizzi. Se prorpio vuoi fare così allora nel confronto devi utilizzare l'operatore === e non == per poter distinguere tra la stringa vuota e lo 0.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  10. #10
    Io rimango della mia opinione sulla non necessità di scomodare le regex.

    La questione js è giusta ma nn ci azzecca nulla il problema qui presentato (il tuo appunto è fuoriluogo). In tal caso avrebbe postato in una sezione diversa del forum, e cmq era un di più che non eliminava la necessità di un controllo lato server.

    Il mio codice è scritto in maniera sbrigativa.

    Cmq basta modificatre i valori di default dei due operatori ternari con null e in controllo all'interno della condizione l'avrei fatta con is_null().
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.