Ricerca divisa per mesi

ivarello

Utente Attivo
14 Dic 2012
211
1
16
Salve ragazzi, nuovo quesito io uso questo codice php, per tirare fuori dei dati dal db

PHP:
<?php } ?>
  </p>
  <table width="600" border="0" align="center">
    <tr>
      <td width="187" align="center"><form action="cerca.php?pagina=visualizza" method="POST">
        <input type="text" name="query" />
        <input type="submit" value="Cerca" />
  </form></td>
      <td width="185" align="center"><form action="cerca_stato.php?pagina=stato" method="POST">
            <?php 
require 'voip/include/config.php';
require 'voip/include/connect.php';
$sql_voip="SELECT * FROM contratti;";
$prodotti=MYSQL_QUERY($sql_voip) or die (mysql_error()); 
echo "<select name=\"query\" id=\"query\">"; 
while($riga = mysql_fetch_array($prodotti)){ 
    $id=$riga['num_contratto']; 
    $nome=$riga['nome_account']; 
    echo "<option value=\"$id\">$nome</option>"; 
} 
echo "</select>"; 
?>
        <input type="submit" value="Cerca" />
  </form></td>
    </tr>
  </table>
  <?php
   
// richiamo il file di configurazione
require 'voip/include/config.php';

// richiamo lo script responsabile della connessione a MySQL
require 'voip/include/connect.php';

//includiamo il file della classe
require 'include/paginazione.inc.php';

//Istruzioni per la paginazione (da verificare)

$ricerca = $_POST['query'];
$stato = $_GET['pagina'];


 $min_length = 3;
    // you can set minimum length of the query if you want

   // if(strlen($ricerca) >= $min_length){ // if query length is more or equal minimum length then

        $ricerca = htmlspecialchars($ricerca);
        // changes characters used in html to their equivalents, for example: < to &gt;

        $ricerca = mysql_real_escape_string($ricerca);

// $webpage = basename($_SERVER['PHP_SELF']);

$result = mysql_query("SELECT * FROM stat_traffic
                       WHERE (`nome_phone_shop` LIKE '%".$ricerca."%') ORDER BY dataora_inizio_chiamata ASC");


//-------------istruzioni per il cerca normale--------//
if($stato == 'stato')
{

echo '
<center><table width="1440" border="0" cellpadding="5" cellspacing="10">
	<tr>
		<th bgcolor="#CEECF5">area_geografica</th>
		<th bgcolor="#CEECF5">dataora_inizio_chiamata</th>
		<th bgcolor="#CEECF5">numerazione_accesso</th>
		<th bgcolor="#CEECF5">numero_origine</th>
		<th bgcolor="#CEECF5">numero_destinazione</th>
		<th bgcolor="#CEECF5" width="350">nome_phone_shop</th>
		<th bgcolor="#CEECF5" width="100">piano_tariffario_phone_shop</th>
		<th bgcolor="#CEECF5" width="90">importo_phone_shop</th>
		<th bgcolor="#CEECF5">durata_connessione</th>
	</tr></center>';

while ($row = mysql_fetch_assoc($result)) {
	$area_geografica       		 = htmlentities($row['area_geografica']);
	$dataora_inizio_chiamata     = htmlentities($row['dataora_inizio_chiamata']);
	$numerazione_accesso 	     = htmlentities($row['numerazione_accesso']);
	$numero_origine   		     = htmlentities($row['numero_origine']);
	$numero_destinazione         = htmlentities($row['numero_destinazione']);
	$nome_phone_shop   			 = htmlentities($row['nome_phone_shop']);
	$piano_tariffario_phone_shop = htmlentities($row['piano_tariffario_phone_shop']);
	$importo_phone_shop          = htmlentities($row['importo_phone_shop']);
	$durata_connessione 	     = htmlentities($row['durata_connessione']);


echo "<tr>
			<td bgcolor='#EFF5FB'><center>$area_geografica</center></td>
			<td bgcolor='#F2FBEF'><center>$dataora_inizio_chiamata</center></td>
			<td bgcolor='#EFF5FB'><center>$numerazione_accesso</center></td>
			<td bgcolor='#EFF5FB'><center>$numero_origine</center></td>
			<td bgcolor='#F2FBEF'><center>$numero_destinazione</center></td>
			<td bgcolor='#EFF5FB'><center>$nome_phone_shop</center></td>
			<td bgcolor='#EFF5FB'><center>$piano_tariffario_phone_shop</center></td>
			<td bgcolor='#F2FBEF'><center>$importo_phone_shop €</center></td>
			<td bgcolor='#EFF5FB'><center>$durata_connessione min</center></td>
			</center>
			</td>
		</tr>";
}

echo '</table>';


// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);

}

?>

vorrei oltre che poter dividere le ricerche in mesi cioè tipo gennaio 2013, febbraio 2013 ecc, ed ogni sezione contenga i dati di quel periodo.
 
Ultima modifica di un moderatore:
il formato della data è così "10-01-2013 17:02:26"

La tabella è così

CREATE TABLE `stat_traffic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`area_geografica` varchar(255) DEFAULT NULL,
`dataora_inizio_chiamata` varchar(255) DEFAULT NULL,
`numerazione_accesso` varchar(255) DEFAULT NULL,
`numero_origine` varchar(255) DEFAULT NULL,
`numero_destinazione` varchar(255) DEFAULT NULL,
`nome_phone_shop` varchar(255) DEFAULT NULL,
`piano_tariffario_phone_shop` varchar(255) DEFAULT NULL,
`importo_phone_shop` varchar(255) DEFAULT NULL,
`durata_connessione` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2001 DEFAULT CHARSET=latin1;
 
ciao
secondo me è un po' un ca..no dovuto al fatto che (come tanti) hai messo la data in formato umano e di più in italiano (dd-mm-YY H:i:s)
avendo messo la data varchar il confronto viene fatto tra stringhe, facciamo un esempio che tu voglia esterre il mese di gennaio 2013
la prima idea che ti viene è che la dara sia compresa tra
maggiore di 01-01-2013 00:00:00
e
minore di 31-01-2013 59:59:59

che sembrerebbe una cosa giusta, ma con un "piccolo" difetto
la data (es) 12-03-2013 44:33:55, essendo un confronto tra stringhe e compresa in quell'intervallo, ma non dovrebbe
come minimo (per il confronto tra stringhe) la data dovrebbe essere nel formato YY-mm-dd H:i:s
in questo caso l'interrogazione diventerebbe
maggiore di 2013-01-01 00:00:00
minore di 2013-01-31 59:59:59
in questo caso la data dell'esempio (messa in nel formato YY-mm-dd H:i:s) 2013-03-12 44:33:55 sarebbe fuori dall'intervallo considerato, come giusto

quindi per prima cosa dovresti modificare il settaggio del campo della data, in formato date o (io lo preferisco a tutti) in formato intero, int(15), usando il timestamp unix.

la data poi, quando devi visualizzarla o stamparla (e solo allora) la trasformi in umano italiano
 
ok ho seguito il tuo consiglio ora come dovrei approcciarmi per fare una divisione per mese? Grazie ancora
 
ciao
eccoti un'idea, comunque da mettere a punto
PHP:
<?php
//.....
if(isset($_POST['cerca'])){
	if($_POST['mese']=="" || $_POST['anno']==""){
		//messaggio e ritorno al form
	}else{//mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
		//trasformo in timestamp
		$da=mktime(0,0,0,(int)($_POST['mese'],31,$_POST['anno']);//qui probabilmente devi provare se va bene 31 o 30 o 28 o 29 in funzione del mese
		$a=mktime(59,59,59,int($_POST['mese'],1,$_POST['anno']);
		$query="SELECT * FROM tua_tabella WHERE data >= $da AND data <= $a ORDER BY data";//oppure usando BETWEN
		//ecc.....
	}
//.....
}
//........
?>

PHP:
<?php
$mesi=array('01'=>'gen','02'=>'feb','12'=>'dic');//i rimanenti li metti tu -  o forse meglio array(1=>'gen',....
?>
<form action="pinco_pallo.php" method="post">
mese <select name="mese">
	<option value="">- seleziona mese-</option>
<?php
foreach($mese as $num => $nome){
  echo "<option value=\"$num\">$nome</option>";
}
?>
</select><br />
anno<select name="anno">
	<option value="">- seleziona anno-</option>
<?php
for($aa=2013; $aa <2020; $aa++){
  echo "<option value=\"$aa\">$aa</option>";
}
?>
</select><br />
<input name="cerca" type="submit" id="cerca" value="cerca">
</form>

l'ho spezzato in due ma puoi fare tutto nella stessa pagina
 
Ultima modifica:
cacchio problemone, dato che devo popolare il database con un csv che inserisce la data con questo formato, 01/01/2013 20:57, non c'è la possibilità di convertirlo in timestap prima dell'inserimento?
Ti faccio vedere che codice uso per uppare il csv:

PHP:
include "include/config.php"; //Connect to Database
include "include/connect.php"; //Connect to Database
 
$deleterecords = "TRUNCATE TABLE tablename"; //empty the table of its current records
mysql_query($deleterecords);
 
//parte dedicata all'upload
if (isset($_POST['submit'])) {

        if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
				// permette la visualizzazione di un messaggio di successo
                echo "</br>" ."<h1>" . "<center>" ."File ". $_FILES['filename']['name'] ." Upload avvenuto con successo." ."</center>". "</h1>";
                // modalità verbosa disttivata - per attivarla levare le slash
                //readfile($_FILES['filename']['tmp_name']);
				//redirect alla home page dopo 5 secondi
				header( "refresh:5;url=index.html" );
        }
 
        //importa il file csv nel database
        $handle = fopen($_FILES['filename']['tmp_name'], "r");
		//salta la prima riga
		$data = fgetcsv($handle, 1000, ";"); 
 		//se si fa partire da '$data[1]' invece '$data[0]' si salta la prima colonna
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
                $import="INSERT into stat_traffic (area_geografica, dataora_inizio_chiamata,  numerazione_accesso, numero_origine, numero_destinazione, nome_phone_shop, piano_tariffario_phone_shop, importo_phone_shop, durata_connessione) values('$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]')";
 
                mysql_query($import) or die(mysql_error());
        }
		
 
        fclose($handle);
 
        print "</br>" ."<h3>" . "<center>" . "<blink>"."Importazione avvenuta con successo"."</blink>" ."</center>". "</h3>" ."</br>";
 
        //view upload form
}
else 
{
        header( "refresh:5;url=index.html" );
}

 
?>
</div>
 
ciao
si è un problemone, essendo un csv immagino che provenga da un foglio excel, perchè (sempre problema è) se è l'esprtazione da una tabella mysql avresti potuto esportarlo in sql.
comunque quello che mi viene in mente così su due piedi è importare il csv in una tabella chiamata (es) transito,
leggere i record della tabella transito, trasformare la data in timestamp e fare l'insert nella tabella definitiva, poi la transito o la elimini o la vuoti (se devi fare altre inport)
 
Mica male come idea solo non essendo espertissimo non saprei come trasformare la data dopo, puoi darmi una mano?
 
ciao
ecco un'idea, comunque guarda che non ho scritto tutto (leggi i commenti)
PHP:
<?php
/* tabelle
CREATE TABLE `transito` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`area_geografica` varchar(255) DEFAULT NULL,
`dataora_inizio_chiamata` varchar(255) DEFAULT NULL,//qui devi lasciare varchar
`numerazione_accesso` varchar(255) DEFAULT NULL,
`numero_origine` varchar(255) DEFAULT NULL,
`numero_destinazione` varchar(255) DEFAULT NULL,
`nome_phone_shop` varchar(255) DEFAULT NULL,
`piano_tariffario_phone_shop` varchar(255) DEFAULT NULL,
`importo_phone_shop` varchar(255) DEFAULT NULL,
`durata_connessione` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2001 DEFAULT CHARSET=latin1;

CREATE TABLE `stat_traffic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`area_geografica` varchar(255) DEFAULT NULL,
`dataora_inizio_chiamata` int(15) DEFAULT NULL,//mentre qui intero
`numerazione_accesso` varchar(255) DEFAULT NULL,
`numero_origine` varchar(255) DEFAULT NULL,
`numero_destinazione` varchar(255) DEFAULT NULL,
`nome_phone_shop` varchar(255) DEFAULT NULL,
`piano_tariffario_phone_shop` varchar(255) DEFAULT NULL,
`importo_phone_shop` varchar(255) DEFAULT NULL,
`durata_connessione` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2001 DEFAULT CHARSET=latin1;
*/
//connessione al db
$ris=mysql_query("SELECT * FROM transito OREDR BY id");
while($riga=mysql_fetch_array($ris)){
	$area=$riga['area_geografica'];
	$data=$riga['dataora_inizio_chiamata'];//penso che sia questa gg/mm/YY H:i )non ci sono i secondi?)
	//trasformo la data
	$ex_1=explode(" ",$data);//divido gg/mm/YY da H:i explodendo per lo spazio
	$ex_gmy=explode("/",$ex_1[0]);//separo gg mm e yy  explodendo per la /
	$ex_hms=explode(":",$ex_1[1]);//separo le ore dai minuti explodendo per i :
	$sec=0;//se invece era H:i:s $sec=$ex_hms[2];
	$min=(int)$ex_hms[1];
	$ore=(int)$ex_hms[0];
	$gg=(int)$ex_gmy[0];
	$mm=(int)$ex_gmy[1];
	$aa=(int)$ex_gmy[2];
	//mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
	$data_ts=mktime($ore,$min,$sec,$mm,$gg,$aa);
	//e tutti gli altri campi.....
	//anche qui non te li metto tutti
	$query="INSERT INTO stat_traffic(area_geografica, dataora_inizio_chiamata)
	VALUES('$area','$data_ts')";
	$ris_inserimento=mysql_query($query);
	//......
}
//....
?>
comunque devi esssere sicuro che la data sia gg/mm/yyyy H:i cioè gg mm e yy separati da h e i con uno spazio e i separatore dei gg mm yy la / e tra ore e minuti i : altrimenti gli explode non funziano

p.s.
non c'entra con quanto sopra, ma ho guardato il tuo primo script: perche fai due volte la stessa inclusione?

require 'voip/include/config.php';
require 'voip/include/connect.php';
 
Grazie, questa sera appena torno da lavoro provo e ti faccio sapere per quanto riguarda quei due file, ho solo diviso la connessione al db così per divertimento:

config.php

PHP:
<?php
$DB_host     = 'localhost';
$DB_user     = '******';
$DB_password = '*******';
$DB_name     = '*******';

?>

connect.php

PHP:
<?php
$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
	die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
	die ("Errore nella selezione del database: " . mysql_error());
}
?>
 
Ciao ho provato il codice e l'ho modificato così

PHP:
//connessione al db 
include "include/config.php"; //Connect to Database
include "include/connect.php"; //Connect to Database
$ris=mysql_query("SELECT * FROM transito OREDR BY id"); 
while($riga=mysql_fetch_array($ris)){ 
    $area=$riga											['area_geografica']; 
    $data=$riga											['dataora_inizio_chiamata'];//penso che sia questa gg/mm/YY H:i )non ci sono i secondi?) 
	$accesso=$numerazione_accesso 	      			  	['numerazione_accesso'];
	$origine=$numero_origine  		      			    ['numero_origine'];
	$destinazione=$numero_destinazione       		    ['numero_destinazione'];
	$phone_shop=$nome_phone_shop  			   		    ['nome_phone_shop'];
	$tariffariop=$piano_tariffario_phone_shop   		['piano_tariffario_phone_shop'];
	$importo=$importo_phone_shop            			['importo_phone_shop'];
	$durata=$durata_connessione 	        			['durata_connessione'];
    //trasformo la data 
    $ex_1=explode(" ",$data);//divido gg/mm/YY da H:i explodendo per lo spazio 
    $ex_gmy=explode("-",$ex_1[0]);//separo gg mm e yy  explodendo per la / --------------------Ho messo "-" perchè la data è in questo formato 10-02-2012 non 10/02/2012
    $ex_hms=explode(":",$ex_1[1]);//separo le ore dai minuti explodendo per i : 
    $sec=0;//se invece era H:i:s $sec=$ex_hms[2]; 
    $min=(int)$ex_hms[1]; 
    $ore=(int)$ex_hms[0]; 
    $gg=(int)$ex_gmy[0]; 
    $mm=(int)$ex_gmy[1]; 
    $aa=(int)$ex_gmy[2]; 
    //mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] ) 
    $data_ts=mktime($ore,$min,$sec,$mm,$gg,$aa); 
    //e tutti gli altri campi..... 
    //anche qui non te li metto tutti 
    $query="INSERT INTO stat_traffic(area_geografica, dataora_inizio_chiamata, numerazione_accesso, numero_origine, numero_destinazione, nome_phone_shop, piano_tariffario_phone_shop, importo_phone_shop, durata_connessione) 
    VALUES('$area','$data_ts','$accesso','$origine','$destinazione','$phone_shop','$tariffariop','$importo','$durata')"; 
    $ris_inserimento=mysql_query($query); 
    //...... 
} 
//.... 
?>

Lancio il file php ma non succede niente :S ma non è perchè forse la data è espressa in 2013 invece che 13?
Per quanto riguarda i secondi non ci sono ;)
 
Ultima modifica:
ciao
intanto avevo fatto un errore di battitura, correggi
$ris=mysql_query("SELECT * FROM transito OREDR BY id");
in
$ris=mysql_query("SELECT * FROM transito ORDER BY id");
guarda se era quello
ma non è perchè forse la data è espressa in 2013 invece che 13?
per trasformare deve essere l'anno completo altrimenti come capisce che è il 2013 al posto (es.) del 1913?
comunque ora guardo il resto
 
che scemo era quello l'errore e questo

PHP:
while($riga=mysql_fetch_array($ris)){ 
    $area=$riga											['area_geografica']; 
    $data=$riga											['dataora_inizio_chiamata'];//penso che sia questa gg/mm/YY H:i )non ci sono i secondi?) 
	$accesso=$riga	      							  	['numerazione_accesso'];
	$origine=$riga 		      						    ['numero_origine'];
	$destinazione=$riga      						    ['numero_destinazione'];
	$phone_shop=$rigap  					   		    ['nome_phone_shop'];
	$tariffariop=$rigap   								['piano_tariffario_phone_shop'];
	$importo=$riga           							['importo_phone_shop'];
	$durata=$riga	        							['durata_connessione'];

Invece che

PHP:
  $durata=$durata_connessione                         ['durata_connessione'];

mi sono dimenticato la variabile $riga heheheh, ora sembra che funzioni poi ti faccio sapere i risultati ;)
 
ciao
scusa una cosa, perchè scrivi così?
PHP:
$durata=$riga                        ['durata_connessione'];//o ['qualsiasi_altro']
considera che $riga è una variabile array e che
PHP:
$riga['durata_connessione'];
è un suo elemento, non che cambi in quanto php ignora gli spazi, ma scriverla attaccata è la sua sintassi
 
Ciao ho modificato il codice della ricerca perchè c'era qualche errore nel form, ma la parte php della funzione non va riesci a capire perchè

cerca_quando.php
PHP:
<?php
<?php
$mesi=array('01'=>'gen','02'=>'feb','03'=>'mar','04'=>'apr','05'=>'mag','06'=>'giu','07'=>'lug','08'=>'ago','09'=>'set','10'=>'ott','11'=>'nov','12'=>'dic');
?>
<form action="cerca_data_2.php" method="post">
mese <select name="mese">
    <option value="">- seleziona mese-</option>
<?php
foreach($mesi as $num => $nome){
  echo "<option value=\"$num\">$nome</option>";
}
?>
</select><br />
anno<select name="anno">
    <option value="">- seleziona anno-</option>
<?php
for($aa=2013; $aa <2020; $aa++){
  echo "<option value=\"$aa\">$aa</option>";
}
?>
</select><br />
<input name="cerca" type="submit" id="cerca" value="cerca">
</form>

cerca_quando_2.php

PHP:
<?php
//.....
include "include/config.php"; //Connect to Database
include "include/connect.php"; //Connect to Database
if(isset($_POST['cerca'])){
    if($_POST['mese']=="" || $_POST['anno']==""){
        //messaggio e ritorno al form
    }else{//mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
        //trasformo in timestamp
        $da=mktime(0,0,0,(int)($_POST['mese'],31,$_POST['anno']);//qui probabilmente devi provare se va bene 31 o 30 o 28 o 29 in funzione del mese
        $a=mktime(59,59,59,int($_POST['mese'],1,$_POST['anno']);
        $query="SELECT * FROM stat_traffic WHERE dataora_inizio_chiamata >= $da AND dataora_inizio_chiamata <= $a ORDER BY dataora_inizio_chiamata";//oppure usando BETWEN
        //ecc.....
    }
//.....
}
//........
?>
 
Ultima modifica:
ciao
scusa, ma ogni tanto mi confondo :(, il mese va "da 1" sino "al 31" (e non viceversa) ho invertito 1 con 31 e ho messo il gg di 59 ore :( pensare che me l'ero scritto anche sopra nel commento
quindi correggi
PHP:
<?php
        $da=mktime(0,0,0,(int)($_POST['mese'],31,$_POST['anno']);
        $a=mktime(59,59,59,int($_POST['mese'],1,$_POST['anno']);
?>
in
PHP:
<?php
        $da=mktime(0,0,0,(int)($_POST['mese'],1,$_POST['anno']);
        $a=mktime(23,59,59,int($_POST['mese'],31,$_POST['anno']);
?>
per forsa non trova nulla. prova e sappimi dire
 
La cosa strana che da errore proprio nel codice, quando carica la pagina php da errore :S
 

Discussioni simili