Domanda
Saluti,
Ho dei dati memorizzati su mysql con delimitatore ", " in 1 tabella. Ho anche file e colonne archiviate nel database. Ora devo generare i dati usando le righe e il numero di colonna memorizzati nel database per disegnare la tabella.
Le righe e il numero di colonna sono input dell'utente, quindi possono variare.
Diciamo che c'è il numero 3 nella colonna e 3 nelle righe.
Devo farlo come display like,
|___d1__|___d2__|___d3__|
|___d4__|___d5__|___d6__|
|___d7__|___d8__|___d9__|
Dove d1-d9 sarebbero i dati memorizzati nel database mysql con delimitatore ", " in una tabella.
Grazie per avermi aiutato.
Soluzione
È possibile trasformare i valori separati da virgola dalla colonna di dati in un array utilizzando la funzione explode ():
<?php
$result = mysql_query('SELECT rows, columns, data from table_name where id=1');
$record = mysql_fetch_assoc($result);
$rows = $record['rows'];
$columns = $record['columns'];
$data = explode(',' , $record['data']);
if (sizeof($data) != $rows * $columns) die('invalid data');
?>
Per visualizzare la tabella, sono necessari due cicli for nidificati:
<table>
<?php for ($row = 0; $row < $rows; $row++) : ?>
<tr>
<?php for ($column = 0; $column < $columns; $column++) : ?>
<td>
<?php echo $data[$row * $columns + $column]; ?>
</td>
<?php endfor ?>
</tr>
<?php endfor ?>
</table>
Altri suggerimenti
Questo non ti aiuterà a risolvere questo problema, ma una parola di buon consiglio: non scrivere MAI MAI valori separati da virgola in un campo di database. Non è possibile eseguire una query ragionevole delle informazioni archiviate in questo modo e il codice dell'applicazione sarà ingombro di brutte conversioni. Utilizzare invece una tabella separata con un riferimento alla tabella principale e una riga per valore.
supponendo che l'utente abbia impostato le dimensioni della tabella per 2 righe e 3 colonne e abbia effettuato un input per 6 celle, i dati che andranno al database saranno
2,3, D1, D2, D3, D4, D5, D6
quando recupererai i dati dalla cella e farai esplodere su una stringa recuperata otterrai 1 array di dimensioni con 8 elementi
$ r = $ e [0] righe
$ c = $ e [1] cols
$ e [2-7] dati
- wrtite openning < tabella > tag
- due loop, uno nell'altro,
- il primo genererà il codice per l'inizio della riga
- wrtite openning < tr > tag
- all'interno di uno genererà il codice per la riga.
- scrivi apertura < td > tag
- scrivi dati $ e [1 + posizione calcolata da loop interni ed esterni]
- Scrivi chiusura < td > tag
- fine del ciclo interno
- chiusura di wrtite < tr > tag
- fine del ciclo esterno
- chiusura di wrtite < tabella > tag
Dovrebbe darti l'idea