• User Attivo

    Allora ti spiego meglio

    con questa funziona calcolo l'età della persona dalla data di nascita presente nel database 4-11-1986

    quindi $compleanno = 4-11-1986

    [php]
    {
    list($bday_day, $bday_month, $bday_year) = array_map('intval', explode('-', $compleanno));

    	if ($bday_year)
    	{
    		$now = getdate(time() + timezone + dst - date('Z'));
    
    		$diff = $now['mon'] - $bday_month;
    		if ($diff == 0)
    		{
    			$diff = ($now['mday'] - $bday_day < 0) ? 1 : 0;
    		}
    		else
    		{
    			$diff = ($diff < 0) ? 1 : 0;
    		}
    
    		$age = (int) ($now['year'] - $bday_year - $diff);
    	}
    }
    

    [/php]

    Ora io dovrei fare una ricerca nel db per età. CIoè ho due input per la ricerca:

    eta1 = 18
    eta2 = 26

    In teoria dovrei trasformarli in date e fare una ricerca, non sò se è chiaro..


  • User Attivo

    Ah... una ricerca del range di eta` nel db!

    Allora nella query dovrebbe bastare mettere delle condizioni: ' WHERE eta>18 AND eta<26 '. Ti restituisce tutte le righe dove eta e` maggiore di 18 e minore di 26.


  • User Attivo

    [...]

    Sì ma peccato che nella tabella è riportata solo la data di nascita così

    4-11-1986 ehehee

    Forse ho capito, ricalcolo la data di ricerca, cioè uso la funzione che mi dà l'età al contrario, ricavando la data dall eta 🙂


  • User Attivo

    Ecco ora funziona

    [php]
    $now = getdate(time() + timezone + dst - date('Z'));
    $anno1 = $now['year'] - $eta1;
    $anno2 = $now['year'] - $eta2;
    $anno1ok = "".$now['mday']."-".$now['mon']."-$anno1";
    $anno2ok = "".$now['mday']."-".$now['mon']."-$anno2";[/php]

    O per lo meno ottengo le date da ricercare.

    Solo che mi dà un errore quando ricerco:

    WHERE nascita=>'$anno1ok' AND nascita=<'$anno2ok'"

    Spiacenti, si è verificato un errore: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=>'4-10-1993 AND nascita=<'4-10-1988' order by username limit 0,10' at line 1

    Come mai? Sbaglio la ricerca date?


  • ModSenior

    Ciao Sovietiko,
    puoi fare un echo della query e postarla?


  • User Attivo

    Ciao Dark,

    [php]
    if($eta1 != "nullo" AND $eta2 != "nullo") { $rice5 = "AND nascita=>'$anno1ok' AND nascita=<'$anno2ok'"; }

    $result = $db->sql_query("select * from ".$prefix."_users where username != 'Anonymous' $rice5 order by username limit $min,$perpage") or die("Spiacenti, si è verificato un errore: ".mysql_error());
    [/php]

    Questo il codice, come faccio a fare un print? Ho un vuoto di memoria ehehe


  • User Attivo

    La query e` quella stringa che metti in sql_query()

    Fai una stringa e poi inserisci la variabile cosi` la puoi stampare.

    Fatto sta che l'errore ti viene dato in quanto non ci stai mettendo un anno ma una data.


  • User Attivo

    Scusate il ritardo non ero a casa

    [php]
    Spiacenti, si è verificato un errore: select * from utenti where username != 'Anonymous' AND nascita=>'4-10-1993' AND nascita=<'4-10-1985' order by username limit 0,10 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=>'4-10-1993' AND nascita=<'4-10-1985' order by username limit 0,10' at line 1[/php]

    Forse il problema è che il campo è varchar e non un date? Se così fosse una soluzione alternativa? non posso rimodificare tutto..


  • User Attivo

    Ottieni la data dalla query; fai una substring della "data" (stringa dovremmo dire) per ottenere l'anno es. substr($data,-4,4); ottieni l'eta` dall'anno e poi fai un if... ecc. ecc. ecc.


  • User Attivo

    Guarda ho risolto mettendo il campo in date.

    [php]
    nascita BETWEEN '".$anno2ok."' AND '".$anno1ok."'[/php]

    Funziona regolare.

    Mi toccherà cambiare le date nel db prima di fare il cambio ufficiale..

    Pazienza.

    Saluti!


  • User Attivo

    Bhe, meglio! 😛