[PHP] Creazione tabelle dinamiche

AlP

Nuovo Utente
18 Mar 2018
7
0
1
39
Ciao a tutti,
ho un problema che non riesco a risolvere... ora vi spiego...
Ho 2 tabelle in un db:
Categoria
Scadenze

In pratica creo delle categorie per poi popolarle con le scadenze, tipo: categoria Bollo, scadenza Auto 01-01-2018. Fin qui tutto ok!

In pratica creo la mia pagina html con delle tabelle, n tabelle per n categorie attive, qui viene il bello... devo popolare le singole tabelle con le vere scadenze... il codice è questo ( si tratta di una bozza da rivisitare)

Codice:
$query = "SELECT count(*) as tot FROM categoria WHERE categoria_eliminata='0' ; ";
$rs =$mysqli->query($query);
$modifica = $rs->fetch_assoc();

$query1 = "SELECT * FROM scadenza  WHERE scadenza_eliminata='0' ; ";
$rs1 =$mysqli->query($query1);

$num=3; //numero colonne

$lunghezza=$modifica['tot']; //numero di categorie presenti

echo "<table width=\"1250\" border=\"1\" bordercolor=\"#000000\" cellpadding=\"5\">";

$x=0;

while($x<$lunghezza){
    echo "<tr>";

for($i=0;$i<$num;$i++){
    $riga = $rs1->fetch_assoc();
if($x<$lunghezza)
{
    
echo "<td>".$riga['nome_scadenza']."  ".$riga['data']."</td>";
}
$x++;                }

echo "</tr>";
                    }

echo "</table>";

Qualcuno ha una dritta da darmi?
Grazie in anticipo!!!
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Cicla sulle intestazioni dell'array senza fare query e controlli inutili...
Ti invito a leggere un questi due articoli che ho scritto per effettuare le connessioni al DB e recuperare i dati.
Parte1, Parte2

PHP:
echo "<table width=\"1250\" border=\"1\" bordercolor=\"#000000\" cellpadding=\"5\">";
foreach ($rs1 as $k=>$v){
    echo '<tr>';
    foreach ($v as $kk=>$vv){
        echo '<td>'.$vv.'</td>';
    }
    echo '</tr>';
}
echo '</table>';
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
"Controlli inutili" sarebbe creare una seconda query per ottenere il numero di righe.... non si sembra corretto....
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Il consiglio che sento di darti, sarebbe "tipizzare" l'unica tabella in output con all'interno categoria...
Onestamente non hai spiegato il tuo problema.....
Vorresti raggruppare per tipologia? Se vuoi farlo in questo modo, la soluzione sarebbe molto facile con una query e group by...
Mi spiego...
Estrazione dati attuale con
$query1 = "SELECT * FROM scadenza WHERE scadenza_eliminata='0' ; ";

Scrivendo la tabelle più o meno come intendi tu.....
Codice:
CREATE TABLE scadenza_cat (
  id int(11) NOT NULL AUTO_INCREMENT,
  category varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB

CREATE TABLE scadenza (
  id int(11) NOT NULL AUTO_INCREMENT,
  cat_id int(11) DEFAULT NULL,
  voce varchar(255) DEFAULT NULL,
  valore float(10, 2) DEFAULT NULL,
  scadenzaa date DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB

Successivamente l'unica query che dovrai fare è questa:
Codice:
SELECT
  scadenza.id,
  scadenza_cat.category,
  scadenza.voce,
  SUM(scadenza.valore) AS totale
FROM scadenza
  INNER JOIN scadenza_cat
    ON scadenza.cat_id = scadenza_cat.id
WHERE scadenza.scadenzaa > CURDATE()
GROUP BY scadenza_cat.category
Mi spiego.... Hai la tabella categorie, e poi la tabella scadenza.... Effettui un join tra le due, e recuperi solo i valori che attualmente sono maggiori di CURDATE() (praticamente oggi), questi vengono sommati e raggruppati in base alla categoria, che per semplicità in questo modellino sono testuali e non numerici...
Spero sia utile....
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Allora devi lavorare in maniera differente:
  1. Recuperi tutti i dati senza group by
  2. Quando scorri l'array raggruppi per tipologia
  3. memorizzi una variabile temporanea per il totale e la stampi dove ti serve...
Mi spiego:
Ipotizza di avere un'array associativo.... Semplificando all'osso, anche se poco performante, uscirebbe così:
  • Recupero le categorie di tutti gli items (e creo un'altro array unico)
  • Inizio a scorrere l'array creato del punto sopra
    • Inizializzo una variabile del tipo totale = 0
    • Inizio a iterare l'array della query e stampo solo i dati con vincolo item.categoria == array_del_punto_sopra.valore
    • Stampo i dati correnti
    • Sommo a totale+=item.valore
  • Stampo il totale di categoria
PHP:
//popolato con i dati della query
$array_query=[];

//inizializzo array categorie a vuoto
$array_categorie=[];
//popolo array categorie
foreach ($array_query as $items){
    if(!in_array($items['categoria'],$array_categorie))$array_categorie[]=$items['categoria'];
}
//ipotizzo i dati che dovrai stampare per comodità
$define_stamp=['nome','scadenza','valore'];

foreach ($array_categorie as $item){

    echo '<tr><th colspan="'.(count($define_stamp)).'">'.$item.'</th></tr>';
    $sum_cat=0;
    foreach ($array_query as $k=>$v){
        echo '<tr>';
        foreach ($define_stamp as $vstampa){
            echo '<td>'.$v[$vstampa].'</td>';
        }
         echo '</tr>';
        $sum_cat+=$v['valore'];
    }
    echo '<tr><th></th><th>Totale Categoria</th><th>'.$sum_cat.'</th></tr>';
}
Utilizzando questa metodologia senza dover riscrivere codice per le intestazioni puoi spostare esattamente in posizione n+1 / n-1 gli item da stampare....
Spero sia utile
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
@Marco
Ti invito a leggere un questi due articoli che ho scritto per effettuare le connessioni al DB e recuperare i dati.
Parte1, Parte2
dovresti controllare il codice nelle pagine, ci sono errori ortografici e omissioni, mancano anche metodi
se qualche persona volesse utilizzare il tuo codice, incontra errori

se lo pubblichi, il codice dovrebbe essere funzionante senza interventi

saluti
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
@marino51, intanto ti ringrazio, per fretta e/o trascrizione gli orrori ortografici possono esserci (nessuno è perfetto come ...).
Riguardo a
dovresti controllare il codice nelle pagine, ci sono errori ortografici e omissioni, mancano anche metodi
se qualche persona volesse utilizzare il tuo codice, incontra errori
forse non hai focalizzato l'attenzione su un qualcosa di veramente importante....
Nella aside dx trovi questo: "Non vuol essere un mini tutorial né un mini forum, ma l'intento sarà quello di offrire piccoli spunti sul quale approfondire argomenti."
Altra nota, illuminami sui metodi che mancherebbero, perchè non ne mancano, o meglio, 2 metodi che mancano sono stati omessi volutamente, per via del punto sopra e non di vitale importanza... Poi se si è abituati al copia/incolla quello non è il posto giusto...

Da nessuna parte ho scritto che il codice è completamente funzionante...
Piccola modifica....
Nota in basso che esistono solo metodi presenti e non fuffoli...
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Da nessuna parte ho scritto che il codice è completamente funzionante...
senza polemica, non mi sembra abbia molto senso pubblicare codice non funzionante
soprattutto quando la pubblicazione ha scopo divulgativo

ho notato che hai disattivato "APRI APPROFONDIMENTO" per cui è sparito il relativo codice
in ogni caso un metodo mancante é "set_table"
chi volesse trarre conoscenze dal codice, potrebbe trovare difficoltà

saluti
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
ho notato che hai disattivato "APRI APPROFONDIMENTO" per cui è sparito il relativo codice
in ogni caso un metodo mancante é "set_table"
No in aggiornamento mancava un pezzo...
in ogni caso puoi copiarlo adesso l'ho rimesso!

Trovi il metodo che manca
PHP:
/**
     * Metodo per settare la tabella sulla quale effettuare le operazioni
     * @param string $table
     *
     * @return $this
     */
    public function set_table($table=''){
        if(!empty($table))$this->table=$table;
        return $this;
    }
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Ripeto,
  1. Scopo divulgativo non vuol dire fare tutto per filo e per segno
  2. Il codice non è su questo forum
  3. Ti stai intromettendo in questioni non tue
ribadisco, non è un copia/incolla se a te non funziona fallo funzionare... Se necessiti d'aiuto fammi sapere, ma non è qui né il luogo, né il momento, sei andato off topic. Chiudo
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Scopo divulgativo non vuol dire fare tutto per filo e per segno
ho poco rispetto per chi lavora in modo approssimativo, fa un danno a tutti

Il codice non è su questo forum
errore, vi si accede al post numero 2, quindi è su questo forum, fisicamente può essere anche in "Beciuania" ma qui è

Ti stai intromettendo in questioni non tue
il forum è aperto alla collaborazione di tutti e aiutare con un codice sbagliato, non è il massimo,
mi sono permesso di segnalarlo per aiutare chi ne fosse interessato

saluto e chiudo
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Marino, ripeto, controlla il codice, e poi parla... Mi meraviglio, che tu non abbia controllato.... Mi meraviglio che quel codice è di un progetto in produzione... Mi meraviglio, perchè .... lascia perdere...
Ora mandami il tuo errore... Sono curioso!....
Noto con piacere che sei molto poco attento......
PHP:
/**
     * Metodo per la creazione delle opzioni passate al costrutture
     * @param $opt
     */
    private function set_cparam($opt){
        foreach ($opt as $k=>$v){
            if(property_exists($this,$k))$this->$k=$v;
        }
    }
Mi dici cosa caspita fa questa.... Mi pare che esisteva sull'articolo... vabbè dai fa nulla... Continua... Ti ignoro io questa volta, e per sempre.... Ciao!
 
Ultima modifica:

maxbossi

Amministratore
Membro dello Staff
ADMIN
MOD
25 Feb 2003
2.025
43
48
www.ikiweb.it
Mi intrometto nella discussione invitando, amichevolmente, Marino51 e Marcus_adi a chiudere il "battibecco": siete, entrambi, due membri preziosi di questa comunità, quindi mi auguro che riusciate a risolvere questa discussione privatamente e nel migliore dei modi, come si addice a due persone intelligenti (e se non lo foste non sareste qui a parlare di codici ;)). Grazie.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Allora devi lavorare in maniera differente:
  1. Recuperi tutti i dati senza group by
  2. Quando scorri l'array raggruppi per tipologia
  3. memorizzi una variabile temporanea per il totale e la stampi dove ti serve...
Mi spiego:
Ipotizza di avere un'array associativo.... Semplificando all'osso, anche se poco performante, uscirebbe così:
  • Recupero le categorie di tutti gli items (e creo un'altro array unico)
  • Inizio a scorrere l'array creato del punto sopra
    • Inizializzo una variabile del tipo totale = 0
    • Inizio a iterare l'array della query e stampo solo i dati con vincolo item.categoria == array_del_punto_sopra.valore
    • Stampo i dati correnti
    • Sommo a totale+=item.valore
  • Stampo il totale di categoria
PHP:
//popolato con i dati della query
$array_query=[];

//inizializzo array categorie a vuoto
$array_categorie=[];
//popolo array categorie
foreach ($array_query as $items){
    if(!in_array($items['categoria'],$array_categorie))$array_categorie[]=$items['categoria'];
}
//ipotizzo i dati che dovrai stampare per comodità
$define_stamp=['nome','scadenza','valore'];

foreach ($array_categorie as $item){

    echo '<tr><th colspan="'.(count($define_stamp)).'">'.$item.'</th></tr>';
    $sum_cat=0;
    foreach ($array_query as $k=>$v){
        echo '<tr>';
        foreach ($define_stamp as $vstampa){
            echo '<td>'.$v[$vstampa].'</td>';
        }
         echo '</tr>';
        $sum_cat+=$v['valore'];
    }
    echo '<tr><th></th><th>Totale Categoria</th><th>'.$sum_cat.'</th></tr>';
}
Utilizzando questa metodologia senza dover riscrivere codice per le intestazioni puoi spostare esattamente in posizione n+1 / n-1 gli item da stampare....
Spero sia utile
Bando a quanto detto nella disputa tra me e marino51, utilizzando la query unica dovresti risolvere così!
 
Discussioni simili
Autore Titolo Forum Risposte Data
D [php - mysql] creazione di tabelle PHP 9
G creazione menu a tendina e invio a pagina php PHP 1
Stefano Migotto Creazione di un div con php o js PHP 9
T [php] problema creazione query select-where PHP 5
Daniele_Carrara [PHP] Creazione Carrello PHP 1
Monital [PHP]Far riconoscere stringa o numerico epr creazione campo tabella PHP 6
W [PHP] Creazione classe PDO PHP 4
K [PHP] Creazione di Calendario con orario PHP 4
Store creazione campo search in php PHP 1
S [PHP] Aiuto creazione form php per completamento modello word PHP 1
L [PHP] Problema creazione query a numero di parametri variabile PHP 6
Michaelweb93 [PHP] Creazione countdown a 72 ore PHP 1
Michaelweb93 [PHP] [HTML] Creazione offerte - email PHP 8
A Creazione automatica pagina php da id della riga di una tabella PHP 1
loois Ho un problema nella creazione di un sistema di commenti in PHP PHP 11
xone [Offro] Creazione di applicativi in PHP-MYSQL a costi ragionevoli Offerte e Richieste di Lavoro e/o Collaborazione 0
Matteo Lorenzon [PHP][WORDPRESS] Form in Wordpress, creazione PDF con dati del form ed invio tramite email WordPress 1
C info creazione documenti word in php PHP 0
R [PHP] Software gestione interventi e creazione registro (log) PHP 1
P [PHP] aiuto creazione login PHP 16
CoyotesSon [PHP] Help! Creazione di una finestra PHP 5
C [PHP] Problema con creazione csv PHP 3
S creazione automatica file .php PHP 1
Z creazione modulo e pagina invio php per invio dati al db PHP 2
M [Cerco Lavoro] [Retribuito]Creazione siti web,e-commerce,singoli script php, conversioni psd-html Offerte e Richieste di Lavoro e/o Collaborazione 0
C usare un foglio php per la creazione di un excel: piccolo problema PHP 2
R Aiuto creazione php PHP 0
L [PHP e Javascript] Creazione pagina .php PHP 1
F Creazione lista utenti database con php a oggetti PHP 0
G [risolto] Creazione file excel con PHP PHP 3
D creazione di una login in php PHP 1
D [RISOLTO]domande varie su creazione sito con php, mysql e phpmyadmin PHP 42
M Creazione Framework PHP PHP 3
M [Cerco Lavoro] [Retribuito] Creazione siti web,singoli script php,conversioni psd-html Offerte e Richieste di Lavoro e/o Collaborazione 0
S Creazione layout (era: Creazione tema per sito in php) HTML e CSS 2
G Cerco web master per creazione pagina in PHP Offerte e Richieste di Lavoro e/o Collaborazione 2
B Problema creazione tabella tramite PHP PHP 12
F creazione e stampa file pdf mediante PHP PHP 2
D creazione e gestione utenti da php 4.0 PHP 2
J CREAZIONE pdf da pagina PHP PHP 1
B Creazione Sito in PHP PHP 1
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2

Discussioni simili