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

Discussione: ricerca per data

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892

    ricerca per data

    Salve a tutti.

    Sto costruendo un motore di ricerca per Mysql.

    Ho un campo "giorno" in cui faccio scrivere all'utente una data nel formato anno/mese/giorno

    Quando poi vado a mostrare questo dato nella select scrivo:

    Codice PHP:
    SELECT idnumero,sezioneDATE_FORMAT(giorno,'%d/%m/%Y') as data FROM tabella ecc... 
    E poi richiamo il dato semplicemente con un

    Codice PHP:
    print($results['data']); 
    e lui mi formatta correttamente la data con giorno/mese/anno.

    Ora il problema è questo: io vorrei fare una ricerca parametrata con due date (WHERE campo_data BETWEEN data_1 e data_2)...

    però NON SO COME FAR SCRIVERE LA DATA ALL'UTENTE. Nel senso che se scrive giorno/mese/anno non trova nulla perché lui archivia i dati così:
    2003-12-29 00:00:00

    come posso fare? Io vorrei che scrivendo due date (da - a) nel formato giorno/mese/anno fosse possibile effettuare la ricerca...

    Grazie
    Franz

  2. #2
    Se converti la data per l'inserimento fai la stessa conversione per la comparazione.

    es.: ammettiamo che la data ti arriva dal POST in questo formato:

    $_POST['data'] = '12/07/2004';

    list($giorno, $mese, $anno) = explode('/', $rows['data_da']);
    $da_data = "$anno-$mese1-$giorno1";

    list($giorno1, $mese1, $anno1) = explode('/', $rows['data_a']);
    $da_data = "$anno1-$mese1-$giorno1";

    La SELECT avraà la condizione WHERE in questo modo:

    WHERE data_db BETWEEN '$da_data' AND '$a_data'



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

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892
    Scusa, ma non riesco proprio a faro funzionare...

    Sul form di invio ho scritto:

    <input name="data_da" size="20">

    <input name="data_a" size="20">


    Scrivo la data con il formato anno/mese/giorno. Sulla pagina Php invece ho:

    Codice PHP:
    $da_data=$_POST['da_data'];
    $a_data=$_POST['a_data'];
    list(
    $giorno$mese$anno) = explode('/'$rows['data_da']); 
    $da_data "$anno-$mese-$giorno"
    list(
    $giorno1$mese1$anno1) = explode('/'$rows['data_a']); 
    $a_data "$anno1-$mese1-$giorno1"
    E poi, sulla select,

    Codice PHP:
    $query_limit mysql_query("SELECT id, numero, colore, tipologia, oggetto, sezione, DATE_FORMAT(giorno,'%d/%m/%Y') as data FROM determinazioni where data BETWEEN '$da_data' AND '$a_data
     ORDER BY id DESC LIMIT 
    $primo$per_page"); 
    Premetto che il campo di Mysql dove sta scritta la data si chiama "giorno". Se imposto "where data BETWEEN ecc. " mi dà errore di campo non corrispondente, se imposto "where giorno BETWEEN ecc." invece non mi trova niente...

    Non so come fare...
    help

  4. #4
    Che casino...

    senti avevo capito che ricevevi la data come dd/mm/yyyy.

    Se la ricevi come yyyy/mm/dd non devi fare conversioni. Va bene cosi'.

    Non ho neanche il tempo di verificare perche' mi brucia la frittata.

    Nel where non puoi mettere l'alias data, perche' quando mysql risolve il where l'alias ancora non esiste, e poi sarebbe dd/mm/yyyy.

    Devi mettere il nome del campo e le date provenienti dal form senza girarle come erroneamente avevo capito.
    $da_data=$_POST['da_data'];
    $a_data=$_POST['a_data'];

    $query_limit = mysql_query("SELECT id, numero, colore, tipologia, oggetto, sezione,
    DATE_FORMAT(giorno,'%d/%m/%Y') as data
    FROM determinazioni
    where giorno BETWEEN '$da_data' AND '$a_data'
    ORDER BY id DESC
    LIMIT $primo, $per_page");


    Vado a pappare....

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892
    Scusami, ma ho sbagliato io: tu avevi capito bene!!
    Io ricevo in effetti la data come dd/mm/yyyy...

    Ma cmq non riesco a farlo girare...

    Il codice è quello che ho postato prima...

    (ehm... Spero tu abbia digerito)

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892
    ho notato inoltre che se faccio una semplice estrazione del campo "giorno" senza formattare niente lui mi restituisce:

    2003-12-29 00:00:00

    Non capisco perché 00:00:00

    boh...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892
    scusa ancora, se gli chiedo di stamparmi il valore delle variabili dopo i due list in questo modo:

    Codice PHP:
    list($giorno$mese$anno) = explode('/'$rows['data_da']); 
    $da_data "$anno-$mese-$giorno"
    list(
    $giorno1$mese1$anno1) = explode('/'$rows['data_a']); 
    $a_data "$anno1-$mese1-$giorno1"
    print (
    $da_data);
    print (
    $a_data); 
    lui mi restituisce: ----

    segno che nella conversione i valori si perdono, perché sulla stringa di interrogazione passano regolarmente...

    Spero proproi che tu possa darmi una mano, non so che pesci pigliare

  8. #8
    Originariamente inviato da franz79
    ho notato inoltre che se faccio una semplice estrazione del campo "giorno" senza formattare niente lui mi restituisce:

    2003-12-29 00:00:00

    Non capisco perché 00:00:00

    boh...
    Facciamone una per volta.

    1) 2003-12-29 00:00:00 perche il campo e' in formato DATETIME. Se ti interessa solo data imposta il compo come DATE e avrai solo 2003-12-29.

    2) Le date che tu ricevi tramite POST sono stringhe e vanno convertite in DATE.
    Esemplifichiamone una:

    Se facciamo echo $_POST['data_da'] il formato atteso e' gg/mm/aaaa.
    Quindi convertiamo la stringa ricevuta in data:

    list($giorno, $mese, $anno) = explode('/', $_POST['data_da']);
    $da_data = "$anno-$mese-$giorno";

    ora un echo a $da_data dovrebbe presentare yyyy-mm-dd lo stesso formato che si trova nel db ( a prescindere dal TIME 00:00:00).

    3) Andiamo ad estrarre i record che rispondo alla condizione da - a.

    SELECT omississ......
    WHERE giorno BETWEEN $da_data AND $a_data
    ORDER ecc...

    Forse nella fretta qualcosa di storto prima c'era. Ora con calma segui la guida tracciata e completala.

    Se hai dei problemi usa echo per verificare cosa effettivamente traduci. es.:

    echo "
    Data da: $_POST[data_da] a $da_data
    ";

    Sono punti di debug efficacissimi.

    Ok. prova e racconta.


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

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892
    Ecco fatto: mi restituisce:

    Data da: a --


    e il codice è:

    Codice PHP:
    list($giorno$mese$anno) = explode('/'$_POST['data_da']); 
    $da_data "$anno-$mese-$giorno"
    echo 
    "
    Data da: 
    $_POST[data_da] a $da_data
    "

    list(
    $giorno1$mese1$anno1) = explode('/'$_POST['data_a']); 
    $a_data "$anno1-$mese1-$giorno1"
    poi il select è:

    Codice PHP:
    $query_limit mysql_query("SELECT id, numero, colore, tipologia, oggetto, sezione, DATE_FORMAT(giorno,'%d/%m/%Y') as data FROM determinazioni where giorno BETWEEN '$da_data' AND '$a_data
     ORDER BY id DESC LIMIT 
    $primo$per_page");
    while(
    $results mysql_fetch_array($query_limit)) 
    Come posso fare?

  10. #10
    echo "
    Data da: $_POST[data_da] a $da_data
    ";

    stampami questo. Forse la data che ricevi non e' gg/mm/aaaa

    ho visto ora....

    Non ricevi alcuna data....

    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 © 2024 vBulletin Solutions, Inc. All rights reserved.