Newsgroup: it.comp.www.php
Titolo: Query con date

Ciao a tutti. Da poco tempo sto usando PHP ed è sorto un problema nel
momento in cui ho dovuto fare una query in MySQL filtrando per data.
Nella form che vede l'utente la data viene inserita in formato "dd/mm/yyyy"
ma in MySQL la data è in formato "yyyy/mm/dd" e quindi quando vado a
filtrare i dati non mi trova neanche un record.
Ho provato a usare alcune funzioni di PHP (date, mktime, ...) ma senza
risultato oppure in maniera sbagliata.
Come faccio a formattare la data inserita dall'utente in quella presente su
MySQL?

MySQL?
$regs=array();
ereg ("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", $_POST[data], $regs);
if (checkdate($regs[2],$regs[1],$regs[3])) $data="$regs[3]-$regs[2]-$regs[1]";

 ha scritto nel messaggio
news:7cnld09ggehft8dr0...@4ax.com...


Cosa sbaglio?!?
Sbagli a cambiare gli indici dell'array ;-)
L'elemento di indice 0 contiene la stringa intera.

 >Poi ho provato a farmi stampare i valori dell'array e mi risulta cosě:


Notice: Undefined offset: 3 in c:\programmi\... on line 109
A me questo codice:
<?
$regs=array();
ereg ("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", "10.11.2001", $regs);
if (checkdate($regs[2],$regs[1],$regs[3])) $data="$regs[3]-$regs[2]-$regs[1]";
echo $data;
?>
non da nessun errore.
Prova a copiarlo esattamente.

Ivan ha scritto:

L'avevo postata ieri sera su questo stesso newsgroup
(post "formato date")...
function GetMyDate($miadata) // output nel formato MySQL YYYYMMDD
{
   $arrayMese = 
array("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic",
"jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
   $dimArrayMese = sizeof($arrayMese);
   list ($giorno,$mese,$anno) = split("[\ /.-]", trim($miadata));
   $dataoggi =  time();
   // verifica anno
   if (isset($anno))
   {
     $anno = abs($anno) % 10000 ; // così ho da 0 a 9999
     if ($anno <= 9) // 0..9 -> 2000..2009
     {
       $anno += 2000;
     }
     elseif ($anno <= 99) // 10..99 -> 1910..1999
     {
       $anno += 1900;
     }
   }
   else
   {
     $anno = date ("Y",$dataoggi) * 1;
   }
   // verifica mese
   if (isset($mese))
   {
     if (($mese<1) || ($mese>12)) // se non è numero provo in lettere
     {
       $mese = substr(strtolower($mese) . "   ",0,3);
       for ($i = 0 ; $i < $dimArrayMese ; $i++)
       {
         if ($mese == $arrayMese[$i])
         {
           $mese = $i % 12 + 1 ;  break;
         }
       }
       if ($i==$dimArrayMese)
       {
         return "" ;  // NON VALIDO
       }
     }
   }
   else
   {
     $mese = date ("m",$dataoggi) * 1;
   }
   if ( ($giorno=="o") || ($giorno == "O") || ($giorno == "t") || 
($giorno == "T"))
   {
     $giorno = date ("d",$dataoggi) * 1;
   }
   // verifica giorno (banale, il resto farà checkdate)
   if (($giorno<1) || ($giorno>31)) return "" ;
   if (!checkdate($mese,$giorno,$anno))  return "";
   return sprintf("%04d%02d%02d",$anno,$mese,$giorno);
}
Prende l'input dell'utente come giorno/mese/anno, dove come carattere
separatore utilizza lo spazio, il punto, il meno o lo slash. Il mese
lo puoi scrivere sia in numeri che in lettere e in quest'ultimo caso
le prime tre lettere sono sufficienti. Se viene omesso l'anno (esempio
"3 maggio") viene utilizzato l'anno corrente, se viene omesso anche il
mese (esempio "12") viene utilizzato il mese corrente, se metti solo la
lettera "o" ti mette la data di oggi.
Il formato di output è YYYYMMDD che è perfetto per le query MySQL.
Bye
gp
-- 
gpb chiocciola freemail punto it

Ivan ha scritto:

$sqldate = join('-', array_reverse(split('-', $date)));
A.
-- 
My homepage
http://antoniobonanno.debris.it/
My journal
http://mondriankilroy.splinder.it/
My portfolios
http://www.debris.it/whois.php?i=6
http://www.usefilm.com/photographer/19053.html
http://www.photosig.com/go/users/view?id=99395