Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Namespace e filtri ( filter callback )

    Buongiorno, ho un problema in una pagina di login per la verifica dei dati in ingresso uso i filtri, normalmente tutto bene ma quando tramite il callback richiamo una mia funzione che si trova in un altro file.
    Premetto che: senza attivare il namespace tutto funziona, anche con i namespace nei due file le funzioni richiamate normalmente vanno, solo nel richiamo dalla callback non va restituisce il valore, tornando null.
    Quello che è assurdo è il fatto che non c'è nessun errore secondo il PHP, se no sarebbe facile risolvere.
    Voi vi siete mai trovati in questi problematiche? Come li avete risolti se lo avete fatto.

  2. #2
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Un po' di codice?

    Il file remoto dove risiedono le funzioni richiamate: ( genericFunction.php )
    Codice PHP:
    declare( encoding 'UTF-8' );
    namespace 
    bin\genericFunction;

    .....
    /** * *    Verifica un indirizzo email*/
    function verificaEmail$valore ) {
        
    $sanitized filter_var$valoreFILTER_SANITIZE_EMAIL );
        if ( 
    filter_var$sanitizedFILTER_VALIDATE_EMAIL )) {
            return 
    $sanitized;    
        }
    return 
    false;
    }    
    //    verificaEmail() 
    Il file che lo richiama col pezzo di codice del filtro di richiamo: ( login.php )
    Codice PHP:
    declare( encoding 'UTF-8' );
    namespace 
    root;
    use 
    bin\genericFunction;
    include_once 
    __DIR__ 'bin/genericFunction.php';

    .....

    try {
                
    array_filter$_POST'trimValue' );
                
    $options = array(
                    
    'emailLogin'    =>    array(
                            
    'name'        =>    'emailLogin',
                            
    'filter'    => FILTER_CALLBACK,
                            
    'options'    => 'genericFunction\verificaEmail'
                        
    ),
                );
                
    $input filter_input_arrayINPUT_POST$options );
    ..... 
    $input risponde NULL invece che dare l'indirizzo email ( ovviamente ben composto ).
    Inutile dire che togliendo tutti i riferimenti ai namespace il tutto funziona regolarmente.

  3. #3
    non ho mai richiamato una funzione definita in un namespace... cmq ad occhio, in options, o metti "bin\genericFunction\verificaEmail" o solo "verificaEmail" visto che l'hai già caricata col name space. se metti "genericFunction\verficaemail" lui va a cercare in realtà "root\genericFunction\verificaEmail" ( oddio, forse sbaglio, oppure cerca "genericFunction\verificaEmail" e non quella definita in bin)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Anche io la pensavo come te, ma usando use ho scoperto che si mette solo l'ultima parte del ramo dei namespace, ad ogni buon conto le ho provate tutte e non va nessuna delle prove.
    Quello che mi lascia perplesso è che non mi da nessun errore, se ci fosse un errore sui namespace mi dovrebbe dare l'errore di non trovare qualche cosa, ma qui nulla.
    Il fatto strano è che prima che inserissi i namespace il tutto funzionava, quindi...

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    E' strano ma non mi ero accorto che prima richiamavo un'altra funzione generale che passava ad un altra funzione in genericFunction l'intero array $_POST per un trimming generale e funzionava, siccome non mi ero accorto non ci avevo messo l'albero del namespace.
    Comunque per tagliare la testa al povero toro ho portato la verificaEmail() nel file login.php ho tolto il riferimento al namespace nella chiamata alla callback e non è cambiato nulla.
    Ho anche fatta una veifica richiamando il var_dump() dell'intero array $_POST e l'indirizzo email c'è, viene passato, è proprio quella funzione che viene saltata e per me non ha senso.

    PS e ora sono sicuro che sono proprio i riferimenti al namespace a creare problemi, infatti li ho tolti e il sistema ha funzionato di nuovo.
    Non ci capisco nulla
    Ultima modifica di Marcolino's; 02-11-2015 a 09:37

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Tanto per essere chiari:
    login.php
    Codice PHP:
    try {
                
    array_filter$_POST'trimValue');
                
    $options = array(
                    
    'emailLogin' => array(
                            
    'name'        => 'emailLogin',
                            
    'filter'    => FILTER_CALLBACK,
                            
    'options'    => 'genericFunction\verificaEmail'
                        
    ),
                    
    'k' => FILTER_SANITIZE_STRING,
                    
    'ricordaLogin' => FILTER_SANITIZE_STRING
                
    );
                
    $input filter_var_array$_POST$options );
    ... 
    Questo il codice completo per il filtraggio dell'invio.
    Dove:
    • array_filter( $_POST, 'trimValue'); è un funzione che fa il trimming dell'array $_POST e toglie spazi vuoti all'inizio e alla fine di ogni valore passato. Si trova su un altro file ( genericFunction.php ) come pure verificaEmail() e funziona sia con il namespace che senza.
    • verificaEmail() è una funzione ( postata qualche messaggio più su ) che pure si trova in genericFunction.php ed è richiamata come callback dal filtro e non funziona!
    • k e ricordaLogin sono due variabili passate direttamente ( senza chiamate remote ) e passano i valori come richiesto.

    Morale? Credo che le CALLBACK nei filtri hanno problemi grossi con i namespace non trovo una spiegazione al riguardo nemmeno nella rete.

  7. #7
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Morale non avevo capito nulla
    Ok, tutto è bene quel che finisce bene dopotutto e tutto serve a comprendere le dinamiche del PHP
    FILTER_CALLBACK funziona egregiamente coi namespace, tutto quel casino che ho creato era dovuto a un include, o meglio, all'uso sbagliato di __DIR__ che non riporta il separatore di directory alla fine della stringa, morale: non includevo affatto il file genericFunction.php e nessuna delle sue funzioni.
    Quando dicevo che funzionavano correttamente tutte meno che quella richiamata tramite callback mi sbagliavo, nel senso che per provare meglio le avevo replicate e quindi ovviamente funzionavano, appena le ho tolte ho avuto indietro l'errore di funzione non trovata.

    Va be....

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.