- Home
- Categorie
- Coding e Sistemistica
- PHP
- sito dinamico
-
Bene ragazzi chi vuole partecipare al nuovo quiz????
devo fare una pagina di report che prende i dati dal database e mi scriva una tabella (es. fatto/non fatto) e che abbia come titolo delle colonne un calendario mensile o meglio con un range temporale stabilito dall'utente.
Per capirci graficamente dovrebbe essere:
| Range scelto dall'utente | |-------------------------| |1 |2 |3 |.............|31| |lun|mar|mer|.............|lun|
Campo estratto dal db| V | V | X |.............| V |
Campo estratto dal db| X | V | X |.............| X |
Dove V = fatto e X = nonn fatto
Io riesco a estrapolare i dati ma non riesco a creare la tabella con il calendario.
CHI mi sa aiutare?????:?:?:?:?:?
-
scusate si era formattato male
@@@@@@@@@@@| Range scelto dall'utente |
@@@@@@@@@@@|-------------------------|
@@@@@@@@@@@|1 |2 |3 |.............|31|
@@@@@@@@@@@|lun|mar|mer|.............|lun|Campo estratto dal db| V | V | X |.............| V |
Campo estratto dal db| X | V | X |.............| X |
-
:?credo che se ci fai un esempio di cosa tiri fuori dalla tabella del database sia meglio, ovvero, che campi tiri fuori??
-
Allora i dati estratti dal db sono voci divisi in tre colonne + il calendario del fatto/non fatto:
-la 1° colonna rigurda gli AMBITI
-la 2° colonna rigurda gli SOTTOAMBITI
-la 3° colonna rigurda gli MACROATTIVITA'
-ed infine il CALENDARIO.I dati gli ho estratti bene con una mega query però il mio problema riguarda il calendario perchè io volevo creare una pagina di report dove l'utente sceglieva tramite un form l'intervallo di tempo di suo interesse ed il report mi dovrebbe mostrare le prime tre colonne sopra citate e poi questo diavolo di calendario che mostra l'intervallo scelto su una sola riga indicante il giorno (es lun 3) e i valori immessi dentro questo calendario sono V=fatto e X=non fatto dove anche questi dati sono estrapolati dal db.
GRAFICAMENTE DOVREBBE ESSERE COSI':
AMBITO|SOTTOAMBITO|MACROATTIVITA|CALENDARIO|
precisamente il calendario dovrebbe essere così:
se l'utente scegliesse 10-01-2008 e 15-01-2008 visivamente vorrei ottenere una cosa del genere
@@@@@@@@@@Gennaio@@@@@@@@@@
Gio 10|Ven 11|Sab 12|Dom 13|Lun 14|Mar 15|
@@@@@@@@@@@@@@@@@@@@@@@@
V | X | X | X | V | V |
@@@@@@@@@@@@@@@@@@@@@@@@spero che ora mi sia spiegato meglio.
Mi sai dare una bella dritta???
-
O mi sfugge cosa tu intenda per calendario (cosa che non escludo) o credo di aver capito che la tua tabella su Db abbia i seguenti campi:
campi tabella:Ambito - Sottoambito - macroattività - campodata - spuntaè così?
-
questo primo codice report_between.php permette di immettere le due date dell'intervallo di tempo preso in questione ed inoltre è presente un calendario in php di pura illustrazione
[HTML]
<link href="stile.css" rel="stylesheet" type="text/css" />
<?php
include ("config.php");
include ("basetop.php");
?><div class="box_top"><br/> <div class="box_top_botton"> <?php $servizio=$_REQUEST['servizio']; $area=$_REQUEST['area']; $aop=$_REQUEST['aop']; $aop_s=$_REQUEST['aop_s']; $sotta=$_REQUEST['sotta']; $sotta_s=$_REQUEST['sotta_s']; $matt=$_REQUEST['matt']; $matt_s=$_REQUEST['matt_s']; $data=$_REQUEST['data']; ?> <!--<a href="index.php" title="Servizi" style='color: #990000'> Servizi </a>> <a href="aree.php?servizio=<?php echo"$servizio";?>" title="Aree" style='color:'> Aree di <?php echo"$servizio";?> </a>> <a href="aop.php?servizio=<?php echo"$servizio";?>&area=<?php echo"$area";?>" title="Ambito Operativo" style='color:'> Ambiti Operativi di <?php echo"$area";?> </a>> <a href="sotta.php?servizio=<?php echo"$servizio";?>&area=<?php echo"$area";?>&aop=<?php echo"$aop";?>&aop_s=<?php echo"$aop_s";?>" title="Sottoambito Operativo" style='color:'> Sottoambiti Operativi di <?php echo"$aop_s";?> </a>> <a href="matt.php?servizio=<?php echo"$servizio";?>&area=<?php echo"$area";?>&aop=<?php echo"$aop";?>&aop_s=<?php echo"$aop_s";?>&sotta=<?php echo"$sotta";?>&sotta_s=<?php echo"$sotta_s";?>" title="Macro Attività" style='color:'> Macro Attività di <?php echo"$sotta_s";?> </a>--> </div> <div class="box_top_title"> <b>Scelta date</b> </div> <div class="box_top_login"> <a href="login_page.php" title="Amministrazione" style='color: #666666; margin-right:10px;'> <b>Amministrazione</b></a> </div> </div> <div class="box_select"> <div class="box_select_title"> <div class="box_select_attivity"> <form action="result_report_between.php" method="post"> <b>Intervallo data:</b><br/><br/><br/> <table> <tr> <td></td> <td><b>GG</b></td> <td><b>MM</b></td> <td><b>AAAA</b></td> </tr> <tr> <td>data inizio</td> <td><input type="text" name="d1" size=2 maxlength=2 value="<? echo $d1?>"></td> <td><input type="text" name="m1" size=2 maxlength=2 value="<? echo $m1;?>"></td> <td><input type="text" name="y1" size=4 maxlength=4 value="<? echo $y1;?>"></td> </tr> <tr> <td>data fine</td> <td><input type="text" name="d2" size=2 maxlength=2 value="<? echo $d2?>"></td> <td><input type="text" name="m2" size=2 maxlength=2 value="<? echo $m2;?>"></td> <td><input type="text" name="y2" size=4 maxlength=4 value="<? echo $y2;?>"></td> </tr> </table> <br/><br/><input type="submit" value="Invia"> </form> <div class="box_select_calendar"> <?php function calendario($mese,$anno){
global $_GET;
if ($GET['x'] == NULL){
$mese = $mese;
$anno_ = $anno;
}
else{
$mese_ = (int)strftime( "%m" ,(int)$GET['x']);
$anno = (int)strftime( "%Y" ,(int)$GET['x']);
$mese = $mese;
$anno = $anno_;
}$prev = mktime(0, 0, 0, $mese_ -1, 1, $anno_);
$next = mktime(0, 0, 0, $mese_ +1, 1, $anno_);$human_month = array("error", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" );
$settimana = array("Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom");
$colonne = 7;
$giorni = date("t",mktime(0, 0, 0, $mese, 1, $anno)); //giorni del mese in questione
$primo_lunedi= date("w",mktime(0, 0, 0, $mese, 1, $anno)); //Array_parte da 0if($primo_lunedi==0){
$primo_lunedi = 7;
}print("<table width="210" colspacing="0" border="0">"); //table
print("<tr height="20">\n\t\t<td colspan="".$colonne."" align="center"><a href="?x=".$prev.""style='color:' title='Mese precedente'><<</a> <b><span style='color:'>".$human_month[(int)$mese]." ".$anno_."</span></b> <a href="?x=".$next.""style='color:' title='Mese successivo'>>></a></td></tr><tr>");foreach($settimana as $val){
print("<td height="20" style='color:'><b>".$val."</b></td>");
}
print("</tr>");for($i = 1; $i<$giorni+$primo_lunedi; $i++){
if($i%$colonne+1==0){
print("<tr>");
}
if($i<$primo_lunedi){
print("<td> </td>");
}
else{
$giorno_= $i-($primo_lunedi-1);
$a = strtotime(date($anno_."-".$mese_."-".$giorno_));
$b = strtotime(date("Y-m-d"));
if($a != $b){
print("<td style='color: #FFFFFF'>".$giorno_."</td>");
}
else{
print("<td><b>[".$giorno_."]</b></td>");
}
}
if($i%$colonne==0){
print("</tr>");
}
}
print("<tr height="30"> </tr>");
print("</table>");
}calendario(date("m"),date("Y"));
?>
</div>
</div><?php
include ("basebottom.php");
?>[/HTML]
poi c'è il result_report_between.php
[HTML]
<link href="stile.css" rel="stylesheet" type="text/css" />
<?php
include ("config.php");
include ("basetop.php");
?><div class="box_top"><br/> <div class="box_top_botton"> <?php $servizio=$_REQUEST['servizio']; $area=$_REQUEST['area']; $aop=$_REQUEST['aop']; $aop_s=$_REQUEST['aop_s']; $sotta=$_REQUEST['sotta']; $sotta_s=$_REQUEST['sotta_s']; $matt=$_REQUEST['matt']; $matt_s=$_REQUEST['matt_s']; $data=$_REQUEST['data']; ?> <!--<a href="index.php" title="Servizi" style='color:'> Servizi </a>> <a href="aree.php?servizio=<?php echo"$servizio";?>" title="Aree" style='color:'> Aree di <?php echo"$servizio";?> </a>> <a href="aop.php?servizio=<?php echo"$servizio";?>&area=<?php echo"$area";?>" title="Ambito Operativo" style='color:'> Ambiti Operativi di <?php echo"$area";?> </a>> <a href="sotta.php?servizio=<?php echo"$servizio";?>&area=<?php echo"$area";?>&aop=<?php echo"$aop";?>&aop_s=<?php echo"$aop_s";?>" title="Sottoambito Operativo" style='color:'> Sottoambiti Operativi di <?php echo"$aop_s";?> </a>> <a href="matt.php?servizio=<?php echo"$servizio";?>&area=<?php echo"$area";?>&aop=<?php echo"$aop";?>&aop_s=<?php echo"$aop_s";?>&sotta=<?php echo"$sotta";?>&sotta_s=<?php echo"$sotta_s";?>" title="Macro Attività" style='color:'> Macro Attività di <?php echo"$sotta_s";?> </a>--> </div> <div class="box_top_title"> <b>Report</b> </div> <div class="box_top_login"> <a href="login_page.php" title="Amministrazione" style='color:; margin-right:10px;'> <b>Amministrazione</b></a> </div> </div> <div class="box_select"> <div class="box_select_title"> <div class="box_select_attivity"> <?php $query_ins = "SELECT S_A_OP AS Ambito_Operativo,S_SOTT_A AS Sottoambito_Operativo,S_M_ATT AS Macro_Attività,DATA AS Data,BANCA AS Banca
FROM t_a_op INNER JOIN tl_a_op_sott_a ON t_a_op.ID_A_OP=tl_a_op_sott_a.ID_A_OP INNER JOIN t_sott_a ON tl_a_op_sott_a.ID_SOTT_A=t_sott_a.ID_SOTT_A INNER JOIN tl_sott_a_m_att_proc ON t_sott_a.ID_SOTT_A=tl_sott_a_m_att_proc.ID_SOTT_A INNER JOIN t_m_att ON tl_sott_a_m_att_proc.ID_M_ATT=t_m_att.ID_M_ATT INNER JOIN tdi_cpn ON t_m_att.ID_M_ATT=tdi_cpn.ID_M_ATT WHERE DATA BETWEEN '01012008' AND '31012008' ORDER BY DATA";
if(@mssql_query($query_ins)) { //echo "<p>QUERY ESATTA</p>"; $tree_mssql=@mssql_query($query_ins,$link); while($row=mssql_fetch_array($tree_mssql,MSSQL_BOTH)){ echo $row['Ambito_Operativo']."<hr style:'layout-flow:vertical-ideografic'/> "; echo $row['Sottoambito_Operativo']."<hr style:'layout-flow:vertical-ideografic'/> "; echo $row['Macro_Attività']." "; echo $row['Data']." "; echo $row['Banca']."<hr/>"; } //Inizio codice per la stampa del calendario $d1=$_POST['d1']; //Recupero la variabile globale del primo giorno $m1=$_POST['m1']; //Recupero la variabile globale del primo mese $y1=$_POST['y1']; //Recupero la variabile globale del primo anno $data1=mktime(0,0,0,$m1,$d1,$y1); $d2=$_POST['d2']; //Recupero la variabile globale del secondo giorno $m2=$_POST['m2']; //Recupero la variabile globale del secondo mese $y2=$_POST['y2']; //Recupero la variabile globale del secondo anno $data2=mktime(0,0,0,$m2,$d2,$y2); $giorni = array("Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"); $mesi = array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre","Novembre", "Dicembre"); if ($d1==null or $m1==null or $y1==null or $d2==null or $m2==null or $y2==null){ //Proseguo se almeno un numero è non definito echo "<br/>Hai commesso un errore nell'immisione di almeno una data!"; //Stampa l'errore }else { $numero_giorno_settimana1 = date("w",mktime(0,0,0,$m1,$d1,$y1)); $nome_giorno1 = $giorni[$numero_giorno_settimana1]; $numero_mese1= date("n",mktime(0,0,0,$m1,$d1,$y1)); $numero_mese1--; $nome_mese1 = $mesi[$numero_mese1]; echo "<br/>dal $nome_giorno1".date(" d",mktime(0,0,0,$m1,$d1,$y1))." $nome_mese1".date(" Y",mktime(0,0,0,$m1,$d1,$y1)).""; $numero_giorno_settimana2 = date("w",mktime(0,0,0,$m2,$d2,$y2)); $nome_giorno2 = $giorni[$numero_giorno_settimana2]; $numero_mese2= date("n",mktime(0,0,0,$m2,$d2,$y2)); $numero_mese2--; $nome_mese2 = $mesi[$numero_mese2]; echo " al $nome_giorno2".date(" d",mktime(0,0,0,$m2,$d2,$y2))." $nome_mese2".date(" Y",mktime(0,0,0,$m2,$d2,$y2))."<br/><br/>"; $tot_day=((($data2-$data1)/(24*60*60))+1);//il +1 serve per far contare il primo giorno dell'intervallo (es. 3-1=2 ma i val sono 1 2 3 => 3) //echo"<br/>$data2<br/>"; //echo"<br/>$data1<br/>"; //echo "<br/>$tot_day<br/>"; $data_count=$data1; while($data_count <= $data2){ $count=getdate($data_count); $w_count= $count['wday']; $m_count= $count['mon']; $d_count= $count['mday']; $y_count= $count['year']; if($d_count <= mktime(0,0,0,0,0,$y_count)){//se è prima dell'ultimo dell'anno if($d_count <= mktime(0,0,0,$m_count,0,$y_count)){//se è prima dell'ultimo del mese $nome_giorno =$giorni[$w_count]; echo " $nome_giorno".date(" d|",mktime(0,0,0,$m_count,$d_count,$y_count)).""; $data_count=mktime(0,0,0,$m_count,$d_count+1,$y_count); }else {//se è il primo del mese successivo $nome_giorno =$giorni[$w_count]; echo " $nome_giorno".date(" d|",mktime(0,0,0,$m_count,$d_count,$y_count)).""; $data_count=mktime(0,0,0,$m_count+1,$d_count+1,$y_count); } }else {//se è il primo dell'anno successivo $nome_giorno =$giorni[$w_count]; echo " $nome_giorno".date(" d|",mktime(0,0,0,$m_count,$d_count,$y_count)).""; $data_count=mktime(0,0,0,$m_count+1,$d_count+1,$y_count+1); } } }//Fine codice per la stampa del calendario }else { echo "<p>QUERY ERRATA </p>"; } mssql_close($link); ?> </div>
<?php
include ("basebottom.php");
?>[/HTML]
che fa una query funzionante sul db e poi io ho buttato giu un po' di codice che mi stampa a video i titoli del calendario
-
Credo di non essere in grado di aiutarti pardon
-
Scusatemi ragazzi ma ero in grossi casini ma sono riuscito ad ottenere il risultato voluto grazie anche a Digital Daigor.
Ho cretato una tabella temporanea sulla quale dopo faccio i confronti con le date del calendario dell'intervallo scelto dall'utente, stampo a video e cancello la tabella temporanea.
Così forse non si capisce molto ma forse con il codice....creazione della tabella temporanea
[PHP]
/inizio creazione tabella temporanea
$today=date("dmY");
$tmp_name_table="$id_area_user$today$id_username";//manca variabile scelta prima pagina
//echo "<br/>$tmp_name_table<br/>";$create_tmp_table="CREATE TABLE $tmp_name_table( N_SERV VARCHAR(40) NOT NULL, N_AREA VARCHAR(40) NOT NULL, N_A_OP VARCHAR(50) NOT NULL, N_SOTT_A VARCHAR(50) NOT NULL, ID_M_ATT INT NOT NULL, S_M_ATT VARCHAR(10) NOT NULL, N_M_ATT VARCHAR(200) NOT NULL, B_S VARCHAR(50) NOT NULL)";//query che crea la tabella temporanea sul db con stringhe di testo
[/PHP]
poi inserisco i dati nella tabella creatapoi creo la stringa con le date da scrivere nella prima riga della tabella da stampare a video
[PHP]
//crei un array con tutte le date//Inizio codice per la stampa del calendario $d1=$_POST['d1']; //Recupero la variabile globale del primo giorno $m1=$_POST['m1']; //Recupero la variabile globale del primo mese $y1=$_POST['y1']; //Recupero la variabile globale del primo anno $data1=mktime(0,0,0,$m1,$d1,$y1); $d2=$_POST['d2']; //Recupero la variabile globale del secondo giorno $m2=$_POST['m2']; //Recupero la variabile globale del secondo mese $y2=$_POST['y2']; //Recupero la variabile globale del secondo anno $data2=mktime(0,0,0,$m2,$d2,$y2); $giorni = array("Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"); $tot_day=((($data2-$data1)/(24*60*60))+1);//il +1 serve per far contare il primo giorno dell'intervallo (es. 3-1=2 ma i val sono 1 2 3 => 3) $mesi = array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre","Novembre", "Dicembre"); if ($d1==null or $m1==null or $y1==null or $d2==null or $m2==null or $y2==null){ //Proseguo se almeno un numero è non definito echo "<br/>Hai commesso un errore nell'immisione di almeno una data!"; //Stampa l'errore }else { $numero_giorno_settimana1 = date("w",mktime(0,0,0,$m1,$d1,$y1)); $nome_giorno1 = $giorni[$numero_giorno_settimana1]; $numero_mese1= date("n",mktime(0,0,0,$m1,$d1,$y1)); $numero_mese1--; $nome_mese1 = $mesi[$numero_mese1]; echo "da <b>$nome_giorno1".date(" d/m/Y",mktime(0,0,0,$m1,$d1,$y1))."</b>"; $numero_giorno_settimana2 = date("w",mktime(0,0,0,$m2,$d2,$y2)); $nome_giorno2 = $giorni[$numero_giorno_settimana2]; $numero_mese2= date("n",mktime(0,0,0,$m2,$d2,$y2)); $numero_mese2--; $nome_mese2 = $mesi[$numero_mese2]; echo " al <b>$nome_giorno2".date(" d/m/Y",mktime(0,0,0,$m2,$d2,$y2))."</b>";//stampa il range scelto dall'utente $data_count=$data1; ?> </div> <div class="box_select_activity"> <?php //Inizio della tabella echo "<table class='table1' ><tr>"; $prima_r = "<td class='td2'><b>Servizio</b></td><td class='td2'><b>Area</b></td><td class='td2'><b>Ambito</b></td><td class='td2'><b>Sottoambito</b></td><td class='td2'><b>Macroattivita</b></td><td class='td2'><b>Banca/Service</b></td>"; //crei un array con tutte le date $data_check = array();//creazione dell'array contenente le date while($data_count <= $data2){ $count=getdate($data_count); $w_count= $count['wday']; $m_count= $count['mon']; $d_count= $count['mday']; $y_count= $count['year']; if($d_count <= mktime(0,0,0,0,0,$y_count)){//se è prima dell'ultimo dell'anno if($d_count <= mktime(0,0,0,$m_count,0,$y_count)){//se è prima dell'ultimo del mese $nome_giorno =$giorni[$w_count]; $prima_r .= "<td class='td2'><b> $nome_giorno".date(" d",mktime(0,0,0,$m_count,$d_count,$y_count))."</b></td>"; $data_check[]= date("dmY",mktime(0,0,0,$m_count,$d_count,$y_count)); $data_count=mktime(0,0,0,$m_count,$d_count+1,$y_count); }else {//se è il primo del mese successivo $nome_giorno =$giorni[$w_count]; $prima_r .= "<td class='td2'><b> $nome_giorno".date(" d",mktime(0,0,0,$m_count,$d_count,$y_count))."</b></td>"; $data_check[]= date("dmY",mktime(0,0,0,$m_count,$d_count,$y_count)); $data_count=mktime(0,0,0,$m_count+1,$d_count+1,$y_count); } }else {//se è il primo dell'anno successivo $nome_giorno =$giorni[$w_count]; $prima_r .= "<td class='td2'><b> $nome_giorno".date(" d",mktime(0,0,0,$m_count,$d_count,$y_count))."</b></td>"; $data_check[]= date("dmY",mktime(0,0,0,$m_count,$d_count,$y_count)); $data_count=mktime(0,0,0,$m_count+1,$d_count+1,$y_count+1); } } echo "$prima_r</tr>"; //Stampa della prima riga con Titoli delle colonne e date del calendario }
[/PHP]
ed infine la stampa a video della tabella con i già detti confronti con le date e la cancellazione della tabella temporanea dal db
[PHP]
//inizio stampa a video la tabella temporanea
$vista_tmp="SELECT * FROM $tmp_name_table";
$vista_tmp_mssql=@mssql_query($vista_tmp,$link);while($result_vista_tmp=mssql_fetch_array($vista_tmp_mssql)){ $s_serv = $result_vista_tmp ["N_SERV"]; $s_area = $result_vista_tmp ["N_AREA"]; $s_aop = $result_vista_tmp ["N_A_OP"]; $s_sotta = $result_vista_tmp ["N_SOTT_A"]; $s_matt= $result_vista_tmp ["S_M_ATT"]; $n_matt= $result_vista_tmp ["N_M_ATT"]; $s_b_s= $result_vista_tmp ["B_S"]; $riga=""; for($i=0;$i<=$tot_day-1;$i++){ $controllo_tdi="SELECT * From tdi_$s_matt Where DATA='$data_check*' And BANCA='$s_b_s'"; $query1=@mssql_query($controllo_tdi,$link); if($query1==NULL){ $name=" "; $riga .= "<td class='td1'>$name</td>"; }else{ $vista_query1=mssql_fetch_array($query1); if($vista_query1==0){ $name=" "; $riga .= "<td class='td1'>$name</td>"; }else{ $name=$vista_query1["ID_NAME"]; $riga .= "<td class='td1' bgcolor='#33FF99'><b>$name</b></td>"; } } } echo " <tr> <td class='td1'>$s_serv</td> <td class='td1'>$s_area</td> <td class='td1'>$s_aop</td> <td class='td1'>$s_sotta</td> <td class='td1'>$n_matt</td> <td class='td1'>$s_b_s</td> $riga </tr> "; } echo "</table>";
//fine stampa tabella temporanea
//inizio cancella la tabella temporanea dal db
$drop_tmp="DROP TABLE $tmp_name_table";
$drop_tmp_mssql=@mssql_query($drop_tmp,$link);
//fine cancella la tabella temporanea dal db
[/PHP]
-
Ho una ricerca sul db che può essre filtrata selezionando da un form la checkbox di una o più domande e passando il valore da ricercare.
Fin qui niente di difficile. Il mio problema nasce quando devo ricercare più valori nella stessa tabella del db che abbiano uno stesso ID di inserimento.
Provo a spiegarmi in italiano con un esempio.Sul db io ho una tabella T_domande che contiene tutte le domande del form ed ha i seguenti campi:
-ID_D (univoco) domanda
-D domanda in chiaro
-TD tipo domanda
Poi ho una tabella TDI_dati che contiene tutti i dati salvati tramite il form ed ha i seguenti campi:
-ID_D riferito alla id della domanda della tabella T_domande
-ID_INS numero di inserimento di un gruppo
-VAL valore del dato inserito tramite il formIl form contiene più domade ma tutte hanno un ID_D diveso (esempi tre domande con i rispettivi ID_Q 33,34,35) e quando un utente inserisce i dati questi vengono salvati nella tabella TDI_dati nel seguente modo
ID_D||ID_INS||VAL||
33 || 3 ||ciao||
34 || 3 ||cip ||
35 || 3 ||ralf||
33 || 4 ||ciao||
34 || 4 ||ciop||
35 || 4 ||ralf||
33 || 5 ||miao||
34 || 5 ||cip ||
35 || 5 ||cra ||
33 || 6 ||ciao||
34 || 6 ||ciop||
35 || 6 ||ralf||Ora il mio problema è che nella pagina di ricerca dei record che vorrei creare vengono stampate tutte le domande con affianco una checkbox e un campo per la ricerca.
Se la checkbox è selezionata bisogna fare una query sulla TDI_dati dove si ricerca per ID_D della domanda il o i records che hanno la parola da ricercare immessa dall'utente nel form (es tutte le domande con ID_D=33 che hanno VAL=ciao).
Io fino a qui sono riuscito a realizzalo.
Iol passo successivo, anche questo realizzato, è stato quello di stampare a video quei record che si rispettassero la suddetta richiesta ma che mi stampasse anche tutte le altre domande che avessero lo stesso ID_INS dei record che hanno dato esito positivo alla ricerca avendo cosi il seguente risultato:ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||
33 || 3 ||ciao||34 || 3 ||cip ||35 || 3 ||ralf ||
33 || 4 ||ciao||34 || 4 ||ciop||35 || 4 ||ralf||
33 || 6 ||ciao||34 || 6 ||ciop||35 || 6 ||ralf ||Bene!
Eccoci arrivati al dilemma!
Io vorrei ricercare ad esempio tutti i record che hanno sia ID_D=33 e VAL=ciao ma anche quelli che hanno ID_D=35 e VAL=ralf.Come diavolo posso fare?
Vorrei cosi ottenere solo il seguente risultato :ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||
33 || 3 ||ciao||34 || 3 ||cip ||35 || 3 ||ralf ||
33 || 6 ||ciao||34 || 6 ||ciop||35 || 6 ||ralf ||Chi mi sa dare un buon consiglio?
-
Secondo me potresti usare un ciclo così da avere 1 array x ogni risultato oppure mettere nella query:
ID_D in (33,35) AND VAL in ("ciao","ralf")oppure caso ti servano le cose associate
WHERE (ID_D=33 AND VAL = ciao) OR (ID_D=35 AND VAL = ralf)
-
Ciao DIGITAL DAIGOR!!!
Scusami ma non ho capito bene come formulare il tuo primo consiglio.la mia query è questa:
SELECT * FROM tdi_dati INNER JOIN t_domande ON tdi_dati.ID_Q=t_domande.ID_Q WHERE tdi_dati.VAL LIKE '%ciao%' AND tdi_dati.ID_Q='33' ORDER BY ID_INS, tdi_dati.ID_Q
ma mi funziona solo per la ricerca ad una sola domanda.
Se io volessi fare la ricerca per più domande come posso modificarla?
-
per avere gli accoppiamenti, cioè: ciao e 33 , ralf e 35, ecc.
WHERE (tdi_dati.VAL LIKE '%ciao%' AND tdi_dati.ID_Q='33') OR (tdi_dati.VAL LIKE '%ralf%' AND tdi_dati.ID_Q='35')
ORDER BY ID_INS, tdi_dati.ID_Qse vuoi invece che ci sia almeno uno di ogni tipo di elemento, metti:
WHERE tdi_dati.VAL IN ('%ciao%','%ralf%') AND tdi_dati.ID_Q IN ('33','35')
ORDER BY ID_INS, tdi_dati.ID_Q
-
io ho scritto questo codice
[PHP]
$scelta="";
//inizio controllo ricerca nelle risposte alle domande (VAL)
if(!empty($_POST['check'])){//entra SOLO se almeno una checkbox delle domande è selezionata$check=$_POST['check'];//assegna l'id_q della checkbox alla variabile foreach($check as $key => $value){ //echo " $key => $value<br/> "; //inizio query per costruire il nome della variabile che contiene la stringa da ricercare $sql_q="SELECT ID_Q,D_Q,T_Q FROM t_questions WHERE ID_M_ATT='$matt' AND ID_Q='$key'"; //echo "$sql_q<br/><br/>"; $q_mssql=@mssql_query($sql_q,$link); while($result_q=mssql_fetch_array($q_mssql)){ $id_q = $result_q["ID_Q"]; $d_q = $result_q ["D_Q"]; $t_q = $result_q ["T_Q"]; $search=$t_q; $search.="_$id_q"; //echo "$search<br/>"; $parola_chiave=$_POST[$search];//assegna alla variabile la parola da ricercare //echo "$parola_chiave<br/>"; } //fine query per costruire il nome della variabile che contiene la stringa da ricercare //inizio query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata $sql_q2="SELECT tdi_$matt_s.ID_Q,ID_INS,tdi_$matt_s.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_$matt_s.VAL FROM tdi_$matt_s INNER JOIN t_questions ON tdi_$matt_s.ID_Q=t_questions.ID_Q WHERE tdi_$matt_s.VAL LIKE '%$parola_chiave%' AND tdi_$matt_s.ID_Q='$id_q' ORDER BY ID_INS, tdi_$matt_s.ID_Q"; echo "$sql_q2<br/>"; $q2_mssql=@mssql_query($sql_q2,$link); $where_ins=""; while($result_q2=mssql_fetch_array($q2_mssql)){ $id_ins = $result_q2["ID_INS"]; $where_ins.=" tdi_$matt_s.ID_INS='$id_ins' OR"; } } //fine query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata if($where_ins!=""){ $where_ins.=substr("$where_ins",0,-2);//elimina l'ultimo OR perchè c'è bisogno di un AND tra $where_ins e il LIKE if($scelta!=""){ $scelta.=" AND $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'"; }else{ $scelta.=" $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'"; } }else{ echo "<b>Nessun record inserito corrisponde ai parametri impostati.</b><br/><br/>"; } } //fine controllo ricerca nelle risposte alle domande (VAL)
$where_query="";
if($scelta!=""){ $where_query.=" WHERE $scelta"; }else{ $where_query.=""; }
[/PHP]
e le query stampate sono le seguenti
SELECT tdi_GRR.ID_Q,ID_INS,tdi_GRR.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_GRR.VAL FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%12012008%' AND tdi_GRR.ID_Q='29' ORDER BY ID_INS, tdi_GRR.ID_QSELECT tdi_GRR.ID_Q,ID_INS,tdi_GRR.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_GRR.VAL FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%service%' AND tdi_GRR.ID_Q='30' ORDER BY ID_INS, tdi_GRR.ID_Q
quindi io ho il filtraggio solo dell'ultima query e non la combinazione delle due.
Chi mi da una mano?
GRAZIE
-
io ho scritto questo codice
[PHP]
$scelta="";//inizio controllo ricerca nelle risposte alle domande (VAL) if(!empty($_POST['check'])){//entra SOLO se almeno una checkbox delle domande è selezionata $check=$_POST['check'];//assegna l'id_q della checkbox alla variabile foreach($check as $key => $value){ //echo " $key => $value<br/> "; //inizio query per costruire il nome della variabile che contiene la stringa da ricercare $sql_q="SELECT ID_Q,D_Q,T_Q FROM t_questions WHERE ID_M_ATT='$matt' AND ID_Q='$key'"; //echo "$sql_q<br/><br/>"; $q_mssql=@mssql_query($sql_q,$link); while($result_q=mssql_fetch_array($q_mssql)){ $id_q = $result_q["ID_Q"]; $d_q = $result_q ["D_Q"]; $t_q = $result_q ["T_Q"]; $search=$t_q; $search.="_$id_q"; //echo "$search<br/>"; $parola_chiave=$_POST[$search];//assegna alla variabile la parola da ricercare //echo "$parola_chiave<br/>"; } //fine query per costruire il nome della variabile che contiene la stringa da ricercare //inizio query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata $sql_q2="SELECT tdi_$matt_s.ID_Q,ID_INS,tdi_$matt_s.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_$matt_s.VAL FROM tdi_$matt_s INNER JOIN t_questions ON tdi_$matt_s.ID_Q=t_questions.ID_Q WHERE tdi_$matt_s.VAL LIKE '%$parola_chiave%' AND tdi_$matt_s.ID_Q='$id_q' ORDER BY ID_INS, tdi_$matt_s.ID_Q"; echo "$sql_q2<br/>"; $q2_mssql=@mssql_query($sql_q2,$link); $where_ins=""; while($result_q2=mssql_fetch_array($q2_mssql)){ $id_ins = $result_q2["ID_INS"]; $where_ins.=" tdi_$matt_s.ID_INS='$id_ins' OR"; } } //fine query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata if($where_ins!=""){ $where_ins.=substr("$where_ins",0,-2);//elimina l'ultimo OR perchè c'è bisogno di un AND tra $where_ins e il LIKE if($scelta!=""){ $scelta.=" AND $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'"; }else{ $scelta.=" $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'"; } }else{ echo "<b>Nessun record inserito corrisponde ai parametri impostati.</b><br/><br/>"; } } //fine controllo ricerca nelle risposte alle domande (VAL)
$where_query="";
if($scelta!=""){ $where_query.=" WHERE $scelta"; }else{ $where_query.=""; }
[/PHP]
e le query stampate sono le seguenti
SELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%12012008%' AND tdi_GRR.ID_Q='29' ORDER BY ID_INS, tdi_GRR.ID_QSELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%service%' AND tdi_GRR.ID_Q='30' ORDER BY ID_INS, tdi_GRR.ID_Q
quindi io ho il filtraggio solo dell'ultima query e non la combinazione delle due.
Chi mi da una mano?
GRAZIE
-
scusate la ripezione del messaggio ma non saprei cosa sia successo alla rete ma io vorrei filtrare tutti quei record rispondono correttamente alla query ma che abbiano inoltre la stessa ID_INS (gruppo di inserimento).
Per spiegarmi meglio:SELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q
WHERE (tdi_GRR.VAL like '%12012008%' AND tdi_GRR.ID_Q='29') OR (tdi_GRR.VAL like '%service%' AND tdi_GRR.ID_Q='30')
ORDER BY ID_INS, tdi_GRR.ID_Qmi si stampa a video questo:
ID_Q|ID_INS|DOMANDA|VAL
29 |1 |quest1 |12012008
30 |1 |quest2 |service
30 |2 |quest2 |service
29 |3 |quest1 |12012008
30 |3 |quest2 |serviceOra il problema è che la domanda che ha ID_INS=2 non deve essere stampata perchè risponde positivamente solo alla seconda condizione e non ad entrambe.
Ora come posso scrivere una query ad hoc per avere solo questo risultato:
ID_Q|ID_INS|DOMANDA|VAL
29 |1 |quest1 |12012008
30 |1 |quest2 |service
29 |3 |quest1 |12012008
30 |3 |quest2 |serviceio ho provato con questa ed ho il risultato cercato:
SELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q
WHERE (tdi_GRR.VAL like '%12012008%'OR tdi_GRR.VAL like '%service%') AND tdi_GRR.ID_Q IN ('29','30')AND ID_INS IN (1,3)
ORDER BY ID_INS, tdi_GRR.ID_Qma come faccio ad inserire la clausola ID_INS IN (1,3) con i valori all'interno giusti visto che è tutto dinamico come si può vedere dal codice postato precedentemente.
GRAZIE ragazzi siete sempre una fonte vera di saggezza!!!
-
ma come faccio ad inserire la clausola ID_INS IN (1,3) con i valori all'interno giusti visto che è tutto dinamico come si può vedere dal codice postato precedentemente.
nn ho capito sta parte.
se è quello che penso, basta che tu gli metti una variabile, formattata giusta ed è fatta!
$in_query = "1,2,3";
o ancora meglio:
$array_in = array("1","2","3");
$in_query = implode(",",$array_in);e hai tutta la dinamicità che vuoi!
-
ho fatto una cosa del genere e funziona
[PHP]//inizio controllo ricerca nelle risposte alle domande (VAL)
$array_parola_chiave=array();
$array_id_ins=array();$i=0; if(!empty($_POST['check'])){//entra SOLO se almeno una checkbox delle domande è selezionata $check=$_POST['check'];//assegna l'id_q della checkbox alla variabile foreach($check as $key => $value){ //echo " $key => $value<br/> "; //inizio query per costruire il nome della variabile che contiene la stringa da ricercare $sql_q="SELECT ID_Q,D_Q,T_Q FROM t_questions WHERE ID_M_ATT='$matt' AND ID_Q='$key'"; //echo "$sql_q<br/><br/>"; $q_mssql=@mssql_query($sql_q,$link); while($result_q=mssql_fetch_array($q_mssql)){ $id_q = $result_q["ID_Q"]; $d_q = $result_q ["D_Q"]; $t_q = $result_q ["T_Q"]; $search=$t_q; $search.="_$id_q"; //echo "$search<br/>"; $parola_chiave=$_POST[$search];//assegna alla variabile la parola da ricercare //echo "$parola_chiave<br/>"; $array_parola_chiave*=$parola_chiave; $array_id_ins*=$key; $i=$i+1; } } //fine query per costruire il nome della variabile che contiene la stringa da ricercare //echo "$i<br/>";//numero di checkbox selezionate /*for($c=0;$c<$i;$c++){ echo "$array_parola_chiave<br/>";//indica le parole immesse per la ricerca } */ //inizio query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata $word_key_ins=""; for($c=0;$c<$i;$c++){ $word_key_ins.=" (tdi_$matt_s.VAL LIKE '%$array_parola_chiave%' AND tdi_$matt_s.ID_Q='$array_id_ins') OR"; } $word_key_ins.=substr("$word_key_ins",0,-2);//elimina l'ultimo OR perchè c'è bisogno di un AND tra $where_ins e il LIKE //echo "$word_key_ins<br/>"; $sql_q2="SELECT ID_INS FROM tdi_$matt_s INNER JOIN t_questions ON tdi_$matt_s.ID_Q=t_questions.ID_Q WHERE $word_key_ins GROUP BY ID_INS HAVING COUNT(ID_INS)='$i'"; //echo "$sql_q2<br/>"; $q2_mssql=@mssql_query($sql_q2,$link); $id_ins_in=""; while($result_q2=mssql_fetch_array($q2_mssql)){ $id_ins = $result_q2["ID_INS"]; $id_ins_in.="$id_ins,"; } $id_ins_in.=substr("$id_ins_in",0,-1);//elimina l'ultima virgola //echo "$id_ins_in<br/>"; if($id_ins_in!=""){ if($scelta!=""){ $scelta.=" AND ID_INS IN ($id_ins_in)"; }else{ $scelta.=" ID_INS IN ($id_ins_in)"; } }else{ echo "<b>Nessun record inserito corrisponde ai parametri impostati.</b><br/><br/>"; } //echo "$scelta<br/>"; } //fine controllo ricerca nelle risposte alle domande (VAL)[/PHP]
GRazie
-
Il nuovo quesito di oggi è:
come posso creare un upload per file excel con campi preimpostati in modo tale da stampare a video il contenuto del file xls e poi salvarli sul db.La mia mezza idea è questa:
[PHP]require_once 'E:\cso_manager\Excel\reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('$directory');// indirizzi.xls
include("../config.php");
error_reporting(E_ALL ^ E_NOTICE);
//script funzionante che legge da file excel fisso
/require_once 'E:\cso_manager\Excel\reader.php';//oppure require_once '/EXCEL/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('indirizzi.xls');
include("../config.php");//oppure include("../config.php");
error_reporting(E_ALL ^ E_NOTICE);/
//script che legge da file excel e stampa a video
//variabili utilizzate per la stampa a video
//$data->sheets[0]['numRows'];//numero di righe contenute nel file excel
//$data->sheets[0]['numCols'];//numero di colonne contenute nel file excel
//$data->sheets[0]['cells']**;//serve per prelevare il valore contenuto in ogni cella
echo "<table border='1'>";
for($i = 1; $i <= $data->sheets[0]['numRows']; $i++){
echo "<tr>";for($j = 1; $j <= $data->sheets[0]['numCols']; $j++){
echo "<td>".$data->sheets[0]['cells']*[$j]."</td>";
}echo "</tr>";
}
echo "</table>";/**/
/*
//script per caricare i dati sul db
for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++){
$nome= "".$data->sheets[0]['cells'][1].""; //nome
$cognome= "".$data->sheets[0]['cells'][2].""; //cognome
$indirizzo= "".$data->sheets[0]['cells'][3].""; //indirizzo
$query="insert into indirizzi (nome,cognome,indirizzo)values('$nome','$cognome','$indirizzo')";
$dati=mssql_query($query);
if($dati)echo"successo<br/>";
else echo"fallimento<br/>";
} /
/
//script per leggere i dati dal db e visualizzarli a video
echo"<TABLE border='1'>";
echo"<tr><td><b>nome</b></td><td><b>cognome</b></td><td><b>indirizzo</b></td></tr>";
$dati=mssql_query("select * from indirizzi");
$NumEntries=mssql_num_rows($dati);
while($array=mssql_fetch_array($dati)){
echo"<tr><td>$array[nome]</td><td>$array[cognome]</td><td>$array[indirizzo]</td></tr>";
}
echo"</TABLE>";/
?>
[/PHP]
dove reader.php lo trovato in giro sul web e funge.
Il mio vero problema è quello di caricare il file excel da qualsiasi pc (il suddetto upload).
Io ho provato così ma non lo carica
[PHP]<?
echo"<form enctype="multipart/form-data" action="/EXCEL/example2.php" method="post">";//indica che il tipo di dato che stiamo trasferendo dal form
echo"<input type="hidden" name="MAX_FILE_SIZE" value="1000000">";//dimensione massima che il file da uplodare puo? avere
echo"file: <input name="userfile" type="file"> ";//campo in cui verra? messo il percorso completo
echo"<input type="submit" value="Invia">";
echo"</form>";
?>
[/PHP]Chi mi da una mano???????:?:?:?
-
Prova questa fatta da me, è na funzionona, abb complessa, ma, all'occorrenza, crea cartelle con htaccess ecc..
dovrebbero esserci degli esempi dentro!!!
[ATTACH]1335[/ATTACH]
-
Scusami digital daigor ho dato uno sguardo al tuo script e mi è sorta una domanda, ma io devo perforza salvare il file sul server ? Non posso solo leggere il contenuto del file xls e stamparloa video osalvarlo sul db?