[php] creare tabella con numero di colonne variabile in funzione di una selezione

isidoro80

Utente Attivo
124
0
ciao a tutti ho realizzato una pagina di ricerca in php per effetturare una selezione su un db. L'utente tramite dei radiobbutton puoi selezionare quali campi (colonne) della tabella del db visualizzare. Tutto ok per la query ma ora non so come fare per far si che nella tabella dove vengono visualizzati i risultati siano presenti tante colonne quanti sono i campi selezionati dal radiobutton.

es nella pagina di ricerca l'utente seleziona id, tesi, produzione nella pagina dei risultati dovrà apparire una tabella con tre colonne id, tesi e produzione. come si può fare?
ciao e grazie a tutti
 

airex

Utente Èlite
2,394
14
CPU
Intel Core2Duo E6750
Scheda Madre
Gigabyte GA-G33M-DS2R
HDD
1x80GB Sata2 + 1x320GB Sata2
RAM
2 x 2048MB DDR2 800MHz
GPU
NVidia 8800GT 1GB
Audio
Intel HDA
Monitor
LCD Samsung 19"
PSU
LC Power Green Power V2.0 - 550 Watt
OS
Linux Slackware64
se tu quei radiobutton li chiami (attributo name) colonna_nome (es: colonna_id, colonna_tesi, ...) per sapere quante e quali colonne visualizzerai potrai usare qualcosa del tipo

Codice:
/*
....
 qui codice di selezione sul db (in $res il risultato di mysql_query)
....
*/
$campi=array();
echo "<table><tr>"
foreach ($_POST as $k=>$v) {
   if (substr($k,0,8)=="colonna_") {
     echo "<th>".ucfirst(str_replace("colonna_",$k))."</th>";
     $campi[] = $k;
   }
}
echo "</tr>";
while ($row=mysql_fetch_assoc($res)) {
   echo "<tr>";
   foreach ($campi as $c)
      echo $row[$c];
   echo "</tr>";
}
echo "</table>";
ovviamente i vari colonna_xxxx devono avere xxxx uguale al nome del campo della tabella cui corrispondono.

ps.
ho supposto che il form in cui sono presenti i radio invii i dati in POST, altrimenti correggi
 

isidoro80

Utente Attivo
124
0
Ciao, innanzi tutto grazi per l'aiuto come sempre provvidenziale.
Ho adattato il tuo codice alla mia pagina così però non capisco come mai non vedo nulla, pagina bianca.
ti premetto che il risultato della query è nella variabile $recordset1, il numero di colonne massimo della tabella è 12 ed ho nominato tutte i radiobutton con colonna_nome campo da visualizzare uguale a nome del campo della tabella del db.
Come mai non si vede nulla ho tralasciato qualcosa?

Codice:
$campi=array();
echo "<table><tr>";
foreach ($_POST as $k=>$v) {
   if (substr($k,0,12)=="colonna_") {
     echo "<th>".ucfirst(str_replace("colonna_",$k))."</th>";
     $campi[] = $k;
   }
}
echo "</tr>";
while ($row=mysql_fetch_assoc($Recordset1)) {
   echo "<tr>";
   foreach ($campi as $c)
      echo $row[$c];
   echo "</tr>";
}
echo "</table>";
 

airex

Utente Èlite
2,394
14
CPU
Intel Core2Duo E6750
Scheda Madre
Gigabyte GA-G33M-DS2R
HDD
1x80GB Sata2 + 1x320GB Sata2
RAM
2 x 2048MB DDR2 800MHz
GPU
NVidia 8800GT 1GB
Audio
Intel HDA
Monitor
LCD Samsung 19"
PSU
LC Power Green Power V2.0 - 550 Watt
OS
Linux Slackware64
c'è un errore (l'avevo fatto già io sorry), eccoti il codice corretto

Codice:
$campi=array();
echo "<table><tr>";
foreach ($_POST as $k=>$v) {
   if (substr($k,0,12)=="colonna_") {
     echo "<th>".ucfirst(str_replace("colonna_","",$k))."</th>";
     $campi[] = $k;
   }
}
echo "</tr>";
while ($row=mysql_fetch_assoc($Recordset1)) {
   echo "<tr>";
   foreach ($campi as $c)
      echo $row[$c];
   echo "</tr>";
}
echo "</table>";


cmq se guardi nei log generati da php o imposti a yes la direttiva display_errors in php.ini puoi avere tutte le info sugli errori nel tuo codice
 

isidoro80

Utente Attivo
124
0
ciao scusami ancora ma pur avendo fatto le correzioni che mi hai suggerito non si vede nulla. Ho impostato display_error nel php.ini ad on ma non mi da nessun errore.
Possibile che dipenda dal fatto che i campi da visualizzare non appartengono ad una stessa tabella di database ma a tabelle diverse collegate tra loro?

ti invio il codice della pagina
Codice:
<?php require_once('Connections/diserbo.php'); ?>
<?php
$currentPage = $HTTP_SERVER_VARS["PHP_SELF"];

$maxRows_Recordset1 = 30;
$pageNum_Recordset1 = 0;
if (isset($HTTP_GET_VARS['pageNum_Recordset1'])) {
  $pageNum_Recordset1 = $HTTP_GET_VARS['pageNum_Recordset1'];
}
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

$varcoltura_Recordset1 = "%";
if (isset($_POST['coltura'])) {
  $varcoltura_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['coltura'] : addslashes($_POST['coltura']);
}
$varepoca_Recordset1 = "%";
if (isset($_POST['epoca'])) {
  $varepoca_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['epoca'] : addslashes($_POST['epoca']);
}
$varpa_Recordset1 = "%";
if (isset($_POST['pa'])) {
  $varpa_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['pa'] : addslashes($_POST['pa']);
}
$varinfestante_Recordset1 = "%";
if (isset($_POST['infestante'])) {
  $varinfestante_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['infestante'] : addslashes($_POST['infestante']);
}
mysql_select_db($database_diserbo, $diserbo);
$query_Recordset1 = "SELECT DISTINCT tesi.id_tesi"; 

if (isset($_POST['colonna_coltura'])) {
$col = $_POST['colonna_coltura'];
$query_Recordset1 = $query_Recordset1 . $col;
}
if (isset($_POST['colonna_stadio_col'])) {
$stadio_col = $_POST['colonna_stadio_col'];
$query_Recordset1 = $query_Recordset1 . $stadio_col;
}
if (isset($_POST['colonna_pa'])) {
$nomepa = $_POST['colonna_pa'];
$query_Recordset1 = $query_Recordset1 . $nomepa;
}
if (isset($_POST['colonna_epoche'])) {
$epocatrat = $_POST['colonna_epoche'];
$query_Recordset1 = $query_Recordset1 . $epocatrat;
}
if (isset($_POST['colonna_dose'])) {
$dosepa = $_POST['colonna_dose'];
$query_Recordset1 = $query_Recordset1 . $dosepa;
}
if (isset($_POST['colonna_stadio_inf'])) {
$stadioinf = $_POST['colonna_stadio_inf'];
$query_Recordset1 = $query_Recordset1 . $stadioinf;
}
if (isset($_POST['colonna_efficacia'])) {
$efficaciapa = $_POST['colonna_efficacia'];
$query_Recordset1 = $query_Recordset1 . $efficaciapa;
}
if (isset($_POST['colonna_fitotossicita'])) {
$fito = $_POST['colonna_fitotossicita'];
$query_Recordset1 = $query_Recordset1 . $fito;
}
if (isset($_POST['colonna_var_prod'])) {
$varprod = $_POST['colonna_var_prod'];
$query_Recordset1 = $query_Recordset1 . $varprod;
}
if (isset($_POST['colonna_fito_ewrs'])) {
$fitoewrs = $_POST['colonna_fito_ewrs'];
$query_Recordset1 = $query_Recordset1 . $fitoewrs;
}
if (isset($_POST['colonna_eff_ewrs'])) {
$effewrs = $_POST['colonna_eff_ewrs'];
$query_Recordset1 = $query_Recordset1 . $effewrs;
}


$query_Recordset2 = $query_Recordset1 . " FROM anni, colture, tesi, fito_s, eff_s, epoche, pa_tesi, pa, efficacia, fito, infestanti WHERE anni.id_anno = tesi.rif_anno AND colture.id_coltura = tesi.rif_coltura AND tesi.rif_fito_s = fito_s.id_fito_s AND epoche.id_epoche = pa_tesi.rif_epoca AND pa_tesi.rif_tesi = tesi.id_tesi AND infestanti.id_infestanti = efficacia.rif_infestante AND pa_tesi.rif_pa = pa.id_pa AND eff_s.id_eff_s = tesi.rif_eff_s AND efficacia.rif_eff = tesi.id_tesi AND fito.rif_fito = tesi.id_tesi AND colture.id_coltura LIKE '%s' AND pa.id_pa LIKE '%s' AND infestanti.id_infestanti LIKE '%s' AND epoche.id_epoche LIKE '%s'  ORDER BY tesi.id_tesi";
$query_Recordset1 = sprintf($query_Recordset2, $varcoltura_Recordset1,$varpa_Recordset1,$varinfestante_Recordset1,$varepoca_Recordset1);
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $diserbo) or die(mysql_error());

$campi=array();
echo "<table><tr>";
foreach ($_POST as $k=>$v) {
   if (substr($k,0,12)=="colonna_") {
     echo "<th>".ucfirst(str_replace("colonna_","",$k))."</th>";
     $campi[] = $k;
   }
}
echo "</tr>";
while ($row = mysql_fetch_assoc($Recordset1)) {
   echo "<tr>";
   foreach ($campi as $c)
      echo $row[$c];
   echo "</tr>";
}
echo "</table>";
if (isset($HTTP_GET_VARS['totalRows_Recordset1'])) {
  $totalRows_Recordset1 = $HTTP_GET_VARS['totalRows_Recordset1'];
} else {
  $all_Recordset1 = mysql_query($query_Recordset1);
  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

$queryString_Recordset1 = "";
if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
  $params = explode("&", $HTTP_SERVER_VARS['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_Recordset1") == false && 
        stristr($param, "totalRows_Recordset1") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_Recordset1 = "&" . implode("&", $newParams);
  }
}
$queryString_Recordset1 = sprintf("&totalRows_Recordset1=%d%s", $totalRows_Recordset1, $queryString_Recordset1);

if (isset($_POST['colonna_efficacia'])) {
$media_efficacia = "SELECT AVG(efficacia.efficacia) FROM anni, colture, tesi, fito_s, eff_s, epoche, pa_tesi, pa, efficacia, fito, infestanti WHERE anni.id_anno = tesi.rif_anno AND colture.id_coltura = tesi.rif_coltura AND tesi.rif_fito_s = fito_s.id_fito_s AND epoche.id_epoche = pa_tesi.rif_epoca AND pa_tesi.rif_tesi = tesi.id_tesi AND infestanti.id_infestanti = efficacia.rif_infestante AND pa_tesi.rif_pa = pa.id_pa AND eff_s.id_eff_s = tesi.rif_eff_s AND efficacia.rif_eff = tesi.id_tesi AND fito.rif_fito = tesi.id_tesi AND colture.id_coltura LIKE '$varcoltura_Recordset1' AND pa.id_pa LIKE '$varpa_Recordset1' AND infestanti.id_infestanti LIKE '$varinfestante_Recordset1' AND epoche.id_epoche LIKE '$varepoca_Recordset1'";
$query_efficacia = mysql_query($media_efficacia, $diserbo) or die(mysql_error());
$row_query_efficacia = mysql_result($query_efficacia,0,0);
}

if (isset($_POST['colonna_fitotossicita'])) {
$media_fito = "SELECT AVG(fito.fitotossicita) FROM anni, colture, tesi, fito_s, eff_s, epoche, pa_tesi, pa, efficacia, fito, infestanti WHERE anni.id_anno = tesi.rif_anno AND colture.id_coltura = tesi.rif_coltura AND tesi.rif_fito_s = fito_s.id_fito_s AND epoche.id_epoche = pa_tesi.rif_epoca AND pa_tesi.rif_tesi = tesi.id_tesi AND infestanti.id_infestanti = efficacia.rif_infestante AND pa_tesi.rif_pa = pa.id_pa AND eff_s.id_eff_s = tesi.rif_eff_s AND efficacia.rif_eff = tesi.id_tesi AND fito.rif_fito = tesi.id_tesi AND colture.id_coltura LIKE '$varcoltura_Recordset1' AND pa.id_pa LIKE '$varpa_Recordset1' AND infestanti.id_infestanti LIKE '$varinfestante_Recordset1' AND epoche.id_epoche LIKE '$varepoca_Recordset1'";
$query_fito = mysql_query($media_fito, $diserbo) or die(mysql_error());
$row_query_fito = mysql_result($query_fito,0,0);
echo "$row_query_fito";
}

?>
 

isidoro80

Utente Attivo
124
0
Ciao AIrex ho riguardato attentamente il codice che mi avevi dato e ho capito ciò che non funziona però non so come risolvere i problemi. teli spiego se puoi aiutarmi grazie
Codice:
foreach ($_POST as $k=>$v) {
   if (substr($k,0,30)=="colonna_") {
da questa riga dovrebbero essere estratti da post le variabili che contengono "colonna_" di fatto ciò non accade per cui non viene estratto nulla e quindi non si visualizza niente
se infatti tolgo questa riga la tabella compare

Una volta tolta quella riga mi appare questo errore
Notice: Undefined index: colonna_****..... on line 208 cioè questa riga
Codice:
echo $row[$c];
forse non trova i valori corrispondenti alle colonne

Ti prego aiutami ciao e grazie
 

isidoro80

Utente Attivo
124
0
risolto ecco il codice corretto
Codice:
<?php
	  $campi=array();
echo "<table border=\"1\" bordercolor=\"#0000FF\"><tr>";
foreach ($_POST as $k=>$v) {
   if (substr($k,0,8)=="colonna_") {
   $nome_colonna = substr($k,8);
	 echo "<th>".ucfirst(str_replace("colonna_","",$k))."</th>";
     $campi[] = $nome_colonna;
	 
   }
}
echo "</tr>";
while ($row = mysql_fetch_assoc($Recordset1)) {
   echo "<tr>";
   foreach ($campi as $c) 
      echo "<td>".$row[$c]."</td>";
	  echo "</tr>";
}
echo "</table>";
	?>
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili