Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    funzione per controllare valori dati in input

    Ho craeato una funzione che controlla i dati dati in input in un form.. se il campo (in questo caso sono 3)contiene caratteri "dannosi" mi manda nella schermata di login...

    Ragazzi potete dirmi se questa funzione andrebbe bene per controllare alcuni caratteri o(ho utilizzato un or) i campi username password ed email sono vuoti

    Ecco la funzione:

    Codice PHP:
    <?

    function control_char() {
        
        if( 
    eregi('[\*<>&%"#\[]'$_POST['username'])) || ( $_POST['username'] ='' ) {
            
    header ("Location: login_failed.php?error=".$_GET['user']);
        }
        
        if ( 
    eregi('[\*<>&%"#\[]'$_POST['password'])) || ( $_POST['password'] ='' ) {
            
    header ("Location: login_failed.php?error=".$_GET['pass']);
        } 
        
        if ( !
    eregi('([a-zA-Z0-9_\.-])+@([[a-zA-Z0-9_\.-])+.([a-zA-Z0-9_\.-])'$_POST['email'])) || ( $_POST['email'] ='' ) {
            
    header ("Location: login_failed.php?error=".$_GET['mail']);
        }    
    }

    ?>
    Ovviamente devo far si che se si manifesta un errore e vengo indirizzato alla pagina "login_failed.php" il resto del codice non deve essere eseguito.. magari al posto dell || mi consigliate or die?

    Grazie anticipatamente
    Con i sogni possiamo conoscere il futuro...

  2. #2
    :master: Non mi sembra molto performante, in questo modo.

    Io farei così:

    Codice PHP:
    function control_char($str) {
        return (bool) 
    eregi('[*<>&%"#[]'$str);
    }
    function 
    control_email($str) {
        return (bool) 
    eregi('([a-zA-Z0-9_.-])+@([[a-zA-Z0-9_.-])+.([a-zA-Z0-9_.-])'$str);
    }

    $username $_POST['username'];
    $password $_POST['password'];
    $email $_POST['email'];

    if(!
    control_char($username)) {
        
    header ("Location: login_failed.php");
        exit;
    }
    if(!
    control_char($password)) {
        
    header ("Location: login_failed.php");
        exit;
    }
    if(!
    control_email($email)) {
        
    header ("Location: login_failed.php");
        exit;
    }
    // qui metti il resto dello script 
    Spero ti sia chiaro come utilizzare meglio le funzioni.
    Ad ogni modo, sappi che non ho ricontrollato le espressioni regolari che hai scritto e le ho semplicemente copiate.
    Spero funzioni lo script, semmai posta di nuovo.

    Per fornire dei messaggi di errore prima del redirect puoi usare JavaScript, visto che se mandi in echo qualcosa prima del tag header ti ritorna errore.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Visto posso dirti che le espressioni regolari funzionano correttamente.. però non riesco a capire cosa hai fatto all infizio le 2 funzioni.. e poi successivamente fai un if per ogni campo es:

    if(!control_char($username)) {
    header ("Location: login_failed.php");
    exit;
    }

    Perchè metti !negato..C'è se io inserissi un carattere del tipo % deve ritronare indietro.e ovviamente bloccare lo script.. però può capitare anche che si manifestano piu errori .. in questo caso hai messo exit() nell if che controlla l'username... però se si manifesta anche per l'email?
    e poi se il campo p vuoto? io avevo messo anche un contrllo nel momento in cui il campo fosse vuoto...
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Perchè metti !negato..
    Probabilmente l'ora a cui ho scritto il post mi ha fatto da tara!
    Io di solito uso preg_match() per questo tipo di riconoscimenti e funziona al contrario: alla prima occorrenza, la funzione torna FALSE.
    Ho scritto il codice al volo e non l'ho testato.

    però può capitare anche che si manifestano piu errori .. in questo caso hai messo exit() nell if che controlla l'username... però se si manifesta anche per l'email? e poi se il campo p vuoto?
    Si, però te lanciavi l'header con una sintassi sbagliata per "trasportarci" l'errore: il $_GET come lo avevi messo te avrebbe tornato una stringa vuota.
    Avevo corretto per come reputo sia più logico e sintatticamente corretto fare.
    Peraltro, anche nel tuo codice, al primo errore viene lanciato il redirect, bloccando di fatto il resto dello script.... ed è anche una cosa logica: che senso ha continuare nei controlli di tutti gli input se tanto uno presenta dei caratteri che te non vuoi???

    e poi se il campo p vuoto? io avevo messo anche un contrllo nel momento in cui il campo fosse vuoto...
    Il controllo come lo fai nel tuo primo script non ha troppo senso ed ora ti spiego perché.
    Se un utente, preme 1, 2 o più volte la barra spaziatrice sappi che il campo non sarà mai vuoto. In poche parole: lo spazio è un carattere particolare che non viene stampato a video, ma che è sempre e comunque lì.

    Dovresti aggiungere trim() nella funzione control_char() e poi controllare nell'IF se la variabile è valorizzata con empty().
    Ti riscrivo il codice.

    Codice PHP:
    function control_char($str) { 
        
    trim($str);
        return (bool) 
    eregi('[*<>&%"#[]'$str); 
    }

    /* 
       RESTO DEL CODICE
    */

    if(control_char($username) || empty(control_char($username))) { 
        
    header ("Location: login_failed.php"); 
        exit; 
    }
    /* 
       STESSO CONTROLLO PER LA PASSWORD
    */ 
    Avrai notato che non ho aggiunto il trim() all'altra funzione, perché tanto se non viene rispettata la sintassi di un indirizzo email torna comunque errore.

    Spero ti sia più chiaro adesso.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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.