samfisher88 (Normal User)
Newbie
Messaggi: 8
Iscritto: 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 |
echo "<table border=2>"; ////// INIZIO CREAZIONE TABELLA DINAMICA DA QUERY SCRITTA DALL'UTENTE ////// //crea gli header della tabella con i campi $i = 0; echo "<tr>"; { $i++; } echo "</tr>"; //mostra la tabella >>> errore dello sdoppiamento orizzontale dei dati { echo "<tr>"; foreach ($row as $data) { echo "<td>". $data . "</td>"; } echo "</tr>"; } } 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? mi affido a voi guru dell'informatica come sempre
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
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 |
<?
//Header della tabella
echo "
<table border='1' cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' width='532' height='23' id='AutoNumber1'>
<tr>
<td width='108' height='23' align='center'>Denominazione</td>
<td width='179' height='23' align='center'>Descrizione</td>
<td width='76' height='23' align='center'>Prezzo</td>
<td width='70' height='23' align='center'>Quantità</td>
<td width='88' height='23' align='center'>Codice</td>
</tr>";
//ciclo
while($row = mysql_fetch_array($sql)) {
echo "
<tr>
<td width='108' height='23'>$row[Denominazione]</td>
<td width='179' height='23'>$row[Descrizione]</td>
<td width='76' height='23'>$row[Prezzo]</td>
<td width='70' height='23'>$row[quantita]</td>
<td width='88' height='23'>$row[codice]</td>
</tr>";
}
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
|
|
samfisher88 (Normal User)
Newbie
Messaggi: 8
Iscritto: 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...
|
|
antometal (Member)
Guru
Messaggi: 691
Iscritto: 12/09/2007
|
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)
|
|
samfisher88 (Normal User)
Newbie
Messaggi: 8
Iscritto: 19/05/2010
|
ho messo in auge il consiglio ma mi da errore sulla riga dove assegno la variabile $lim..
Codice sorgente - presumibilmente PHP |
<?php { echo "<tr>"; for($n=0;$n<=$lim;$n++) { echo "<td>". $row['$nome'] . "</td>"; } echo "</tr>"; } }?>
|
Ultima modifica effettuata da samfisher88 il 19/05/2010 alle 23:34 |
|
antometal (Member)
Guru
Messaggi: 691
Iscritto: 12/09/2007
|
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;
|
|
samfisher88 (Normal User)
Newbie
Messaggi: 8
Iscritto: 19/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 |
$n=0; { echo "<tr>"; for($n=0;$n<=$lim;$n++) { echo "<td>". $row['$nome'] . "</td>"; } echo "</tr>"; }
|
|
|
antometal (Member)
Guru
Messaggi: 691
Iscritto: 12/09/2007
|
hai provato con:
Codice sorgente - presumibilmente Plain Text |
...
for($n=0;$n<=$lim;$n++)
{
echo "<td>". $row[$n] . "</td>";
}
...
|
|
|
samfisher88 (Normal User)
Newbie
Messaggi: 8
Iscritto: 19/05/2010
|
Postato originariamente da antometal:
hai provato con:
Codice sorgente - presumibilmente Plain Text |
...
for($n=0;$n<=$lim;$n++)
{
echo "<td>". $row[$n] . "</td>";
}
...
|
|
funziona.. grazie mille!!! |
|