Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143

    Campo INT e NULL per default

    Ciao a tutti,

    Spiego brevemente il problema. Ho una serie di input text che vanno ad inserire dei ricord (numerici) in campi INT, che per default sono NULL.

    Quando lascio uno di questi campi vuoti, mysql me lo converte automaticamente in 0 invece che in NULL.

    Questo è il codice (in sintesi):
    Codice PHP:
    if(isset($_POST['submit'])){

        
    $campo1 = ($_POST['campo1']);
        
    $campo2 = ($_POST['campo2']);
        
    $campo3 = ($_POST['campo3']);

            
    $t "miatabella";
            
    $v = array ($campo1,$campo2,$campo3); 
            
    $r =  "campo1,campo2,campo3";
          
    $data->inserisci($t,$v,$r); 

    Anche provando con:

    Codice PHP:
        $campo1 = ((!empty($_POST['campo1']))?($_POST['campo1']):(NULL)); 
    me lo converte sempre in 0.

    Pechè?

  2. #2
    Per poterlo inserire come null, devi aver dichiarato il campo come nullable. Detto questo è probabile che sia il metodo inserisci che ti crea una qualche conversione.
    La query da eseguire deve essere di questo tipo
    codice:
    INSERT INTO `test` (
    `id` ,
    `num`,
    `testo`
    )
    VALUES (
    NULL , NULL, 'alfa beta charly'
    );
    Se non è così, devi verificare il metodo

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Grazie per la risposta Dascos.

    Si, il campo è settato su Null e anche per default è Null.

    Per inserire i record chiamo la funzione "inserisci", che è questa:

    Codice PHP:
    public function inserisci($t,$v,$r null)
        {
             if(isset(
    $this->attiva))
              {
                
    $istruzione 'INSERT INTO '.$t;
                if(
    $r != null)
                {
                    
    $istruzione .= ' ('.$r.')';
                }

                for(
    $i 0$i count($v); $i++)
                {
                    if(
    is_string($v[$i]))
                        
    $v[$i] = '"'.$v[$i].'"';
                }
                
    $v implode(',',$v);
                
    $istruzione .= ' VALUES ('.$v.')';

                
    $query mysql_query($istruzione) or die (mysql_error());

                }else{
                    return 
    false;
                }
            } 
    Non c'è altro, il codice è tutti qui. Non riesco proprio a capire perchè mi converte i campi vuoti in zero.

    Ho postato qui e no nella sezione Database perchè è proprio il codice che elabora misteriosamente questa conversione; se cancello lo zero e lascio il campo vuoto direttamente da phpmyadmin funziona normalmente.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    stampa a video la query generata prima dell'esecuzione e confrontala con quella in phpmyadmin

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Fatto:

    La query che ottengo utilizzando il form in php è questa:
    Codice PHP:
    UPDATE miatabella SET campo1=''campo2='' WHERE bla bla bla
    e non va, visto che in phpmyadmin mi ritrovo i campi vuoti convertiti in 0.

    Con phpmyadmin invece la query è questa:
    Codice PHP:
    UPDATE `nomedb`.`miatabellaSET `campo1` = NULL , `campo2` = NULL WHERE bla bla bla 
    e qui funziona tutto correttamente.

    A questo punto, ho provato, come ho detto prima a fare:
    Codice PHP:
    $campo1 = ((!empty($_POST['campo1']))?($_POST['campo1']):(NULL)); 
    e anche
    Codice PHP:
    $campo1 = ((isset($_POST['campo1']))?($_POST['campo1']):(NULL)); 
    Ma quando stampo la query ottengo sempre gli apici vuoti (campo1='') invece di campo1 = NULL e mysql me li converte in 0.

  6. #6
    Codice PHP:
                    if(is_string($v[$i])){ 
                        
    $v[$i] = '"'.$v[$i].'"'
                }else{
    $v[$i] = "(NULL)";
     } 
    Ma le parentesi graffe son diventate un optional?

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.