Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    24

    controllo select. cicli automatici

    puo' avere un senso effettuare il controllo sul tipo di dati e stringhe ricevuti da una select oppure e' un'operazione inutile visto che gli stessi sono di fatto obbligati? ovviamente escluso dalla domanda il controllo del campo vuoto.

    Altro argomento, avendo una serie di if del tipo:

    if ($num=0) { $var=10;}
    elseif ($num=1) { $var=11;}
    elseif ($num=2) { $var=12;}
    ecc....
    si riesce con un ciclo ad automatizzare la cosa senza dover specificare manualmente tutte le condizioni?

    e lo stesso per:

    if ($num=0) { $var="pluto";}
    elseif ($num=1) { $var="pippo";}
    elseif ($num=2) { $var="paperino";}
    ecc....
    in tal caso i valori di $var immagino saranno contenuti in un array

  2. #2
    > in tal caso i valori di $var immagino saranno contenuti in un array

    Beh, fai un array con chiavi = a valore passato.

    $var[0] = 'pluto';
    $var[1] = 'pippo';
    $var[2] = 'paperino';

    Comunque, quello che ti torna una select è SEMPRE una STRINGA, che contiene il value della option selezionata, quindi sei sicuro del tipo di dati passati.
    Se hai bisogno di un numero, fai:

    intVal($_POST['mySelect']);

    Ed ottieni il valore numerico passato (N.B. intVal torna il numero da sinistra verso destra, cioè se gli passi "125px" intVal ritorna 125. Metnre se gli passi "D123" ritorna 0)

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    24
    grazie per l'utile funzione

    quello che ti torna una select è SEMPRE una STRINGA
    questo se la select comprende numeri associati ad altri caratteri come nell'esempio o sempre...
    cioe', con una option che contiene solo numeri 10,20,30 ecc. passando uno di questi ed effettuando un inutile controllo sul tipo di campo con is numeric del tipo...se non e' un numero non va bene e mi mandi il msg di errore...non arriva nessun errore, poi utilizzo il valore della variabile passata per calcoli con altre variabili numeriche e tutto avviene senza intoppi...quindi in teoria lo prende come numero, oppure non ho capito un'H !

  4. #4
    è il casting automatico: in PHP se tu tratti una stringa come un numero, per prima cosa l'interprete cerca di trasformarla in un numero, se fallisce torna un errore, ma se il numero è valido la trasforma in esso.

    Non sono sicuro, che questo valga per TUTTE le versioni di PHP, io personalmente, preferisco sempre trasformare le stringhe che devono essere numeri in numeri (con intval o floatval o il settype).

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    24
    ok ora capito, grazie mille! la mia domanda iniziale era pero' finalizzata ad un dubbio...esiste modo di passare una variabile post bypassando il value della select ed utilizzandone pero' il nome campo (azzeccato magari anche per immaginazione)? senza controllo sul dato in tal caso il valore passato avrebbe strada libera, cmq forse sto fantasticando o vaneggiando!

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Uhm vborrei precisare un paio di cose.

    La prima:
    e' vero che tutti i valori passati sono sempre visti come stringhe e php fornisce funzioni per effettuare typecasting.

    io cmq consiglio sempre per gestire bene l'errore di fare una cosa del genere

    $val = is_numeric($val) ? intVal($_POST['mySelect']) : "" ;

    if( $val!="" )
    /*do stuff*/

    Seconda, si e' vero che le selct passano sempre i valori che ha la option selezionata.
    Ma cmq il controllino va sempre fatto per evitare qlke cross side script. Infatti nessuno vieta di invocare remotamente il tuo script da server o pc esterno costruendo una form cosi' :

    <form name="my_form" action="http://[tuosito].com/[tuo script].php" action="POST">
    ... campi con gli stessi nomi solo testuali quandi pigliano il value che voglio io
    </form>

    Stateci attenti.

  7. #7
    proprio per questo motivo io dico che le stringhe che DEVONO essere numeri, BISOGNA trasformarli in numeri:

    la mia select mySelect ha solo numeri come value nelle option:

    $mySelect = intval($_POST['mySelect']);

    Se non è un numero mi torna 0 e me lo smazzo come tale.

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Si vero ma cmq se non e' un num ti ritorna 0 e la funz intVal fa la stessa cosa che fanno le funzioni floor/ceil etc .

    Con il controllo is_numeric invece controlliamo pure i valori float, valori che funzioni come intval floor ceil troncano l'eventuale parte decimale.
    Il controllo is_numeric ti da maggior flessibilita' anche perche' a volte valori ==0 li hai nelle select e un possibile attacco cosi' verrebbe invece interpretato come valore=0.

    Cmq se nn ti interessa tenere traccia di tale cosa e' una sol che ho usato pure io per fare in fretta. Solo che ora preferisco cmq utilizzare certi controlli per motivi di sicurezza reisco a tenere meglio traccia di possibili attacchi etc anche perche' se poi hai necessita' di loggare quello che succ il controllo is_numeric e' piu' flessibile.

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.