Toon posts:

[PHP&MYSQL] repeater in meerdere kolommen en rijen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een site voor een meubelgroep en daar komt een collectie in.
Deze wordt geladen uit een database. Maar nu stuit ik op een probleem en dat is het volgende:

Ik heb een repeater erin zitten die elke keer hetzelde stukje uit de database pakt en dan steeds een record opschuift. opzich werkt dat wel goed maar nu wil ik graag dat ik de plaatjes niet alleen maar onder elkaar krijg maar ook naast elkaar.

zie voor meer duidelijkheid : http://www.promswonen.nl/proms/collectie3.php

code die ik gebruik voor de repeater is het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php do { ?>
          <table width="40%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td valign="top"><p>[img]<?php[/img]></p></td>
            </tr>
            <tr>
              <td height="30" valign="top" nowrap><div align="left">
                <p class="style4"><strong><?php echo $row_categorie['merk']; ?> <br>
                <?php echo $row_categorie['naam']; ?><br>
                </strong> </p>
              </div></td>
            </tr>
            <tr>
              <td valign="top"><div align="left" class="style4">
                <p>Klik <a href="#">hier</a> voor meer informatie </p>
              </div></td>
            </tr>
            <tr>
              <td valign="top"> <div align="left">
                <p> &euro; <?php echo $row_categorie['prijs']; ?></p>
              </div></td>
            </tr>
        </table>
          <?php } while ($row_categorie = mysql_fetch_assoc($categorie)); ?>


hopelijk weet iemand van jullie hoe dat simpel kan want in galleries wordt het wel goed gedaan maar die zitten te complex in elkaar om effe stukje coder er uit te plukken. :'(

Mijn dank is groot _/-\o_

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Je zet een variable op 1, en bij elke loop verhoog je die een. Als je variable 4 (of het aantal kolommen dat je wilt) is zet je hem terug op 0 en echo je "</td></tr><tr><td>". Anders echo je "</td><td>". Concreet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$i = 1;
while (...) {
if ($i == 4) {
$i = 1;
echo "</td></tr><tr><td>";
}
else
$i++;

echo "[img]\"...\"[/img]";
}

If you can't beat them, try harder


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Een table om al deze tables heen zetten. Tellertje bijhouden, en als dat tellertje een bepaalde waarde heeft berijkt (bijvoorbeeld 4) een </tr><tr> echoen op de juiste plaats, verder alleen maar <td>'s afdrukken, met daar bovenstaande code weer in.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik denk dat de buren bij W&G een hartaanval zullen krijgen van je HTML code, want tabellen gebruiken voor contentpositioning is not done.
Nog los daarvan ram je er nu voor elk plaatje een hele tabel uit, terwijl je net zo goed een tabel (en een row, waarom wordt zo duidelijk) boven de while lus kunt openen en onder de while lus kunt sluiten.

In de while-lus produceer je dus je informatie in een <td></td> combinatie.
Bovendien laat je een tellertje meelopen waarmee je test of het aantal kolommen is wat je wilt hebben.
Zo ja, dan druk je een </tr><tr> af en begint er dus in feite een nieuwe regel.

Ik beschrijf alleen maar hoe je het kan aanpakken, coden doen we lekker zelf.

edit:

dang, loop ik even achter de feiten aan... nou ja, zoals NME en ik dus zeggen

[ Voor 10% gewijzigd door bigbeng op 19-05-2004 12:31 ]


  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03-2025

intermusic

Marc Hoekstra

Houdt rekening met de optie:
if (($teller % 2) == 0) {
//einde van regel
}

Verwijderd

Topicstarter
Dit gaat mij allemaal beetje te snel.. ik kan pas php sinds 2 dagen (probleempje binnen de groep, onze programmeur kapte ermee)
Dus graag iets duidelijker en het liefst wat kant en klare code

IK dank u :)

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03-2025

intermusic

Marc Hoekstra

Ik weet dat het eigelijk niet mag, maar doe het stiekum even:

Hebben jullie een programmeur nodig?
ik woon ook in leeuwarden en op zoek naar werk... (echt toevallig dus :P )
Meer info op mn website.

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

bigbeng schreef op 19 mei 2004 @ 12:30:
Ik denk dat de buren bij W&G een hartaanval zullen krijgen van je HTML code, want tabellen gebruiken voor contentpositioning is not done.
Hoezo een hardaanval? Het gaat hier toch om tabulaire (?) data? Een tabel is juist bedoeld voor dit soort dingen.

Anyways, hier nog ff een voorbeeldje
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
echo '<table>';

$i = 1;
$max = 4; // max aantal op 1 rij

// loop
while ()
{

// begin rij
if ($i == 1){
echo '<tr><td>';
}else{
echo '<td>';
}

// inhoud tabel
echo 'iets uit database';

// einde rij
if ($i == $max){
$i = 1; // teller reset
echo '</td></tr>';
}else{
echo '</td>';
}

$i ++; // door tellen

} // einde loop

echo '</table>';

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
intermusic schreef op 19 mei 2004 @ 13:02:
Ik weet dat het eigelijk niet mag, maar doe het stiekum even:

Hebben jullie een programmeur nodig?
ik woon ook in leeuwarden en op zoek naar werk... (echt toevallig dus :P )
Meer info op mn website.
Nou het is zo dat dit een schoolproject is en we hier geen geld mee verdienen dus sorry

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03-2025

intermusic

Marc Hoekstra

Kijk ff op dit topic

Verwijderd

Topicstarter
Die manier gaat niet werken helaas het moet wel dynamisch zijn

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

Volgens mij maar dat niet uit. Je kunt imho net zo makkelijk wat DIVs printen als TDs, waarbij DIVs nog wel makkelijk is ook, aangezien je dan geen rekening hoeft te houden met de TRs.. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03-2025

intermusic

Marc Hoekstra

Dit is idd veel makkelijker dynamisch te maken dan die rottige <tr>'s
Ik wil je wel een voorbeeld geven als ik thuis ben (vanavond) hoe je zo een foto apgina kunt maken.

[ Voor 6% gewijzigd door intermusic op 19-05-2004 14:15 ]


Verwijderd

Topicstarter
Dat zou echt super zijn als je dat zou willen doen.

Ik heb ter verduidelijking nog een plaatje gemaakt wat ik bedoel

op alle roze vlakken moet zeg maar een stukje data komen
Afbeeldingslocatie: http://www.promswonen.nl/proms/1.jpg

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

Zou ik die roze vlakken als achtergrond van de TDs (of in het nieuwe geval de DIVs) zetten, en niet als achtergrond van de pagina (of wat het nu ook is). Dan weet je tenminste zeker dat de fotos in het midden van de roze vlakken staan. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
OkkE schreef op 19 mei 2004 @ 15:14:
Zou ik die roze vlakken als achtergrond van de TDs (of in het nieuwe geval de DIVs) zetten, en niet als achtergrond van de pagina (of wat het nu ook is). Dan weet je tenminste zeker dat de fotos in het midden van de roze vlakken staan. :)
die roze vlakken komen niet in de pagina die geven alleen aan dat wat er in het roze vlak links boven zit ook in de andere roze vlakken moet. en op dit moment krijg ik ze alleen maar in de linker 2 roze vlakken en niet in de rechter

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

Gebruik je ondertussen al wel 1 van de scripts die hierboven gepost zijn? Want in jou script staan nog complete tabellen in je while-lus. Maar in HTML komen tabellen standaard nooit naast elkaar, vandaar dat ze dan altijd onder elkaar komen, wat je ook doet.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03-2025

intermusic

Marc Hoekstra

OkkE schreef op 19 mei 2004 @ 15:56:
Gebruik je ondertussen al wel 1 van de scripts die hierboven gepost zijn? Want in jou script staan nog complete tabellen in je while-lus. Maar in HTML komen tabellen standaard nooit naast elkaar, vandaar dat ze dan altijd onder elkaar komen, wat je ook doet.
offtopic:
Das een hele goeie trouwens

Dan moet je ze align left doen, of die tabellen weer in een <TD> pleuren.

[ Voor 7% gewijzigd door intermusic op 19-05-2004 16:02 ]


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

intermusic schreef op 19 mei 2004 @ 15:59:
[...]

offtopic:
Das een hele goeie trouwens

Dan moet je ze align left doen, of die tabellen weer in een <TD> pleuren.
align: left; dat zal ook niet werken denk ik. Waarschijnlijk met float:left; wel, maar dat heb ik niet getest.
Ow en al die tabellen weer in een TD is ook onzin, gooi dan je <TABLE> buiten je while-lus. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
Mensen bedankt ik heb het voor elkaar !!!!!

Verwijderd

ik heb hier ooit een class voor gemaakt.

Class: generate_table.php


========================================================
<?php

class generate_table{
var $ROWS="";
var $CEL="";
var $cols=2;
var $table_vars = "";
var $td_vars = "";
var $border=0;
var $align="";
var $td_width="";
var $td_height="";
var $td_valign="";
var $td_align="";
var $border=0;
var $align="";
var $cellspacing="";
var $cellpadding="";
var $TABLE="";
var $celcount=1;


//private
function generate_cel($data){

if(!empty($this->td_width)){
$this->td_vars=" width=" . $this->td_width;
}
if(!empty($this->td_height)){
$this->td_vars=" height=" . $this->td_height;
}
if(!empty($this->td_valign)){
$this->td_vars=" valign=" . $this->td_valign;
}
if(!empty($this->td_align)){
$this->td_vars=" align=" . $this->td_align;
}

return("\n<td " . $this->td_vars .">\n" . $data . "\n</td>\n");
}

//private
function generate_row($rowcontent){
return("\n<tr>\n" . $rowcontent . "\n</tr>\n");
}

//public
function parse_table($data){
$this->CEL .= $this->generate_cel($data);

if ($this->celcount == $this->cols){
$this->TABLE .= $this->generate_row($this->CEL);
unset($this->CEL);
$this->celcount=0;

}
$this->celcount++;
}

//public
function generate_table_print(){

/*check if there are still some cels left not allready parsed in a row.
If there are any just create a new row
and fill up the rest of the cells with spaces*/


if ($this->celcount>1){

while($this->celcount<=$this->cols){
$this->CEL.="\n<TD> </TD>\n";
$this->celcount++;
}

$this->TABLE .= $this->generate_row($this->CEL);
}

if (!empty($this->border)){
$this->table_vars.=" border=" . $this->border;
}

if (!empty($this->align)){
$this->table_vars.=" align=" . $this->align;
}

if (!empty($this->cellspacing)){
$this->table_vars.=" cellspacing=" . $this->cellspacing;
}

if (!empty($this->cellpadding)){
$this->table_vars.=" cellpadding=" . $this->cellpadding;
}


$table="\n<TABLE $this->table_vars >\n ";
$table.= $this->TABLE;
$table.= "\n</TABLE>\n";

return($table);
}


}


========================================================
Include deze class in je php file met:

require_once("generate_table.php");

$table=new generate_table; //maak een generate_table object

//haal data uit de database
en genereer de data die in de tabel moet komen.

while (){

$table->parse_table($data);
}

echo $table->generate_table_print(); //echo de table
Pagina: 1