Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: problema con is_int

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72

    problema con is_int

    ciao a tutti, ho un problema che non riesco a risolvere.

    in un form ho inserito l'apposita area per indicare un telefono e nel codice php ho inserito i controlli di validazione.



    form:

    Telefono <input name="telefono" type="text" id="telefono" value="" onfocus="if(this.value=='telefono') this.value='';" >



    controlli:

    $telefono = $_POST['telefono'];
    $telefono = (int)$telefono;


    controllo che il campo non sia vuoto
    if($telefono == ""){echo"Campo telefono non compilato!";exit(); }

    controllo che il campo sia compreso tra 4 caretteri e 15 caratteri
    if(strlen($telefono) < 4 || strlen($telefono) > 15 )
    {echo('Inserisci un numero telefonico valido');exit(); }

    controllo che sia un numero intero
    if(!is_int($telefono)){echo "Campo telefono non compilato correttamente, inserisci un numero telefonico valido!";exit(); }


    se il campo del form � vuoto il primo if viene verificato e mi compare la relativa scritta
    se il campo � riempito da meno di 4 caratteri il secondo if viene verificato e mi compare la relativa scritta

    ora il problema:
    se il campo � riempito da solo lettere mi compare la scritta "Campo telefono non compilato!" del primo if, se invece � un numero misto a lettere per esempio 123456tt non si verifica il terzo if e passa ai successivi controlli.

    qualcuno riesce ad aiutarmi?

    grazie mille in anticipo.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Fossi in te userei una regexp. Un int non puo' contenere un numero maggiore di 2 miliardi e qualcosa. Per esempio, se hai numeri stranieri con prefisso allora non andrà.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Fossi in te userei una regexp. Un int non puo' contenere un numero maggiore di 2 miliardi e qualcosa. Per esempio, se hai numeri stranieri con prefisso allora non andr�.
    Ciao badaze, grazie per la risposta.

    In realt� il mio script non funziona anche se inserisco un numero tipo 20000, quindi inferiori alla capacit� di int.

    Oggi pomeriggio provo ad usare ctype_alnum per far si che restituisca errore nel caso in cui la stringa sia alfanumerica.

    Grazie del consiglio. Ciao

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Giusto un paio di cose:

    1. In PHP (0 == '') è true. Quindi se fai
    Codice PHP:
        $telefono = (int)'ab123cdf'
    $telefono sarà convertito in 0, e come ti ho detto è anche uguale a '' (convertito, nel confronto, anche lui come 0); quindi soddisfa il primo if.

    2.
    Codice PHP:
       $telefono = (int)'123abc'
    quando viene convertito in int, vengono presi solo gli interi. Quindi $telefono sarà uguale a 123.
    Il che fa fallire il terzo if (123 è intero)

    Come dice Badaze, ti conviene fare una regexp, anche perchè con gli interi ti perderesti eventuali 0 prefissi
    Ultima modifica di boots; 01-09-2016 a 10:50

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    e con una regex potresti anche verificare che siano rispettate certe regole di formattazione dei numeri telefonici

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da boots Visualizza il messaggio
    Giusto un paio di cose:

    1. In PHP (0 == '') è true. Quindi se fai
    Codice PHP:
        $telefono = (int)'ab123cdf'
    $telefono sarà convertito in 0, e come ti ho detto è anche uguale a '' (convertito, nel confronto, anche lui come 0); quindi soddisfa il primo if.

    2.
    Codice PHP:
       $telefono = (int)'123abc'
    quando viene convertito in int, vengono presi solo gli interi. Quindi $telefono sarà uguale a 123.
    Il che fa fallire il terzo if (123 è intero)

    Come dice Badaze, ti conviene fare una regexp, anche perchè con gli interi ti perderesti eventuali 0 prefissi
    Ciao Boots,

    Quindi mi conviene togliere $telefono = (int)$telefono; e inserire una condizione che usi una regex?

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Direi di si...come ti hanno suggerito è più flessibile. Puoi anche permettere la presenza del '+' daventi al numero

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da boots Visualizza il messaggio
    Direi di si...come ti hanno suggerito è più flessibile. Puoi anche permettere la presenza del '+' daventi al numero
    Ok, grazie mille Boots e grazie a tutti gli altri. Oggi pomeriggio provo a fare le modifiche e vi dirò.

    Buon pomeriggio

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da boots Visualizza il messaggio
    Giusto un paio di cose:

    1. In PHP (0 == '') è true. Quindi se fai
    Codice PHP:
        $telefono = (int)'ab123cdf'
    $telefono sarà convertito in 0, e come ti ho detto è anche uguale a '' (convertito, nel confronto, anche lui come 0); quindi soddisfa il primo if.

    2.
    Codice PHP:
       $telefono = (int)'123abc'
    quando viene convertito in int, vengono presi solo gli interi. Quindi $telefono sarà uguale a 123.
    Il che fa fallire il terzo if (123 è intero)

    Come dice Badaze, ti conviene fare una regexp, anche perchè con gli interi ti perderesti eventuali 0 prefissi

    ragazzi grazie ancora, lo script con regex funziona!
    lascio script per futura memoria, visto che internet è anche condivisione delle idee e delle problematiche


    // Controllo telefono

    $telefono = $_POST['telefono'];

    if($telefono == ""){echo"Campo telefono non compilato!";exit(); } // se il campo è vuoto

    if(strlen($telefono) < 4 || strlen($telefono) > 15 )
    {echo('Inserisci un numero telefonico valido');exit(); } // se il campo è inferiore a 4 caratteri o superiore a 15

    if(!ctype_digit($telefono)){echo "Campo telefono non compilato correttamente, inserisci un numero telefonico valido!";exit(); } // se il campo non è solo numerico

  10. #10
    scusa ma dove sarebbe la regex???

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.