Visualizzazione risultati 1 fino 11 di 11

Discussione: Mostrare i giorni del mese corrente in option di una select box in un while con PHP

  1. #1
    Guest

    Predefinito Mostrare i giorni del mese corrente in option di una select box in un while con PHP

    Salve a tutti, allora, mi presento ocn un problema che mi ferma...

    Allora, devo creare delle select box, con delle option in base al mese in cui siamo. Dovrei fare un while per tutti i giorni, solo che non so come programmare il while dato che non saprei da dove prendere i giorni di ogni mese.

    Ho delle pagine in cui devo selezionare l'inizio di un evento e la fine, questo per il mese corrente.

    Avete qualche suggerimento? Grazie in anticpo

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    date('t') ti restituisce il numero di giorni nel mese corrente.

  3. #3
    Guest

    Predefinito

    Per i mesi ho risolto così:
    Codice PHP:
    $month = array(
    '01' => $lang['datetime']['January'],
    '02' => $lang['datetime']['February'],
    '03' => $lang['datetime']['March'],
    '04' => $lang['datetime']['April'],
    '05' => $lang['datetime']['May'],
    '06' => $lang['datetime']['June'],
    '07' => $lang['datetime']['July'],
    '08' => $lang['datetime']['August'],
    '09' => $lang['datetime']['September'],
    '10' => $lang['datetime']['October'],
    '11' => $lang['datetime']['November'],
    '12' => $lang['datetime']['December'],
    );

    print_r($month);

    Comunque grazie della dritta utilissima, però i numeri sono da 1 a 31, mentre mi servirebbero da 01 a 31 perchè nel DB ho un campo DATE (10).

    Per ora ho fatto:
    Codice PHP:
    for($day_number = date('t'); $day_number >= 01; $day_number-- )
    {
    echo
    $day_number;
    }
    E mi lista da 31 a 1, quindi non va bene.


    Poi ho provato così:
    Codice PHP:
    for($day_number = '01'; $day_number <= date('t'); $day_number++)
    {
    echo
    $day_number;
    }
    Mi lista tutti numeri come prima (da 2 a 31) tranne il primo, 01.


    Consigli?

  4. #4
    L'avatar di orbito
    orbito non è connesso Utente attivo
    Data registrazione
    18-05-2008
    Residenza
    Localhost
    Messaggi
    372

    Predefinito

    Se avessi cercato su php.net avresti trovato date(d); che dà non da 1 a 31 ma da 01 a 31

    Non dò assistenza in privato! Esiste il forum!




  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    secondo me è più saggio inserire nella pagina i numeri da 1 a 31 e poi, quando controlli ed elabori i dati prima di inserirli nel database, li converti in 01-31. In questo modo ti metti anche al sicuro da richieste malformate.

    - mai fidarsi dei dati che arrivano via post/get

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da orbito Visualizza messaggio
    Se avessi cercato su php.net avresti trovato date(d); che dà non da 1 a 31 ma da 01 a 31
    Se avessi invece guardato i cicli che faccio avresti visto che non posso utilizzare date('d'), ma date('t') solo per il numero, dato che d mi restituisce solo il giorno corrente in formato 01-31.

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    secondo me è più saggio inserire nella pagina i numeri da 1 a 31 e poi, quando controlli ed elabori i dati prima di inserirli nel database, li converti in 01-31. In questo modo ti metti anche al sicuro da richieste malformate.

    - mai fidarsi dei dati che arrivano via post/get
    Ma come posso fare? Perchè come hai visto gestisco tutto in un for, in realtà il codice che uso è questo:
    Codice PHP:
    for($day_number = 01; $day_number <= date('t'); $day_number++)
    {
    $s_start_selected = ($start_date_day == $day_number) ? 'selected="selected"' : '';
    $s_finish_selected = ($finish_date_day == $day_number) ? 'selected="selected"' : '';

    $template->assign_block_vars('day', array(
    'NUMBER' => $day_number,
    'S_START_SELECTED' => $s_start_selected,
    'S_FINISH_SELECTED' => $s_finish_selected,
    ));
    }
    Poi nel template scrivo:
    Codice:
                <select name="finish_day">
                    <!-- BEGIN day -->
                    <option value="{day.NUMBER}" {day.S_FINISH_SELECTED}>{day.NUMBER}</option>
                    <!-- END day -->
                </select>
    Dovrei fare un controllo con strlen(), se il numnero è ha una cifra, antepoore lo 0. Questa è l'unica idea che mi viene in mente...

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    oppure usare str_pad()

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Dovrei fare un controllo con strlen(), se il numnero è ha una cifra, antepoore lo 0. Questa è l'unica idea che mi viene in mente...
    Infatti io avevo scritto così nel messaggio eliminato:

    Codice PHP:
    for($day_number = '1'; $day_number <= date('t'); $day_number++)
    {
    if(
    $day_number<10)
    $aggiusta = "0";
    else
    $aggiusta = "";
    echo
    $aggiusta.$day_number;
    }
    Ciao!

  9. #9
    Guest

    Predefinito

    Grazie infinite, ho risolto senza condizioni, con questa stringa:
    Codice PHP:
    str_pad($day_number, 2, 0, STR_PAD_LEFT)
    grazie infinite a tutti per le risposte più o meno valide

  10. #10
    L'avatar di orbito
    orbito non è connesso Utente attivo
    Data registrazione
    18-05-2008
    Residenza
    Localhost
    Messaggi
    372

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Se avessi invece guardato i cicli che faccio avresti visto che non posso utilizzare date('d'), ma date('t') solo per il numero, dato che d mi restituisce solo il giorno corrente in formato 01-31.
    Si, scusami per come ti ho risposto ma stavo in uno stato di semicoma, non fraindentiamo il mio tono di voce, non era come si puo capire leggendo (le incomprensioni di internet..)

    Non dò assistenza in privato! Esiste il forum!




  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da orbito Visualizza messaggio
    Si, scusami per come ti ho risposto ma stavo in uno stato di semicoma, non fraindentiamo il mio tono di voce, non era come si puo capire leggendo (le incomprensioni di internet..)
    Io ho lasciato il messaggio senza emoticon, nemmeno tu devi fraintendere il mio messaggio, in ogni caso grazie delle risposte

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •