Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    Gestire null DB Mysql, pattern Active Records PDO

    Ciao a tutti,

    Mi trovo in questa situazione :
    Ho elaborato una sorta di pattern active record solo che mi viene difficile gestire i campi null...
    Vi posto un po di codice e vi spigo cosa succede :
    Codice PHP:
        $utente = new itron_utente_utente();
        
    $utente->setConnection($db);
            
    $utente->setUser($_REQUEST['user']);
            
    $utente->setScadpsw(SetData($_REQUEST['scadpsw']));
            
    $utente->setCognome(SetTesto($_REQUEST['cognome']));                    
            
    $utente->setNome(SetTesto($_REQUEST['nome']));
            
    $utente->setTelefono(SetTesto($_REQUEST['telefono']));        
            
    $utente->setEmail(SetTesto($_REQUEST['mail']));
            
    $utente->setFlagamm(SetTesto($_REQUEST['flagamm']));
            
    $utente->Update(); 
    I POST sono vengono passati all'interno di una funzione che esegue le seguenti operazioni

    Codice PHP:
    function SetTesto($txt,$nomecampo NULL){
        
    $txt=trim($txt);
        if(
    $txt=="" || $txt==NULL)
            return 
    "NULL";
        
    $txt=str_replace("\"","''",$txt);
        
    $txt=addslashes($txt);
        return 
    "'".$txt."'";

    infine il metodo per fare update
    Codice PHP:
        public function Update(){
            
    $sql ="UPDATE utenti SET ";
                
    $sql.="idutente = :idutente,";
                
    $sql.="ut_idsession = :ut_idsession,";
                
    $sql.="user = :user,";
                
    $sql.="password = :password,";
                
    $sql.="ut_nome = :nome,";
                
    $sql.="ut_cognome = :cognome,";
                   
    $sql.="ut_email = :email,";
                   
    $sql.="ut_telefono = :telefono,";
                
    $sql.="flagamm = :flagamm,";
                
    $sql.="scadpsw = :scadpsw,";            
                
    $sql.="blocco = :blocco ";
            
    $sql.="WHERE idutente = :id";
            
            
    $parameter = array('idutente' => $this->idutente
                               
    'ut_idsession' => $this->ut_idsession,
                               
    'user' => $this->user,
                               
    'password' => $this->password,
                               
    'nome' => $this->nome,
                               
    'cognome' => $this->cognome,
                               
    'email' => $this->email,                           
                               
    'telefono' => $this->telefono,
                               
    'flagamm' => $this->flagamm,
                               
    'scadpsw' => $this->scadpsw,
                               
    'blocco' => $this->blocco,
                               
    'id' => $this->idutente);
            
    $this->db->executeUpdate($sql,$parameter);                   
            if(
    $this->db->getLastError()!=""){
                echo 
    "ciao";
                return 
    false;
            }else{
                return 
    true;
            }
        } 
    Il problema che se il campo non viene compilato in questo caso in mysql ci finisce NULL il formato testuale e non riesco proprio a capire dove possa essere il problema.
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Forse non ho capito, ma se il campo è vuoto restituisci proprio "NULL":

    if($txt=="" || $txt==NULL)
    return
    "NULL";


    Cosa dovrebbe restituire invece?
    Un nuovo cms/framework... vuoi collaborare al progetto?

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Esatto, ma se poi vado a controllare il campo del database mi trovo il testo "NULL" e non il valore null
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    a che serve SetTesto() ?

    se è per i campi numerici:
    Codice PHP:
    foreach ( $_POST AS $field=>$value ) {
       if ( !
    is_numeric$value ) ) {
          
    $_POST[$field] = "'" $value "'";
       }

    Questa volta, più che un voto.. è favoreggiamento.

  5. #5
    devi mettere

    Codice PHP:
    return NULL
    senza gli apici altrimenti è come fosse una stringa...
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Quote Originariamente inviata da Fractals87 Visualizza il messaggio
    Esatto, ma se poi vado a controllare il campo del database mi trovo il testo "NULL" e non il valore null
    E' proprio quello che gli dici tu nella tua funzione, ritorni la stringa "NULL" (ci sono gli apici), devi togliere gli apici per ritornare il valore NULL.

  7. #7
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Quote Originariamente inviata da Fractals87 Visualizza il messaggio
    Esatto, ma se poi vado a controllare il campo del database mi trovo il testo "NULL" e non il valore null
    Non mi sono spiegato, se fai

    return "NULL";

    per forza ti trovi la stringa "NULL", devi salvare NULL non la stringa "NULL"
    Un nuovo cms/framework... vuoi collaborare al progetto?

  8. #8
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Mi avete preceduto, 2 rispost is megl che uan...
    Un nuovo cms/framework... vuoi collaborare al progetto?

  9. #9
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    che pirla che sono, avete ragione, mezza giornata buttata per una cagata.... va bhe no comment...

    Già che ci sono vi chiedo un consiglio.... io mi sono creato una serie di funzioni di questo genere
    Codice PHP:
    function SetBool($val,$nomecampo NULL){
        if(!isset(
    $val) || $val===FALSE)
             
    $val 0;
        if(
    $val===TRUE)
             
    $val 1;    
         if(
    $val!=&& $val !=1)
            throw new 
    Exception("Il campo ".$nomecampo." non e' un valore accettato.");
         return 
    $val;
    }

    function 
    SetNum($num$nomecampo NULL$approssizione NULL$modalita NULL){ 
        
    // $num : il valore da trattare
        // $approssimazione : indica il numero di cifre decimali che deve restituire
        // $modalita : E/D/NULL indica il tipo di approssimazione E = eccesso D = difetto NULL = valore di default
        
    $num trim($num);
        if(
    $num=="" || $num==NULL)
            return 
    "NULL";
            
        
    $num str_replace(",""."$num);
        if(
    is_numeric($num)){
            return 
    $num;
        }else{
            throw new 
    Exception("Il campo ".$nomecampo." non e' numerico");
        }
    }

    function 
    SetTesto($txt,$nomecampo NULL){
        
    $txt=trim($txt);
        if(
    $txt=="" || $txt==NULL)
            return 
    "NULL";
        
    $txt=str_replace("\"","''",$txt);
        
    $txt=addslashes($txt);
        return 
    "'".$txt."'";
    }
    function 
    SetData($data,$nomecampo NULL){
        
    $data=trim($data);
        if(
    $data=="")
            return 
    "NULL";

        
    $data=str_replace("/""-" ,$data);    
        
    $data explode("-"$data);
        if(isset(
    $data[0]) && isset($data[1]) && isset($data[2])){
            if(
    checkdate $data[1] , $data[0] , $data[2] ))
                  return 
    "'".$data[2]."-".$data[1]."-".$data[0]."'";
             else
                throw new 
    Exception("Il campo ".$nomecampo." non e' una data valida");
        }else{
            throw new 
    Exception("Il campo ".$nomecampo." non e' una data valida");
        }

    Le quali interagiscono con i $_REQUEST della mia applicazione, è una cosa corretta o avete altro modo di suggerirmi come procedere?

    Aggiornamento : il problema del null non me ne sono mai accorto perchè fino a ieri utilizzavo la versione 5.0.77 di mysql e passandogli la stringa "NULL" lui lo settava come valore, invece nella versione 5.1.47 rispetta il tipo campo...
    Posso presumere che nella versione 5.0.77 la considerasse come parola riservata e anche se arrivava un testo per il era null comunque.
    Che mestiere difficile.....essere da soli ancora di più

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Quote Originariamente inviata da Fractals87 Visualizza il messaggio
    la versione 5.0.77 di mysql e passandogli la stringa "NULL" lui lo settava come valore, invece nella versione 5.1.47 rispetta il tipo campo...
    Posso presumere che nella versione 5.0.77 la considerasse come parola riservata e anche se arrivava un testo per il era null comunque.
    Direi che è ESTREMAMENTE improbabile. In un testo non esistono parole riservate. Figuriamoci se un db ti può impedire di salvare la stringa 'NULL' in una colonna. Probabilmente glielo passavi senza apici, in qualche maniera.

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.