Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Creazione Dinamica Tabella HTML
Forum - PHP - Creazione Dinamica Tabella HTML

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
samfisher88 (Normal User)
Newbie


Messaggi: 8
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 1:56
Mercoledì, 19/05/2010
Salve a tutti! ho fatto una pagina in cui si inserisce una query in una textbox e viene eseguita dalla pagina php collegata attraverso il <form action="xxx.php"> nella pagina html statica. Il mio problema è che i dati mi vengono visualizzati 2 volte orizzontalmente.
Vi metto a disposizione il codice commentato (PHP)
Codice sorgente - presumibilmente Php

  1. echo "<table border=2>";
  2.  
  3. ////// INIZIO CREAZIONE TABELLA DINAMICA DA QUERY SCRITTA DALL'UTENTE //////
  4.  
  5. //crea gli header della tabella con i campi
  6. $i = 0;
  7. echo "<tr>";
  8. while ($i <  mysql_num_fields($res))
  9. {
  10. echo "<th>". mysql_field_name($res, $i) . "</th>";
  11. $i++;
  12. }
  13. echo "</tr>";
  14.  
  15. //mostra la tabella >>> errore dello sdoppiamento orizzontale dei dati
  16. while ($row = @ mysql_fetch_array($res))
  17. {
  18. echo "<tr>";
  19. foreach ($row as $data)
  20. {
  21. echo "<td>". $data . "</td>";
  22. }
  23. echo "</tr>";
  24. }
  25.  
  26. }
  27. echo"</table>";



e l'immagine vi fa vedere il risultato.. è tutta la sera che cerco l'errore ma non riesco a trovarlo.. la query è data dall'utente come parametro e presa con il metodo POST (viene poi visualizzata in rosso sulla pagina di esecuzione come vedete dall'immagine)
C'è qualche anima pia che sa come risolvere questa cosa? :D mi affido a voi guru dell'informatica come sempre:k:


samfisher88 ha allegato un file: Immagine.jpg (64112 bytes)
Clicca qui per guardare l'immagine


Programmatore del reparto informatico del servizio chimico di porto di Livorno
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 11:07
Mercoledì, 19/05/2010
ognuno ha sempre il suo metodo di scrittura.

diciamo che la programmazione e come un impronta digitale,
nessuno al mondo programma allo stesso modo di un'altro ed ognuno ha la sua tecnica.

io personalmente avrei fatto diversamente, ovvero la mia tecnica e questa

Codice sorgente - presumibilmente Plain Text

  1. <?
  2.  
  3. //Header della tabella
  4.  
  5. echo "
  6.  <table border='1' cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' width='532' height='23' id='AutoNumber1'>
  7.     <tr>
  8.       <td width='108' height='23' align='center'>Denominazione</td>
  9.       <td width='179' height='23' align='center'>Descrizione</td>
  10.       <td width='76' height='23' align='center'>Prezzo</td>
  11.       <td width='70' height='23' align='center'>Quantità</td>
  12.       <td width='88' height='23' align='center'>Codice</td>
  13.     </tr>";
  14.  
  15.  
  16. //ciclo
  17.  
  18. while($row = mysql_fetch_array($sql)) {
  19.  
  20. echo "
  21.     <tr>
  22.       <td width='108' height='23'>$row[Denominazione]</td>
  23.       <td width='179' height='23'>$row[Descrizione]</td>
  24.       <td width='76' height='23'>$row[Prezzo]</td>
  25.       <td width='70' height='23'>$row[quantita]</td>
  26.       <td width='88' height='23'>$row[codice]</td>
  27.     </tr>";
  28.  
  29.  
  30. }
  31.  
  32. echo "</table>";



In questo esempio ti semplifichi la vita
stampando prima l'header e dopo tutti i dati contenuti.
e ottimizzi molto di più il codice rendendolo anche più leggibile.

in più ti mantieni il layout della tabella, che come ho visto dalla screen.
non è il massimo come risultato.

Ultima modifica effettuata da Thejuster il 19/05/2010 alle 11:12


PM Quote
Avatar
samfisher88 (Normal User)
Newbie


Messaggi: 8
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 11:25
Mercoledì, 19/05/2010
Si staticamente lo so che funziona, ma questo è un caso particolare: la query la scrive l'utente su una pagina HTML e viene passata col metodo post ad una pagina php che la esegue sul database mysql quindi deve gestire il fatto che potrebbero esserci 100 campi nella select così come ci potrebbe essere un campo solo.. Ho trovato quel codice che ho messo che fa quel che mi serve però come vedete mi raddoppia orizzontalmente i dati mentre sul phpmyadmin funzionano correttamente quindi è un problema di codice php...:alert:


Programmatore del reparto informatico del servizio chimico di porto di Livorno
PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 22:52
Mercoledì, 19/05/2010
ho avuto lo stesso problema, sempre query da utente
ho risolsto mettendo come indice dell' array $row il nome del campo
es. $row['Denominazione']
ovviamente ricavando i nomi dei campi con mysql_field_name
puoi anche usare l' indice numerico da 0 fino a count(mysql_num_field($res))-1

il raddoppiamento dei valori si ha perchè l' array si presenta così:
0             -> coca cola
denominazione -> coca cola
1             -> coca cola
descrizione   -> coca cola
2...

puoi verificarlo con print_r($row)


se berlusconi ha i capelli, è grazie alla ricerca

http://antonioserver.altervista.org
PM Quote
Avatar
samfisher88 (Normal User)
Newbie


Messaggi: 8
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 23:18
Mercoledì, 19/05/2010
ho messo in auge il consiglio ma mi da errore sulla riga dove assegno la variabile $lim..

Codice sorgente - presumibilmente PHP

  1. <?php
  2. while ($row = @ mysql_fetch_array($res))
  3. {
  4. echo "<tr>";
  5. $lim=count(mysql_num_fields($res))-1;
  6. for($n=0;$n<=$lim;$n++)
  7. {
  8. $nome=mysql_field_name($res, $n);
  9. echo "<td>". $row['$nome'] . "</td>";
  10. }
  11. echo "</tr>";
  12. }
  13.  
  14. }?>


Ultima modifica effettuata da samfisher88 il 19/05/2010 alle 23:34


Programmatore del reparto informatico del servizio chimico di porto di Livorno
PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 23:43
Mercoledì, 19/05/2010
scusa errore mio, la funzione mysql_num_field restituisce un intero, quindi passato come parametro alla funzione count da errore, perchè non è un array
prova eliminando il count
$lim=mysql_num_fields($res)-1;


se berlusconi ha i capelli, è grazie alla ricerca

http://antonioserver.altervista.org
PM Quote
Avatar
samfisher88 (Normal User)
Newbie


Messaggi: 8
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 0:07
Giovedì, 20/05/2010
mi sa che sbaglio l'aggiunta dell'indice associativo.. mi da errore "unexpected $end" sull'ultima riga del sorgente..

vi posto il codice in questione:
Codice sorgente - presumibilmente PHP

  1. $n=0;
  2. while  ($row = @ mysql_fetch_array($res))
  3. {
  4. echo "<tr>";
  5. $lim=mysql_num_fields($res)-1;
  6. for($n=0;$n<=$lim;$n++)
  7. {
  8. $nome=mysql_field_name($res, $n);
  9. echo "<td>". $row['$nome'] . "</td>";
  10. }
  11. echo "</tr>";
  12. }



Programmatore del reparto informatico del servizio chimico di porto di Livorno
PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 0:17
Giovedì, 20/05/2010
hai provato con:
Codice sorgente - presumibilmente Plain Text

  1. ...
  2. for($n=0;$n<=$lim;$n++)
  3. {
  4. echo "<td>". $row[$n] . "</td>";
  5. }
  6. ...



se berlusconi ha i capelli, è grazie alla ricerca

http://antonioserver.altervista.org
PM Quote
Avatar
samfisher88 (Normal User)
Newbie


Messaggi: 8
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 0:59
Giovedì, 20/05/2010
Testo quotato

Postato originariamente da antometal:

hai provato con:
Codice sorgente - presumibilmente Plain Text

  1. ...
  2. for($n=0;$n<=$lim;$n++)
  3. {
  4. echo "<td>". $row[$n] . "</td>";
  5. }
  6. ...




funziona.. :D grazie mille!!! :k::k:


Programmatore del reparto informatico del servizio chimico di porto di Livorno
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo