ricerche e date dal db

Ciao.

Una volta creato il documento "fattura" (necessita ancora di essere

perfezionato in verità) in php adesso dovrei passare alla

fase del progetto che prevede la ricerca dei dati nel DB.

Devo prima di tutto ordinare in una pagina i documenti per data e avrei bisogno di un paio

di consigli.

Non so se sia meglio inserire nella pagina dei campi di tipo select

come si trovano sul web quando bisogna inserire la data di nascita

(es: una per il giorno, mese, anno) in questo caso sarebbero 2 coppie visto

che avrei bisogno di una per la data d'inizio delle ricerca e una per

il termine (cioè dalla data alla data);

oppure semplicemente 2 campi di tipo input in cui inserire la data in questo formato

ad esempio:

da: 23/12/2006 al: 04/02/2007.

Voi cosa mi consigliate?

Avrei anche bisogno di studiare un po' di codice che prevede la

ricerca nel db in base alle date e successiva visualizzazione nell'apposita pagina

web.

Nel db la data del documento è inserita in un campo di tipo int(11) con un

codice php del tipo:

$oggi = time();

$sql3 = mysql_query("INSERT INTO fatture (numero_fatt, id_cliente, totale, data, annotazioni, aspetto)

VALUES ('$numero', '$id2', '$tot_fatt', '$oggi', '$not', '$aspetto');");

Potete aiutarmi?

Grazie anticipatamente

ps: successivamente dovrò affrontare anche il problema dell'impaginazione dei risultati.

inviato 9 anni fa
frankphp
X 0 X

Nessun consiglio, devi scegliere tu quello che più ti aggrada.

Se scegli di usare 2 campi input devi poi dividere la data, fare attenzione al separatore ecc. prima di trasformarla per la ricerca; se usi le select hai più campi da controllare ma hai già la data divisa, dipende da te.

risposto 9 anni fa
LonelyWolf
X 0 X

Nessun consiglio, devi scegliere tu quello che più ti aggrada.

Se scegli di usare 2 campi input devi poi dividere la data, fare attenzione al separatore ecc. prima di trasformarla per la ricerca; se usi le select hai più campi da controllare ma hai già la data divisa, dipende da te.

attenzione al separatore?

Cosa intendi, lo devo eliminare in fase di richiesta? Come?

Mi servirebbe qualche esempio. C'è un tutorial in giro in merito alle ricerche con le date?

Grazie

risposto 9 anni fa
frankphp
X 0 X

non ci sono tutorial sulle ricerche, sono una cosa completamente soggettiva.

Quando dio separatore intendo che se fai inserire la data con un unico campo l'utente potrebbe inserire la stessa data in almeno 3 modi differenti, ad esempio per la data di oggi:

14/02/2007

14.02.2007

14-02-2007

Per cui quando tu devi generare la data di ricerca con mktime devi dividerla con il separatore giusto.

risposto 9 anni fa
LonelyWolf
X 0 X

non ci sono tutorial sulle ricerche, sono una cosa completamente soggettiva.

Quando dio separatore intendo che se fai inserire la data con un unico campo l'utente potrebbe inserire la stessa data in almeno 3 modi differenti, ad esempio per la data di oggi:

14/02/2007

14.02.2007

14-02-2007

Per cui quando tu devi generare la data di ricerca con mktime devi dividerla con il separatore giusto.

Mi interessano per curiosità entrambe le soluzione. Però adesso sono

orientato ad usare i campi select per evitare problemi.

Ma come si fa a trasformare la data così selezionata in modo che possa essere

compatibile con il formato int nel campo del DB (inserita a suo tempo con "TIME())

Grazie

risposto 9 anni fa
frankphp
X 0 X

E se usassi un calendarietto per ottenere la data, non sarebbe più comodo?

In questo modo ce l'avresti già formattata es 2007-02-25.

Vedi qui per esmepio: http://www.dynamicdrive.com/dynamicindex6/popcalendar2.htm

risposto 9 anni fa
stellina
modificato 9 anni fa
X 0 X

E se usassi un calendarietto per ottenere la data, non sarebbe più comodo?

In questo modo ce l'avresti già formattata es 2007-02-25.

Vedi qui per esmepio: http://www.dynamicdrive.com/dynamicindex6/popcalendar2.htm

azz! Bella trovata per davvero!

E' possibile impostare la data nel formato italiano?..Forse si credo.

Provo..

e poi come la invio allo script php per la ricerca e  rendo compatibile il formato con la data che ho inserito nel db con time() in un campo di tipo intero?

risposto 9 anni fa
frankphp
X 0 X

il campo su cui salvi la data nel db di che tipo è?

risposto 9 anni fa
stellina
X 0 X
il campo su cui salvi la data nel db di che tipo è?

scusa ma l'ho già ripetuto 2 volte  :D

In ogni caso e di tipo intero (int(11))

inserisco la data nel campo usando la funzione time ()

che restituisce un numero intero (corrispondente alla data)che appunto inserisco nel db.

grazie

risposto 9 anni fa
frankphp
X 0 X

scomponi la data e usi mktime (cmq il calendarietto generalmente non blocca l'inserimento a manina e quindi controlla sempre le date e i separatori).

Se usi le select hai già tutto diviso e usi mktime per ottenere il formato che ti serve.

int mktime(ore,minuti,secondi,mese,giorno,anno)

risposto 9 anni fa
LonelyWolf
X 0 X

scomponi la data e usi mktime (cmq il calendarietto generalmente non blocca l'inserimento a manina e quindi controlla sempre le date e i separatori).

Se usi le select hai già tutto diviso e usi mktime per ottenere il formato che ti serve.

int mktime(ore,minuti,secondi,mese,giorno,anno)

ciao lonely, mi interessano entrambi i metodi e forse utilizzerò quello con i campi select ma voglio

approfittare per imparare qualcosa in più;

il calendarietto mi restituisce la data in questo formato

2007/02/15

e quindi vorrei sapere come trasformarlo con mktime (tenendo conto dei separatori) poi

devo vedere come impostarla nel formato italiano

15/02/2007

grazie

risposto 9 anni fa
frankphp
X 0 X

Butto giù un codice veloce, giusto per farti capire:

list($anno,$mese,$giorno) = split("/",$_POST("data");
$data = mktime(0,0,0,$mese,$giorno,$anno);

A questo punto $data contiene la data come int e la puoi utilizzare per le ricerche sul tuo db.

risposto 9 anni fa
LonelyWolf
X 0 X

Butto giù un codice veloce, giusto per farti capire:

list($anno,$mese,$giorno) = split("/",$_POST("data");
$data = mktime(0,0,0,$mese,$giorno,$anno);

A questo punto $data contiene la data come int e la puoi utilizzare per le ricerche sul tuo db.

capito.

un'ultima cosa.

devo mettere le variabili $mese,  $giorno, $anno nella funzione mktime proprio in quest'ordine?

Non corrisponde altrimenti ai valori int già registrati con time() nel db?

Scusami ma vorrei capire la cosa anche nei particolari.

Grazie ancora per il tuoi preziosi interventi.

risposto 9 anni fa
frankphp
X 0 X

sì, è la sintassi del comando così.

risposto 9 anni fa
LonelyWolf
X 0 X
sì, è la sintassi del comando così.

grazie, provo e ti faccio sapere..domani adesso vado a nanna ;)

risposto 9 anni fa
frankphp
X 0 X
sì, è la sintassi del comando così.

scusatemi ragazzi se non vi ho fatto sapere più niente, ma

ho avuto occasione di vendere il mio vecchio pc e ho dovuto aspettare un po' per avere a disposizione quello nuovo (intel core2 e6600 con una bella ati sapphire 1950xt ;D).

Rimetto mano al progetto oggi stesso e vi faccio sapere sperando che vogliate sempre aiutarmi.

Grazie e ciao.

risposto 9 anni fa
frankphp
X 0 X

allora

Ho preparato il modulo per le ricerche

(per il momento mi sto limitando a fare un semplice elenco delle fatture inserite nel db in ordine di data)

visualizzo l'elenco così:

include("dati.php");
$link=mysql_connect("$db_host","$db_login","$db_pass")
or die ("Non riesco a connettermi a <b>$db_host");

mysql_select_db ($database, $link)
or die ("Non riesco a selezionare il db $database<br>");

if (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']==""))
   {
 $tutto = "SELECT * FROM fatture ORDER BY data";
     }       
     
$query = mysql_query ($tutto,$link)
 or die ("Non riesco ad eseguire la richiesta $tutto");
 $totr=mysql_num_rows($query);
 echo "<b>Numero fatture trovate: <font color=\"#FF0000\" size=\"5\"> ".$totr." </font></b> <a href=\"ricerca.html\">Ritorna al modulo</a><br><br>
 
 <table border=1 width=\"600\" cellspacing=\"0\" cellpadding=\"5\"><tr>
  <td width='80' align='center'><b>Fattura N°</b></td>
  <td width='150' align='center'><b>Data</b></td>
  <td width='250' align='center'><b>Cliente</b></td>
  <td width='120'align='center'><b>Dettagli</b></td></tr></table><br>"; 

while( $row = mysql_fetch_array($query) )
   {
   $cust = $row["id_fattura"];
   
   $querycust = mysql_query("SELECT * FROM clientidb JOIN fatture ON clientidb.id_user=fatture.id_cliente
   WHERE fatture.id_fattura = $cust",$link);
   
   while( $rowcust = mysql_fetch_array($querycust) )
{
   $cognome_cliente = $rowcust["cognome"];
   $nome_cliente    = $rowcust["nome"];
  }
   
echo "
<table border=0 width=\"600\" cellspacing=\"3\"><tr>
  <td width='80' align='right'><b>$row[numero_fatt]</b></td>
  <td width='150' align='center'><b>".date("d/m/y", $row['data'])."</b></td>
  <td width='125' align='left'><b>&nbsp; $cognome_cliente</b></td>
  <td width='125' align='left'><b>&nbsp; $nome_cliente</b></td>
  <td width='120'align='center'><b><a href=\"script_ricerca.php?variabile=$cust\">Visualizza</a></b></td>
  </tr>
  </table>"; 
 }    
?>

Come potete vedere l'ultima voce è un link che dovrebbe inviare l'id fattura alla pagina script_ricerca.php

(che effettivamente avviene).

Il problema è che questo link dovrebbe oltre ad inviare la variabile, fare aprire contemporaneamente una pagina html con inserito un filmato flash che dovrebbe riportare la fattura completa con tutti i dati

(il filmato flash richiama e stampa a sua volta i dati della pagina script_ricerca.php).

In pratica ho usato lo stesso metodo oggetto di una delle mie discussioni precedenti, se qualcuno di voi ricorda.

La differenza consiste nel fatto che in quel caso aprivo direttamente con il bottone (o link) il filmato flash che

andava a leggere uno script php che richiamava  i dati dal db (l'ultimo inserimento che avevo fatto nel database) e avevo risolto il problema.

Ora la cosa è più complessa visto che devo inviare la variabile relativa a un link della lista e poi far aprire il filmato flash che stampa la fattura.

grazie

risposto 9 anni fa
frankphp
X 0 X

Non ho capito bene, con un link devi aprire 2 finestre: 1 con il filmato e 1 script_ricerca.php ?

Se è così non capisco l'utilità ma penso che si possa risolvere con un js, solo che non conosco l'argomento.

risposto 9 anni fa
LonelyWolf
X 0 X

Non ho capito bene, con un link devi aprire 2 finestre: 1 con il filmato e 1 script_ricerca.php ?

Se è così non capisco l'utilità ma penso che si possa risolvere con un js, solo che non conosco l'argomento.

Ciao Lon!

Sto parlando di una cosa relativa ad un'altra discussione dove credo che anche tu abbia partecipato..adesso non riesco a trovare il link.

Devo, in poche parole, cliccando sul link:

inviare la variabile.. <a href=\"script_ricerca.php?variabile=$cust\">Visualizza</a>..

ad uno script php.

Questo script è letto da un filmato flash secondo le modalità che abbiamo già trattato e che ho

preso da questo articolo:

http://www.liviogiordano.it/showarticle.php?id=1

Il problema è che adesso  vorrei (cliccando sul link Visualizza di cui sopra) inviare la variabile che contiene l'id della fattura selezionata nell'elenco allo script.php (che non deve aprirsi..non serve) e in più far aprire la pagina con il filmato flash che visualizza i dati della fattura. Il filmato flash legge tramite codice actionscript il codice php della pagina script_ricerca.php che interroga il db in base alla varibile ricevuta.

Ecco perchè mi serve inviare prima la varibile e poi far aprire la pagina con il filmato.

Mi sono venuto a trovare in una situazione simile in una delle mie discussioni precedenti (ricordi il problema della varibile che si perdeva per effetto dell'aggiornamento della pagina?).

Avevo risolto il problema (veramente eludendolo più che altro) facendo aprire una pagina di popup (direttamente cliccando su un button) che conteneva il filmato flash (che anche in questo caso richiamava lo script.php); solo che lo script in questione interrogava il db senza ricevere nessuna variabile ma semplicemente richiamando i dati dell'ultima fattura inserita cronologicamente nel database.

Adesso mi trovo "costretto" ad affrontare il problema di inviare la variabile e far aprire il filmato flash

visto che il documento da visualizzare questa volta non è per forza l'ultimo inserito nel DB.

Spero di essere stato chiaro :o

Grazie ancora

risposto 9 anni fa
frankphp
X 0 X

Ora è + chiaro, credo!

chiama nel link direttamente script_ricerca.php ed alla fine di quello script fai richiamare/includere/vedi tu la pagina con il filmato flash.

risposto 9 anni fa
LonelyWolf
X 0 X

Ora è + chiaro, credo!

chiama nel link direttamente script_ricerca.php ed alla fine di quello script fai richiamare/includere/vedi tu la pagina con il filmato flash.

 ???

Come faccio a richiamare il filmato dalla pagina script_ricerca.php?

Mi conviene usare le sessioni per non perdere il valore della variabile quando viene richiamato il filmato?

Grazie

risposto 9 anni fa
frankphp
X 0 X

Quello non te lo so dire perchè non so come interagiscono le due pagine, potresti anche usare la funzione header se la pagina script_ricerca non fa output al browser.

risposto 9 anni fa
LonelyWolf
X 0 X

ok, ho risolto il problema sul filmato flash (sta venendo fuori un programmino niente male 8))

Sono passato alla fase delle ricerche e ho fatto tesoro dei tuoi suggerimenti sul mktime

Faccio una query per richiamare un elenco di tutti i documenti che vanno da una certa data in poi (compresa la data inserita..ho usato il calendarietto di cui sopra modificandolo per le date italiane)

es: tutti i documenti dal 12/02/07:

elseif (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']!="")&&($_REQUEST['secondinput']=="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['firstinput']);
    $datain = mktime(0,0,0,$mese,$giorno,$anno);
    $tutto = "SELECT * FROM fatture where data >= '".$datain."' ORDER BY data";
    } 

visualizzo i risultati ed è tutto in ordine.

Poi faccio la query (inserendo la data solo nel campo di fine data nella pagina html) per

visualizzare tutti i documenti che vanno solo FINO a una certa data

es: tutti i docuementi fino al 15/03/07:

elseif (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']!="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['secondinput']);
    $datafin = mktime(0,0,0,$mese,$giorno,$anno);
    $tutto = "SELECT * FROM fatture where data <= '".$datafin."' ORDER BY data";
    }       

e qui c'è un problema. Visualizzo  i documenti (o meglio i link ad essi)

fino ad una certa data esclusa quella inserita,

es: documenti fino al 04/03/07 mi visualizza i documenti solo fino al 03/03/07 anche se ho messo

nella query il simbolo minore uguale.

Come mai? C'è qualcosa che mi sfugge?

Grazie e ciao

risposto 9 anni fa
frankphp
X 0 X

Forse dipende dal fatto che nel maketime hai messo come orario le 0:0:0 quindi se ci sono elementi con orario successivo non ti verranno mostrati, anche se con la stessa data.

Prova a mettere 23:59:59

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Gianni mi permetto di precisare meglio con un esempio:

tutto quello del 12/03/2007 lo componi con le ore

0:0:0 (inizio della giornata) 23:59:59 (fine della giornata)

risposto 9 anni fa
LonelyWolf
X 0 X

..hmm, strana sta cosa..provo

Grazie

risposto 9 anni fa
frankphp
X 0 X

ok O0

funziona...anche se non go capito bene le spiegazioni.  Grazie.

risposto 9 anni fa
frankphp
X 0 X

0:0:0 (h:m:s) sono l'inizio della giornata, 23:59:59 sono la fine, scatta un secondo e diventano le 0:0:0 del giorno successivo.

risposto 9 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda