Oggetti in griglia dal database
Oggetti in griglia dal database postato il 24/02/2013 11:51:54 nel forum programmazione, open source e hosting
Buongiorno a tutti :-)
Ancora una volta vi sottopongo una domanda...
Obiettivo: Vorrei cercare di visualizzare le immagini degli oggetti del "mercato" in una griglia 3xn.
Ho pensato che, nonostante non ami le tabelle, scrivere una bella tabella con 3 colonne ed "n" righe non sarebbe una soluzione malvagia. Per farlo ho semplicemente inserito una "tabella":
<tr>
<td> Immagine dal DB </td>
<td> Immagine dal DB </td>
<td> Immagine dal DB </td>
/tr>
in un ciclo while... E fin qui, tutto bene :-)
Le immagini, vengono pesace dal DB e stampate in una tabella 3xn.
Adesso il problema è selezionare le immagini da stampare, perché finora il codice è:
<?
$MySql = "SELECT * FROM Mercato";
$MySql .= " LEFT JOIN Oggetto ON Oggetto.IDOggetto = Mercato.IDOggetto";
$MySql .= " WHERE Categoria = '$Par' and Tipo='$CodTipoOggetto'";
while($rs = mysql_fetch_array($Result)) {
?>
<tr>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
</tr><br>
<?
}
$rs->close;
?>
E quindi ovviamente stampa 3 volte ogni immagine cambiando immagine ad ogni riga della griglia.
Ora, penso che la cosa più "logica" potrebbe essere selezionare i tre indirizzi delle immagini in tre variabili diverse, imponendo una condizione nel selezionare i risultati che valorizzano queste variabili.
Se ad esempio volessi una "griglia" 2xn, potrei prendere i risultati pari per la colonna1 e quelli dispari per la colonna2 e dovrebbe essere piuttosto semplice con la funzione "mod"
mod(IDOggetto,2) = 1
e risp
mod(IDOggetto,2) = 0
MA, resta cmq il fatto che io non voglio una griglia 2xn bensì 3xn (potrei al limite accontentarmi di una 4xn, se si potessero prendere, che so, i multipli dei pari e dei dispari...)
Qualche idea su come stampare questa benedetta griglia?
Grazie a tutti :)
Pagine → 1
24/02/2013 12:12:45
Potresti mettere tutto il resultset all'interno di un array bidimensionale, così poi quel while lo scriverai scorrendo l'array e dando un indice diverso ad ogni riga, riuscendo a scorrerlo a slot di 3.
L'unico problema arriva se hai qualcosa come 25 righe, perché rimarrebbe una riga compilata solo per metà, in quel caso dovresti aggiungere dei controlli per evitare di farlo scrivere a vuoto.
In modo più spartano puoi fare la stessa cosa forzando un nuovo mysql_fetch_array tra una riga della tabella ed un'altra, ma rimane comunque il problema di n%3!=0
24/02/2013 12:20:46 e modificato da darkabe il 24/02/2013 12:21:51
L'unica altra soluzione (sicuramente migliorabile) che mi viene in mente, è questa
<tr>
<? $count=0;
while($rs = mysql_fetch_array($Result)) {
$count++;
?>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
<? if ($count%3==0) { ?>
</tr><br><tr>
<? }
} ?>
</tr><br>
24/02/2013 12:52:52
Allora...
scusate per i multipli edit. Alla fine preferisco riassumere qui:
Il metodo proposto da Darkabe funziona MA, salta sempre un'oggetto.
Dividendo per tipo (categoria):
Nella lista1:
mi salta l'ID=1
ID della lista: 1, 28, 29, 31, 70, 71
Nella lista2:
mi salta l'ID=27
ID della lista: 27, 30, 35, 36, 37, 38
Nella lista3:
mi salta l'ID=6
ID della lista: 2, 3, 4, 5, 6, 32 ,33 ,34
Nella lista4:
mi salta l'ID=50
ID della lista: 50, 51, 52, 53, 54, 55, 56
Posto questa lista perché, come vedete, per tutte le liste, fatta eccezione per la nr 3, salta l'ID più piccolo. Ma nella tre salta l'ID=6, pur esistendo ID minori e maggiori di 6...
Che diavolo di sistema usa per "saltare" un ID?
24/02/2013 13:17:41 e modificato da darkabe il 24/02/2013 13:18:43
Prova a mettere un echo di questo tipo
<tr>
<? $count=0;
while($rs = mysql_fetch_array($Result)) {
$count++;
$resl.="count $count <br>";
?>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
<?
$resl.="scrivo riga <br>";
if ($count%3==0) {
$resl.="inizio una nuova riga <br>";
?>
</tr><br><tr>
<? }
} ?>
</tr><br>
<?= $res ?>
dovrebbe darti un output molto simile a questo
count 1
scrivo riga
count 2
scrivo riga
count 3
scrivo riga
inizio una nuova riga
count 4
. . .
PS: Sicuro non sia un problema di join?
24/02/2013 13:40:21
Provato, ma non cambia nulla.
darkabe ha scritto:
[...]
PS: Sicuro non sia un problema di join?
Beh, sicuro... no. Però, ce problema di join potrebbe essere?
Insomma:
$MySql = "SELECT * FROM Mercato";
$MySql .= " LEFT JOIN Oggetto ON Oggetto.IDOggetto = Mercato.IDOggetto";
$MySql .= " WHERE Categoria = '$Par' and Tipo='$CodTipoOggetto'";
mi sembra corretto e le tabelle Mercato e Oggetto non riportano differenze nei singoli oggetti che mancano...
24/02/2013 13:58:30 e modificato da sgc carter il 24/02/2013 14:00:20
Per tagliare la testa al toro ho fatto questa modifica:
<?
#------------- OGGETTI ---------------
//$MySql = "SELECT * FROM Mercato";
//$MySql .= " LEFT JOIN Oggetto ON Oggetto.IDOggetto = Mercato.IDOggetto";
//$MySql .= " WHERE Categoria = '$Par' and Tipo='$CodTipoOggetto'";
$MySql = "SELECT * FROM Oggetto";
$MySql .= " WHERE Tipo='$Tipo'";
$Result = mysql_query($MySql);
while($rs = mysql_fetch_array($Result)) {
?>
<tr>
<? $count=0;
while($rs = mysql_fetch_array($Result)) {
$count++;
$resl.="count $count <br>";
?>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
<?
$resl.="scrivo riga <br>";
if ($count%3==0) {
$resl.="inizio una nuova riga <br>";
?>
</tr><br><tr>
<? }
} ?>
</tr><br>
<?= $res ?>
In pratica ho proprio eliminato il JOIN, ma il risultato non cambia...
24/02/2013 14:51:41 e modificato da darkabe il 24/02/2013 14:53:23
while($rs = mysql_fetch_array($Result)) {
?>
<tr>
<? $count=0;
while($rs = mysql_fetch_array($Result)) {
sta qui l'inghippo, il while in alto deve andar via, altrimenti legge il primo dato del resultset, poi ne legge un secondo e solo dopo inizia ad elaborare, quindi ti sparisce il primo
deve restare solo questo
<?
#------------- OGGETTI ---------------
$MySql = "SELECT * FROM Mercato";
$MySql .= " LEFT JOIN Oggetto ON Oggetto.IDOggetto = Mercato.IDOggetto";
$MySql .= " WHERE Categoria = '$Par' and Tipo='$CodTipoOggetto'";
$Result = mysql_query($MySql);
?>
<tr>
<? $count=0;
while($rs = mysql_fetch_array($Result)) {
$count++;
?>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
<?
if ($count%3==0) {
?>
</tr><br><tr>
<? }
} ?>
</tr><br>
24/02/2013 15:42:39
Grande Darkabe! :-)
Funziona alla grande. Posto qui il codice finito. Potrebbe servire a qualcuno un giorno ^^
<?
#------------- OGGETTI ---------------
$MySql = "SELECT * FROM Mercato";
$MySql .= " LEFT JOIN Oggetto ON Oggetto.IDOggetto = Mercato.IDOggetto";
$MySql .= " WHERE Categoria = '$Par' and Tipo='$CodTipoOggetto'";
$Result = mysql_query($MySql);
?>
<tr>
<? $count=0;
while($rs = mysql_fetch_array($Result)) {
$count++;
?>
<td> <a href="img/oggetti/<?= trim($rs["URLImg"])?>"><img src="img/oggetti/<?= trim($rs["URLImg"])?>" style="width:200px;height:200px;"></a></td>
<? if ($count%4==0) { ?> //cambiare il numero "4" nel numero di colonne che si vogliono
</tr><br>
<? }
} ?>
<? $rs->close; ?>
Grazie a tutti per il prezioso aiuto :-)
24/02/2013 19:34:38
Scusa la domanda, perchè il <br> tra una riga e l'altra della tabella? °_°
24/02/2013 20:53:05
Altra domanda, perchè $rs->close?
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Fallen Gods ↗
Wuthering Waves ↗
Sea of Conquest ↗
Seconda Era ↗
State of Survival ↗
RAID Shadow Legends ↗
World of Warship ↗
Tibia ↗
Project Entropy ↗