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

Discussione: [function] infernale

  1. #1

    [function] infernale

    ciao a tutti,
    il mio sistema di registrazione si articola secondo 3 moduli :
    config.php
    reg.lib.php
    register.php

    se non inserisco il campo sesso la registrazione dovrebbe interrompersi e dire all' utente che :

    Sesso : Il campo non può essere lasciato vuoto

    ed invece non funziona mentre per tutti gli altri campi il controllo regge.

    in particolare sesso è type="radio" mentre gli altri sono tutti type="text"

    a seguire estratto da : "reg.lib.php"


    ...la funzione reg_register accetta come parametro un array associativo contenete i dati dell'utente ....

    Codice PHP:
    function reg_register(&$data)
                         {
                     
                         
    //.... creo una password utente in md5 

                         //... altro codice

                         //... ancora altro codice

    /*
    La funzione reg_check_data viene utilizzata per effettuare un controllo sui dati inseriti dall'utente; per ogni dato presente
    all'interno dell'array passato come argomento, questa funzione richiama una callback associata precedentemente
    all'interno del file config.php, la quale si occuperà di validare o meno il dato; nel caso in cui siano stati riscontrati
    errori, questa funzione li restituirà al blocco di codice chiamante, in modo che questi possa gestirli correttamente.
    */
              
    function reg_check_data(&$data)
            {
        global 
    $_CONFIG;
        
        
    $errors = array();
        
    # esempio $data è nome mentre $field_name è marco
        
    foreach($data as $field_name => $value)
               {
               
    $func $_CONFIG['check_table'][$field_name];
             if(!
    is_null($func)) 
               {
               
    $ret $func($value); # es. check_global(marco)
               
    if($ret !== true)
               
    $errors[] = array($field_name$ret);
               }
                }
        
             return 
    count($errors) > $errors true;
             }

                               
    /*... inserisco nel db i dati utente 
                                     che arrivano POST dal form di
                                     registrazione */


    mysql_query ("INSERT INTO ".$_CONFIG['table_utenti']."...etc etc
    VALUES(..etc '"
    .$id."',...'".$data['sesso']['0']."')");

                           
    /*... eseguiti i controlli invio la mail con
                                 username e password e link di conferma  
                                 attivazione all' utente */ 

                          //... altro codice
                             
                          // FINE DELLA FUNZIONE !!! 
    a seguire estratto da : "config.php"

    Il parametro check_table è invece un array associativo strutturato in modo da associare ad ogni chiave, rappresentante
    un campo del form di registrazione, una funzione che ne controlli il valore. Questa funzione di callback accetta come
    parametro il valore del campo, e restituisce true in caso di successo, oppure una stringa che rappresenta il valore
    testuale dell'errore. In caso un valore del form non sia presente come chiave dell'array, il valore viene interpretato
    automaticamente come corretto.
    Le funzioni check_* sono quelle di callback.

    Codice PHP:
    $_CONFIG['check_table'] = array(
        
    "nome" => "check_global",
        
    "cognome" => "check_global",
        
    "indirizzo" => "check_global",
        
    "occupazione" => "check_global",
        
    "username" => "check_username",
        
    "email" => "check_email",
        
    "codfisc" => "check_global",
        
    "sesso" => "check_global" // QUI HO PROBLEMI
        
    );

    /* QUI HO PROBLEMI !
    per sesso : $sesso['0']
    m <input name="sesso[]" value ="m" type="radio">
    f <input name="sesso[]" value ="f" type="radio">
    e serve estrarre il dato... e qui mi incasino ...

    mentre per le altre è semplice : $nome
    <input type="text" name="nome">
    */

    define('REG_ERRORS'107);
    define('REG_SUCCESS'108);
    define('REG_FAILED'109);

    // RICHIAMATA DA : reg_check_data(&$data) in reg.lib.php

    function check_global($value
    {
        global 
    $_CONFIG;
        
        
    $value trim($value);
        if(
    $value == "")
            return 
    "Il campo non può essere lasciato vuoto";
        
        return 
    true;

    e per finire ; a seguire estratto da : "register.php"
    che è la pagina in cui si segnala lo stato positivo o meno del processo di registazione

    Codice PHP:
    <?php
        $sesso 
    $sesso[0];
        global 
    $sesso;

            include_once(
    "../XXX/config.php");
            include_once(
    "../XXX/reg.lib.php");
            include_once(
    "../XXX/codfisc.lib.php");

        
        


    if(isset(
    $_POST['action']) and $_POST['action'] == 'Invia')
        {
        
    $ret reg_check_data($_POST) ; 
        
    $status = ($ret === true) ? reg_register($_POST):REG_ERRORS;
        
    switch(
    $status)
    {
    case 
    REG_ERRORS:

    ?>
    <span class="style1">Sono stati rilevati i seguenti errori:</span>
    <?php
                
    foreach($ret as $error)
    printf("[b]%s[/b]: %s
    "
    $error[0], $error[1]);

    ?>

    Premere "indietro" per modificare i dati 
    <?php

            
    break;
            case 
    REG_FAILED:
            echo 
    "Registrazione Fallita a causa di un errore interno.";
            break;
            case 
    REG_SUCCESS:
                    echo 
    "Registrazione avvenuta con successo.

    Vi è stata inviata una email contente le istruzioni per confermare la registrazione."
    ;
            break;
            }
        }
    ?>
    credo che :
    $ret = reg_check_data($_POST) ;
    $status = ($ret === true) ? reg_register($_POST):REG_ERRORS;

    il problema sia proprio in quel $_POST ... il valore di sesso è un ' array è non una semplice variabile come gli altri tag input del form.

    anche se io per richiamarla uso :

    $sesso = $sesso[0];
    global $sesso;

    insomma come faccio a modificare la funzione reg_check_data ?!?
    è settimane che mi perdo se qualcuno potesse fare un pò di luce ne sarei davvero grato io ormai mi sono un pò demotivato...

    grazie
    carmine
    ... viva la gnocca !

  2. #2
    Perche' devi usare un array? usa una variabile normalissima. Tanto, a parte gli incerti, la risposta M/F sara' mutuamente esclusiva avendo il radio lo stesso nome. Potresti anche forzare un cheched su uno dei due valori.

    m <input name="sesso" value ="m" type="radio">
    f <input name="sesso" value ="f" type="radio">


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    non ti seguo... potresti essere più chiaro ?
    ... viva la gnocca !

  4. #4
    [supersaibal]Originariamente inviato da carmineDev
    non ti seguo... potresti essere più chiaro ? [/supersaibal]
    /* QUI HO PROBLEMI !
    per sesso : $sesso['0']
    m <input name="sesso[]" value ="m" type="radio">
    f <input name="sesso[]" value ="f" type="radio">
    e serve estrarre il dato... e qui mi incasino ...

    mentre per le altre è semplice : $nome
    <input type="text" name="nome">
    */

    m <input name="sesso" value ="m" type="radio">
    f <input name="sesso" value ="f" type="radio">

    usa una variabile al posto di un array.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    che animale che sono questo capita quando si compra il Testo errato di php , le lacune ti rimangono dietro continuamente !

    comunque function reg_check_data(&$data) la devo riscreve ex-novo insomma deve accettare anche valori del tipo array[A][B] ....

    tu sei disponibile in caso a starmi dietro se zoppico ?
    ... viva la gnocca !

  6. #6

    Discussione Terminata

    Codice PHP:
    <?php 
    error_reporting
    (E_ALL);

    // funzioni di CALL_BACK
    function check_global($test)
            {
            global 
    $_CONFIG;
            if(
    $test == "")
            return 
    "Il campo non può essere lasciato vuoto";
            return 
    true;
            }

    function 
    check_sex($value)
            {
            global 
    $_CONFIG;
            if(
    $value == "")
            return 
    "Il campo non può essere lasciato vuoto";
            return 
    true;
            }

    ?>

    <?php 
    $errors 
    = array();

    $data[nome] = "" // <input type="text" ...
    $data2[sesso][0] = "" // <input type="checkbox" ...

    $_CONFIG['check_table'] = array(
                                    
    "nome" => "check_global",
                                    
    "sesso" => "check_sex"
                                    
    );

    foreach(
    $data2 as $field_name => $value)
            {
             
    /*
             $_CONFIG[check_table] > array
             $_CONFIG[check_table][$field_name] > array[nome]
             $func > check_global  
             $value > carmine
             $ret > check_global(carmine)
             
             echo "0 : $field_name
    "; 
             echo "1 : $_CONFIG[check_table]
    ";
             echo "2 : $_CONFIG[check_table][$field_name]
    ";
             echo "3 : $func
    ";
             echo "4 : $value
    ";
             echo "5 : $ret
    ";
             */
             
            
    $func $_CONFIG['check_table'][$field_name]; 
            if(!
    is_null($func))
                {
                foreach (
    $value as $value2)
                    
    //{
                    //echo "6 : $value[0]";
                    //}
                
    $test $value[0];
                
    $ret $func($test); 
                
    //echo "$ret";
                    /* ... qui viene richiamata la call_back !
                    function check_global($value)
                            {
                            global $_CONFIG;
                            if($value == "")
                            return "Il campo non può essere lasciato vuoto";
                            return true;
                            }
                    */
                
    if($ret !== true)
                
    // $ret > Il campo non può essere lasciato vuoto
                
    $errors[] = array($field_name$ret); 
                }
            }


    foreach(
    $data as $field_name => $value)
            {
             
    /*
             $_CONFIG[check_table] > array
             $_CONFIG[check_table][$field_name] > array[nome]
             $func > check_global  
             $value > carmine
             $ret > check_global(carmine)
             
             echo "0 : $field_name
    "; 
             echo "1 : $_CONFIG[check_table]
    ";
             echo "2 : $_CONFIG[check_table][$field_name]
    ";
             echo "3 : $func
    ";
             echo "4 : $value
    ";
             echo "5 : $ret
    ";
             */
             
            
    $func $_CONFIG['check_table'][$field_name]; 
            if(!
    is_null($func))
                {
                
    $ret $func($value); 
                
    //echo "$ret";
                    /*
                    function check_global($value)
                            {
                            global $_CONFIG;
                            if($value == "")
                            return "Il campo non può essere lasciato vuoto";
                            return true;
                            }
                    */
                
    if($ret !== true)
                
    // $ret > Il campo non può essere lasciato vuoto
                
    $errors[] = array($field_name$ret); 
                }
            }


    if (
    count($errors) > 0
        {
        foreach(
    $errors as $error)
            
    printf("[b]%s[/b]: %s
    "
    $error[0], $error[1]);
        } 
    else 
        {
        echo 
    "
    I campi sono stati inseriti correttamente !"
    ;
        }
    ?>
    Cavolo PHP deve fare quello che dico io , PUNTO !
    Ci sono riuscito mi sono servite solo un paio di settimane ma alla fine l' ho fottuto alla grande...
    Che sonno e che stanchezza !
    ... viva la gnocca !

  7. #7
    Meno male che non era una donna.

    Avessi capito il perche' di quello che volevi fare ....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    che intendi piero ?
    ... viva la gnocca !

  9. #9
    [supersaibal]Originariamente inviato da carmineDev
    che intendi piero ? [/supersaibal]
    Che dormo.... c'era un altro thread... somigliante e mi sono confuso....

    Nulla... ora guardo la tua soluzione per curiosita'...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    ma le funzioni quando le chiami?...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.