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

Discussione: problema con list()

  1. #1

    problema con list()

    Ciao a tutti, vorrei creare una function che passando 2 parametri "lingua" , "data" mi trasformasse una data da ing->ita e viceversa ovviamente in base al paramentro "lingua":

    Codice PHP:
    function replace_date($lang$date)
    {
       if(
    $lang == "eng")
       {
         if(
    $date == "") { $date "00/00/0000";} //evito la notice nel caso $date sia vuota

         
    list($d$m$y) = explode("/"$date);

         return 
    "$y-$m-$d"
       }

       if(
    $lang == "ita")
       {
         if(
    $date == "") { $date "0000/00/00";} //evito la notice nel caso $date sia vuota

         
    list($y$m$d) = explode("/"$date);

         return 
    "$d-$m-$y";
       }

    La vorrei utilizzare per quando faccio inserire una data dall'utente in italiano ma che poi deve essere inserita in mysql e viceversa quando la tiro fuori da mysql e devo però presentarla in ita.
    Quando la richiamo funziona solo la trasformazione da ita->eng. Nel caso di eng->ita mi da le notice e non mi trasforma nulla.
    Aiuto

  2. #2
    Ciao, ti posto 2 funzioni che ho fatto ed uso io
    Codice PHP:
    function dataIta($data)
       {
    //cerco la data separata da trattini o da slash e la formatto nel formato ita
       
    $data=preg_replace('/^(\d{4})[-\/\.]{1}(\d{2})[-\/\.]{1}(\d{2})/''$3.$2.$1'$data);
       return 
    $data;
       }
      
    function 
    dataEng($data)
       {
    //cerco la data separata da trattini o da slash e la formatto nel formato inglese
       
    $data=preg_replace('/^(\d{2})[-\/\.]{1}(\d{2})[-\/\.]{1}(\d{4})/''$3.$2.$1'$data);
       return 
    $data;
       } 
    Vedi se ti vanno bene o se in caso modificale in base alle tue necessità.

  3. #3
    Ti ringrazio ma volevo una cosa piu semplice senza usare espressioni regolari che continuano ad essere a me sconosciute. Il problema ce l'ho proprio nella funzione, mi funziona solo quando trasformo la data da ita a ing

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Ho controllato e testato la funzione e funziona perfettamente, non vedo quale sia il problema o almeno se a te da dei problemi potresti specificare quali e dove la richiami?

  5. #5
    La richiamo quando faccio l'UPDATE x modificare il recordset del DB e funziona.
    Quando invece la richiamo per ripresentare nel form per la modifica di dati gia scritti nel DB non funge, cioè qui:

    Codice PHP:
    $sql 'SELECT * FROM t_staff_contracts WHERE id_contract = ' $_GET["id_contract"];            
    $result mysql_query($sql$db_connection);
    $n_result mysql_num_rows($result);

    //se esiste il contratto da modificare...recupero i dati dello stesso:
    if($n_result 0)
      {      
    $riga =  mysql_fetch_array($result);
              
    $id_staff $riga["id_staff"];
              
    //recupero le date che nel DB sono in formato "aaaa-mm-gg"
              //e le trasformo nel formato "gg/mm/aaaa" per inserirle di default
              //nel modulo
              
    $start_date replace_date('ita'$riga["start_date"]);
              
    $end_date replace_date('ita'$riga["end_date"]);              
              
    $termination_date replace_date('ita'$riga["termination_date"]); 
      } 

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Ciao, innanzitutto ti consiglierei di rendere sicura la query perche attualmente è vulnerabile a sql injection
    Codice PHP:
    $sql 'SELECT * FROM t_staff_contracts WHERE id_contract = ' addslashes($_GET["id_contract"]); 
    Poi aggiungi un var_dump($riga) per vedere se i valori nell'array
    sono giusti o c'è qualche problema e fammi sapere

  7. #7
    Originariamente inviato da RoTeam
    Ciao, innanzitutto ti consiglierei di rendere sicura la query perche attualmente è vulnerabile a sql injection
    Codice PHP:
    $sql 'SELECT * FROM t_staff_contracts WHERE id_contract = ' addslashes($_GET["id_contract"]); 
    Ciao RoTeam, potresti fare un piccolo esempio come evitare su questa query pericoli derivanti da sql iniection? Mi interesserebbe. Ciao e grazie.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da sergioDario
    Ciao RoTeam, potresti fare un piccolo esempio come evitare su questa query pericoli derivanti da sql iniection? Mi interesserebbe. Ciao e grazie.
    Beh mi pare di averlo fatto no? L'sql injection non è altro che l'interruzione della query con eventuali modifiche che possono portare anche all'esporto totale del database. E' perciò consigliabile usare o mysql_real_escape_string() o addslashes() o altre funzioni simili per coprire gli apostrofi sulle variabili esterne, una delle soluzioni migliori sarebbe fare tipo addslashes(stripslashes()) cosi da renderla sicura ma memorizzarla senza slash

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Ma perche' non usate le classi date time, con gestione timezones ??????????????

    Questi acrocchi sono inguardabili nel 2012 ( espressioni regolari a parte quelle sono sempre utilissime soprattutto per il controllo formato data o data ora ).

    Scusate ma ho gia' postato davvero un sacco di righe di codice riguardo la gestione delle date e non le ri-posto piu'.

    Posto solo il link alla doc ufficiale ....
    http://php.net/manual/en/book.datetime.php

    In quella pagina trovi tutto quello che ti pu' serverire anche per gestire le date in formato italiano , inglese, tedesco,unix, africano o quello che sia......

    1- crea data a partire da formato (cone ventuale controllo regular expression come suggerito)
    2- usa l'oggetto dateTime creato per gestire la tua data .... (aggiungere, togliere, visualizzare in base alla timezone etc...)


    BASTA CON EXPLODE , REPLACE E OPERAZIONI SU STRINGA QUANDO USIAMO LE DATE !!!!

    Scusate lo sfogo ma davvero questo e' l'ultimo post che commento sulle date... ho postato davvero tanto a riguardo e risolto piu' volte problemi similari in un sacco di post differenti. Prendersi la briga di cercare se la soluzione e' gia' stata proposta sarebbe un buon inizio. E questa cosa succede davvero poche volte.

  10. #10
    Originariamente inviato da RoTeam
    Ciao, innanzitutto ti consiglierei di rendere sicura la query perche attualmente è vulnerabile a sql injection
    Codice PHP:
    $sql 'SELECT * FROM t_staff_contracts WHERE id_contract = ' addslashes($_GET["id_contract"]); 
    Poi aggiungi un var_dump($riga) per vedere se i valori nell'array
    sono giusti o c'è qualche problema e fammi sapere
    se faccio un eco di var_dump($riga) mi da questo:

    codice:
    " array(18) 
      { 
    
    [0]=> string(2) "60" ["id_contract"]=> string(2) "60" 
    [1]=> string(2) "69" ["id_staff"]=> string(2) "69" 
    [2]=> NULL ["id_type_staff"]=> NULL 
    [3]=> string(1) "1" ["id_contract_type"]=> string(1) "1" 
    [4]=> string(10) "2012-05-12" ["start_date"]=> string(10) "2012-05-12" 
    [5]=> string(10) "0000-00-00" ["end_date"]=> string(10) "0000-00-00" 
    [6]=> string(10) "0000-00-00" ["termination_date"]=> string(10) "0000-00-00" 
    [7]=> string(6) "attivo" ["active"]=> string(6) "attivo" 
    [8]=> string(5) "PROVA" ["note"]=> string(5) "PROVA" 
    
      } 
    
    string(8) "

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.