Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [mysql] UPDATE NULL

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    36

    [mysql] UPDATE NULL

    Davvero le ho provate tutte prima di sottopormi alla gogna mediatica.........
    Il mio problema è il seguente :

    ho un campo date NULL di default NULL, nel relativo form di modifica se ho immesso la data di iscrizione mi viene visualizzata correttamente , ma se la cancello nella prossima modifica
    (ed anche nel database) di default invece di NULL immette "0000-00-00" mentre io ho bisogno di visualizzare campi giorno-mese-anno completamente vuoti.

    Posto a tal proposito lo parte dello script di modifica
    .................
    if (isset($_POST[giorno], $_POST[mese], $_POST[anno])) {
    // la funzione sottostante passa da data ITA a data USA
    include("formtodb.php");
    $_POST[iscrizione]=datadaform($_POST[giorno], $_POST[mese], $_POST[anno]);
    } else {
    $_POST[iscrizione]=NULL;
    }

    ................
    ho provato a dare a $_POST : IS NULL, '',"", ma niente da fare, il valore NULL
    riappare solo se non cito il dato nella query di aggiornamento ( per coerenza dato che è un non valore...).
    QUalche consiglio???????????????

  2. #2
    scusa, ma la variabile in $_POST non è null ma '' o "".

    Poi non ho capito: hai provato a fare UPDATE TuaTabella SET data = NULL WHERE id = $id ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    36
    Prima di tutto grazie artorius per l'intervento.

    1) Si, lo so che torna un valore più vicino al tipo di dato, se INT sarà 0 se letterale sarà stringa vuota ""....

    "Poi non ho capito: hai provato a fare UPDATE TuaTabella SET data = NULL WHERE id = $id ?"

    2) Si la query è giusta (non sto a tediarti postando 150 righe di codice....) ma prima della query assegno a delle variabili i valori degli $_POST, il ciclo if else serve a valorizzare $data con una modifica in caso di correzione della data, ma se invece io la cancello completamente (quindi $_POST non è più settato. giusto??)mi attendoche il dato sia tornato nel DB con la voce NULL e non con i campi DATE settati a 0000-00-00.
    Forse la domanda la espongo malissimo e mi scuso per questo, ma il succo è il seguente :
    nella query dopo il ciclo if else : $data=$_POST[iscrizione]; // modifica o eliminazione dei numeri dai campi
    se modifica : $data sarà una nuova data (es: 02-06-2008).
    se cancello tutti i numeri : $data=NULL; quindi nel DB ci sarà NULL
    ed i campi del form tornano di un bianco candido.

    Se non è possibile modificherò i campi DATE.

  4. #4
    scusami, sarà perché sono stanco la sera, ma ho riletto 3 volte il tuo ultimo messaggio e di domande non ne ho vista nemmeno una.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    36
    Si scusa, ti capisco , e che questo benedetto valore NULL mi è ostico....... sarò sintetico !

    1) se un campo DATE è NULL , in un form la select che invia i dati nelle textarea equivalenti non mostra
    assolutamente nulla ( le textarea di giorno mese anno sono bianche) e nel DB nel campo vi è NULL.
    2) Se immettiamo una data sarà visualizzata la data.
    3) MA SE DOPO CANCELLIAMO LA DATA......(quindi il $_POST è vuoto, non settato) il campo DATE
    non torna come prima ma si setta ad un valore di default di 0000-00-00.

    Dato che queste date sono concatenate nella form a delle input type="radio" che riportano delle note,
    quando modifico l'iscrizione deselezionando una nota, la data della nota relativa deve scomparire
    ripristinando le situazione al punto 1.

    DOMANDA......come fare a fare tornare tutto come al punto 1 ??

    .........................Forse da quello che ho letto dal sito di MYSQL non è possibile. i tipi DATE, DATETIME, TIME e TIMESTAMP hanno sempre un valore di default "0 se NOT NULL , "000-00-00" se NULL.

    C'è qualche artifizio per fare quello che mi serve.......?

  6. #6
    NULL significa che il campo NON esiste. Quindi non significa empty (0000-00-00) ma proprio campo mancante. Infatti deve essere identificato in modo apposito.

    Un campo NULL valorizzato e poi successivamente azzerato non ritorna NULL, ma diventa campo vuoto o con il valore di default, ma presente. Per tornare NULL deve essere espressamente dichiarato con un update (set campo = NULL)

    Meglio usare la data di default 0000-00-00 per una data assente o data non valida e non NULL per una campo con valori temporali.

    per evitare di stampare la data 0000-00-00 puoi sempre ricorrere ad una if nella query:

    codice:
    select *, if(data = '0000-00-00', NULL, data) as data
    from tabella

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

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    36
    [RISOLTO]
    Grazie piero.mac dell'intervento, hai messo un sigillo finale sui miei dubbi, passerò i campi DATE a NOT NUL con valore di default "0000-00-00".
    Comunque la tua indicazione del costrutto if nella query non ha funzionato, nel senso che continuava imperterrito a restituirmi zero in tutti i campi di visualizzazione.

    allora tenendo conto delle tue indicazioni ho provato spostando il ciclo dopo la query ed ha funzionato :

    $query=("SELECT........................")
    $results = mysql_query ($query)
    or die (mysql_error()) ;
    $res=mysql_fetch_array($results);
    if (count($res) >= 1) {
    /* creo una variabile per ogni campo dell'array e il campo DATE valorizza $data,
    immediatamente di seguito passo $data al ciclo sottostante che porta a termine
    il suo compitino non restituendomi nulla se "0000-00-00" o dividendo la data per
    visualizzarla in giorno/mese/anno nei form di modifica. Inoltre funziona anche
    visualizzaziondo i dati in tabelle */

    ..........
    ..........
    ..........
    $data=$res[4];

    if ($data=="0000-00-00") {$data=NULL;} else {$div=explode("-",$data);}
    ...................
    ...................



    Grazie mille artorius e piero.mac per l'aiuto !


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.