Oppure

Loading
18/05/10 23:56
samfisher88
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)
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>";
while ($i <  mysql_num_fields($res))
{
echo "<th>". mysql_field_name($res, $i) . "</th>";
$i++;
}
echo "</tr>";

//mostra la tabella >>> errore dello sdoppiamento orizzontale dei dati
while ($row = @ mysql_fetch_array($res))
{
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? :D mi affido a voi guru dell'informatica come sempre:k:
aaa
19/05/10 9:07
Thejuster
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

<?

//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 19/05/10 9:12
mire.forumfree.it/ - Mire Engine
C# UI Designer
19/05/10 9:25
samfisher88
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:
aaa
19/05/10 20:52
antometal
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)
aaa
19/05/10 21:18
samfisher88
ho messo in auge il consiglio ma mi da errore sulla riga dove assegno la variabile $lim..

<?php
while ($row = @ mysql_fetch_array($res))
{
echo "<tr>";
$lim=count(mysql_num_fields($res))-1;
for($n=0;$n<=$lim;$n++)
{
$nome=mysql_field_name($res, $n);
echo "<td>". $row['$nome'] . "</td>";
}
echo "</tr>";
}

}?>
Ultima modifica effettuata da samfisher88 19/05/10 21:34
aaa
19/05/10 21:43
antometal
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;
aaa
19/05/10 22:07
samfisher88
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:
$n=0;
while  ($row = @ mysql_fetch_array($res))
{
echo "<tr>";
$lim=mysql_num_fields($res)-1;
for($n=0;$n<=$lim;$n++)
{
$nome=mysql_field_name($res, $n);
echo "<td>". $row['$nome'] . "</td>";
}
echo "</tr>";
} 
aaa
19/05/10 22:17
antometal
hai provato con:
...
for($n=0;$n<=$lim;$n++)
{
echo "<td>". $row[$n] . "</td>";
} 
...
aaa