PHP/MYSQL - tabel maximaal 4 kolommen naast elkaar

Pagina: 1
Acties:
  • 193 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Ik ben bezig met een agenda script waarbij ik een soort van kalender krijg. Het is de bedoeling dat er in de tabel 4 kolommen worden weergegeven waarna hij vervolgens op de nieuwe rij begint.

Ik heb de breedte van de tabel op 500 gezet waamee ik dacht dat hij dan automatisch wel op de volgende regel gaat beginnen. Maar in werkelijkheid plakt hij ze toch allemaal op 1 rij.

De gegevens inclusief de achtergrond van de cel worden uit een database gehaald.

PHP:
1
echo "\n<td background=$achtergrond>$edatum<br>$plaats<br>$omschrijving<br>$locatie<br>$tijd<br>$concert</td>";


De vraag is in het kort hoe ik het voorelkaar krijg dat ik maximaal 4 kolommen krijg.

Pura Vida


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Kan je misschien eens laten zien hoe je de tabel genereerd? Ik zie dat je nu alleen een <td> genereert en als je dit in een loopje hebt zitten dan krijg je alles achter elkaar omdat je geen <tr> tags genereert. De breedte van de tabel heeft hier (nog) niks mee te maken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Zet voor elke 1e cel een <tr>. Zet na elke 4e cel een </tr>. Klaar.

{signature}


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Creepy schreef op maandag 14 mei 2007 @ 17:26:
Kan je misschien eens laten zien hoe je de tabel genereerd? Ik zie dat je nu alleen een <td> genereert en als je dit in een loopje hebt zitten dan krijg je alles achter elkaar omdat je geen <tr> tags genereert. De breedte van de tabel heeft hier (nog) niks mee te maken.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    $xx=mysql_query("SELECT agenda.*, DATE_FORMAT(edatum, '%d-%m-%Y') AS ddatum, concerten.concert, concerten.achtergrond FROM agenda, concerten WHERE edatum >= curdate()AND agenda.concert = concerten.concert ORDER BY edatum ASC");
    while ($row = mysql_fetch_array($xx))
    {
        $id = $row["id"];
        $omschrijving = $row["omschrijving"];
        $edatum = $row["edatum"];
        $locatie = $row["locatie"];
        $plaats = $row["plaats"];
        $tijd = $row["tijd"];
        $edatum = $row["ddatum"];
        $datumvandaag = date('d-m-Y');
        $concert =$row["concert"];
        $achtergrond = $row["achtergrond"];


Zit inderdaad een loop in. Ik gebruikte ditzelfde verhaal eerder voor het weergeven van tekst in rijen, dan was het geen enkel probleem met tr-tags.

Pura Vida


Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Tip ,

Ga niet zomaar (wat je nu dus doet) variabelen in variabelen gooien, dit kost je preformance.

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je kan het ook zonder tabel doen (aangezien het een lijst is met datums) op de volgende manier:
Cascading Stylesheet:
1
2
3
4
5
6
7
ul {
  width: 500px;
}
li {
  width: 120px;
  float: left;
}


HTML:
1
2
3
4
5
6
7
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</div>


Verder een erg boeiend topic over dit onderwerp:
[css] agenda weergave

Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
k8skaaay schreef op maandag 14 mei 2007 @ 17:31:
Tip ,

Ga niet zomaar (wat je nu dus doet) variabelen in variabelen gooien, dit kost je preformance.
Bedankt voor de tip en begrijp dat dit ff offtopic gaat maar hoe bedoel je 'variabelen in variabelen gooien'

Pura Vida


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
djluc schreef op maandag 14 mei 2007 @ 17:32:
Je kan het ook zonder tabel doen (aangezien het een lijst is met datums) op de volgende manier:
Cascading Stylesheet:
1
2
3
4
5
6
7
ul {
  width: 500px;
}
li {
  width: 120px;
  float: left;
}


HTML:
1
2
3
4
5
6
7
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</div>


Verder een erg boeiend topic over dit onderwerp:
[css] agenda weergave
Dit werkt inderdaad wel echter moet de achtergrond van de cel ook dynamisch zijn. Hij haalt de achtergrond ook uit de database... en zoals ik het nu zie krijg ik niet een achtergrond.

Pura Vida


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je kan dat doen met een simpele inline style op de li tags: <li style="background: achtergrond;"> maar het is mooier om het met classes te doen (als je bijvoorbeeld elk weekend wilt kleuren).

<li class="maandag">
| etc
<li class="vrijdag">
<li class="zaterdag weekend">
<li class="zondag weekend">

Dan kan je simpel in je css het weekend groen kleuren bijvoorbeeld:
Cascading Stylesheet:
1
2
3
li.weekend {
  background-color: green;
}

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Wat ik bedoel is wat je nu doet :
PHP:
1
2
3
4
5
<?php
$var = $_POST['var']; 

echo $var;
?>

Hier schiet je namelijk niets mee op, want je echo't gewoon $_POST['var'] dan als het ware. (Dit is echter een van de vele duizenden voorbeelden.)

Dat wat je doet is alleen makkelijk wanneer je er iets mee gaat doen, maar dan zou het nog zo kunnen bijv :
PHP:
1
2
3
<?php
$tekst = nl2br($_POST['tekst']);
?>


Nu moet ik wel zeggen, normaal gooi je ook geen ruwe post waarden ergens in, omdat je er niet altijd vanuit kan gaan dat je POST waarden goed zijn.

Btw, haal die variabelen eens buiten quotes..
PHP:
1
2
3
4
5
<?php
echo $var.$var2.$var3; // etc
// ipv dus :
echo "$var $var2 $var3"; // etc..
?>

[ Voor 23% gewijzigd door sky- op 14-05-2007 18:12 ]

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
djluc schreef op maandag 14 mei 2007 @ 18:08:
Je kan dat doen met een simpele inline style op de li tags: <li style="background: achtergrond;"> maar het is mooier om het met classes te doen (als je bijvoorbeeld elk weekend wilt kleuren).

<li class="maandag">
| etc
<li class="vrijdag">
<li class="zaterdag weekend">
<li class="zondag weekend">

Dan kan je simpel in je css het weekend groen kleuren bijvoorbeeld:
Cascading Stylesheet:
1
2
3
li.weekend {
  background-color: green;
}
Dit is wel mooi maar hij haalt per genre een andere achtergrond (afbeelding) uit de database). In CSS kan ik niet een $ aanroepen.

Pura Vida


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Denk dat het nu helemaal van de basis van mijn probleem afgaat.. Het gaat mij er juist uit dat ik per item een achtergrond uit de tabel (mysql)kan halen.

De 'li/ul' oplossing biedt die mogelijkheid niet.

Pura Vida


Acties:
  • 0 Henk 'm!

Verwijderd

Kijk naar de oplossing van Voutloos.
Bovendien ben je vergeten } te sluiten:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    $xx=mysql_query("SELECT agenda.*, DATE_FORMAT(edatum, '%d-%m-%Y') AS ddatum, concerten.concert, concerten.achtergrond FROM agenda, concerten WHERE edatum >= curdate()AND agenda.concert = concerten.concert ORDER BY edatum ASC");
    while ($row = mysql_fetch_array($xx))
    {
        $id = $row["id"];
        $omschrijving = $row["omschrijving"];
        $edatum = $row["edatum"];
        $locatie = $row["locatie"];
        $plaats = $row["plaats"];
        $tijd = $row["tijd"];
        $edatum = $row["ddatum"];
        $datumvandaag = date('d-m-Y');
        $concert =$row["concert"];
        $achtergrond = $row["achtergrond"];
!!! HIER HOORT } TE STAAN !!!
?>

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Die code was niet volledig. Als er daar wel een } zou staan dan overschrijf je steeds dezelfde variabelen in een loop, niet echt nuttig :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Verwijderd schreef op maandag 14 mei 2007 @ 19:46:
Kijk naar de oplossing van Voutloos.
Sorry maar dat is toch niet de oplossing? Ik wil vier kolommen naastelkaar hebben.

Pura Vida


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Maverick2001 schreef op maandag 14 mei 2007 @ 19:13:
Denk dat het nu helemaal van de basis van mijn probleem afgaat.. Het gaat mij er juist uit dat ik per item een achtergrond uit de tabel (mysql)kan halen.

De 'li/ul' oplossing biedt die mogelijkheid niet.
Dat kan wel?!
PHP:
1
2
3
4
//.......
while($row=mysql_fetch_assoc($result)) {
  echo '<li style="background-image: url('.$row['image'].')">'.$row['id'].'</li>';
}

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Maverick2001 schreef op maandag 14 mei 2007 @ 20:05:
[...]
Sorry maar dat is toch niet de oplossing? Ik wil vier kolommen naastelkaar hebben.
En hoe voorkom je dat er een 5e kolom bijkomt? Juist, door de huidige rij af te sluiten en een nieuwe te beginnen... Een tabel is voor tabulaire data, je kunt niet verwachten dat een browser dat zelf in rijen en kolommen gaat opdelen, en cellen naar onder gaat floaten: dat zou een chaos worden wanneer je tabellen wel gebruikt waar ze voor bedoeld zijn :)

Maar niet doen dus, de genoemde ul/li icm. floats is hier een prima oplossing voor. Bovendien heb je dan ook de mogelijkheid om snel meer items op 1 regel te zetten met enkel CSS, of om het aantal blokken-per-regel dynamisch te maken. Naast betere semaniek ben je dus ook flexibeler :)

[ Voor 11% gewijzigd door user109731 op 14-05-2007 20:31 ]


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
djluc schreef op maandag 14 mei 2007 @ 20:12:
[...]
Dat kan wel?!
PHP:
1
2
3
4
//.......
while($row=mysql_fetch_assoc($result)) {
  echo '<li style="background-image: url('.$row['image'].')">'.$row['id'].'</li>';
}
Je hebt gelijk dat kan inderdaad. ik de tag voor de row verkeerd gezet in mijn test met de Li-Style.
Zo komt het er perfect uit te zien! Thnx

Pura Vida

Pagina: 1