Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Registrare una data su mysql

    Salve a tutti e perdonatemi la banalità della domanda, ma penso che due giorni di ricerca senza trovare risposta siano sufficienti... forse non trovo la risposta proprio per la semplicità della domanda.

    Ho una tabella con un campo "data_rilascio" definito "date".
    Con una applicazione php richiedo con un form il campo $data_rilascio
    se inserisco 01/09/1234 su mysql trovo: 0000-00-00
    se inserisco 01/09/0102 su mysql trovo: 0000-00-00
    se inserisco 20141301 su mysql trovo: 0000-00-00
    se inserisco 01020304 su mysql trovo: 0102-03-04
    se inserisco 2014/09/01 su mysql trovo: 2014-09-01
    se inserisco 20140901 su mysql trovo: 2014-09-01

    Da cui deduco che mysql si aspetta una data nel formato aaaa-mm-gg (o aaaammgg)

    Domanda:
    partendo da un input ggmmaaaa o gg/mm/aaaa
    come si può registrare correttamente la data su mysql?
    (senza passare da una estrapolazione di gg mm e aaaa dalla stringa)
    grazie
    Pino

  2. #2
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ...non credo si possa senza elaborare l'input che hai...

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Come hai intuito, il campo date di MySQL si aspetta il formato aaaa/mm/gg o aaaammgg, qualsiasi altra cosa non viene accettata.
    Se vuoi salvare una data in formato diverso da quelli indicati prima, devi dichiarare il campo come varchar e lì salvi la data nel formato che vuoi.

    Comunque questo è un argomento da sezione database, non ha niente a che fare con PHP.

  4. #4
    STR_TO_DATE()

    Codice PHP:
    ...
    $data "23/09/2014";
    $query "INSERT INTO tabella (campo_data) VALUES (STR_TO_DATE($data, '%d/%m/%Y'))";
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Quote Originariamente inviata da satifal Visualizza il messaggio
    STR_TO_DATE()

    Codice PHP:
    ...
    $data "23/09/2014";
    $query "INSERT INTO tabella (campo_data) VALUES (STR_TO_DATE($data, '%d/%m/%Y'))";
    ... 
    Grazie SATIFAL
    l'idea era proprio questa:
    prendere la data di input, formattarla rapidamente col formato mysql e scriverla!
    Ma stranamente non funziona,
    anzi l'applicazione si blocca (mi compare lo schermo vuoto) proprio in corrispondenza dell'utilizzo di STR_TO_DATE.
    Codice PHP:
    $t "TABCK"// nome della tabella
            
    $v = array ($w_TABCK_id,$w_TABCK_status,$w_TABCK_link,$w_TABCK_titolo,$w_TABCK_titolo_breve,$w_TABCK_img,$w_TABCK_sep_flg,$w_TABCK_cnt_hits,$w_TABCK_cnt_up,$w_TABCK_up_user,STR_TO_DATE($w_TABCK_inz_data'%d/%m/%Y'),$w_TABCK_inz_ora,STR_TO_DATE($w_TABCK_up_data'%d/%m/%Y'),$w_TABCK_up_ora,$w_TABCK_menu,$w_TABCK_flg_menu,$w_TABCK_liv_menu,$w_TABCK_i_user); // valori da inserire
            
    $r =    "TABCK_id,TABCK_status,TABCK_link,TABCK_titolo,TABCK_titolo_breve,TABCK_img,TABCK_sep_flg,TABCK_cnt_hits,TABCK_cnt_up,TABCK_up_user,TABCK_inz_data,TABCK_inz_ora,TABCK_up_data,TABCK_up_ora,TABCK_menu,TABCK_flg_menu,TABCK_liv_menu,TABCK_i_user"// campi da popolare
            // chiamata alla funzione per l'inserimento dei dati
            
    $data->inserisci($t,$v,$r); 
    Perchè?

  6. #6
    Ovviamente non puoi passare la funzione STR_TO_DATE() in quel modo. Devi vedere cosa fa il metodo inserisci() è lì che devi effettuare la modifica.

    P.S.
    STR_TO_DATE() è una funzione SQL e non PHP
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Quote Originariamente inviata da satifal Visualizza il messaggio
    Ovviamente non puoi passare la funzione STR_TO_DATE() in quel modo. Devi vedere cosa fa il metodo inserisci() è lì che devi effettuare la modifica.

    P.S.
    STR_TO_DATE() è una funzione SQL e non PHP
    Purtroppo per me non era ovvio, infatti non capivo perchè non trovavo la fuzione str_to_date nel manuale PHP... :-(
    Quindi per formattare la data e poi passarla alla funzione di inserimento (che per adesso mi guardo bene dal metterci mano)
    devo per forza agire sulle stringa di input?

  8. #8
    Se il formato input non è corretto tocca cambiarlo e puoi farlo lato SQL o lato PHP.
    Posta il codice del metodo inserisci().

    P.S.
    Per farlo lato PHP, per quanto orrendo:

    Codice PHP:
    <?php
    $data 
    "23/09/2014";
    echo 
    substr($data6)."-".substr($data32)."-".substr($data02);
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Quote Originariamente inviata da satifal Visualizza il messaggio
    Se il formato input non è corretto tocca cambiarlo e puoi farlo lato SQL o lato PHP.
    Posta il codice del metodo inserisci().

    P.S.
    Per farlo lato PHP, per quanto orrendo:

    Codice PHP:
    <?php
    $data 
    "23/09/2014";
    echo 
    substr($data6)."-".substr($data32)."-".substr($data02);
    ?>
    Grazie.
    Orrendo...si! ma chiaro per un neofita :-)
    Immagino che ci sia un approccio più professionale per registrare una data su un db: qual'è?

    Nel frattempo questo è il metodo "inserisci" che uso:
    Codice PHP:
    //funzione per l'inserimento dei dati in tabella
        
    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;
                }
            } 

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2014
    residenza
    Arezzo
    Messaggi
    23
    Io mi sono trovato proprio adesso ad affrontare lo stesso identico problema, che mi ha fatto impazzire.
    Premettendo che non sono un esperto ma un neofita, ho però risolto inserendo nel form tre caselle del tipo select (giorno mese e anno),
    che poi recupero ed assemblo ad hoc prima di inserirle nella tabella con una cosa del tipo:

    Codice PHP:
    $bd_d $_POST['bd_d'];   //recupero il giorno
    $bd_m $_POST['bd_m'];   //recupero il mese
    $bd_y $_POST['bd_y'];   //recupero l'anno
    //assemblo la data
    $bday $bd_y."-".$bd_m."-".$bd_d
    Forse non è molto elegante e sicuramente è una soluzione semplice .... ma funziona!!

Tag per questa discussione

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.