Avatar billede nyst Nybegynder
17. oktober 2005 - 11:27 Der er 28 kommentarer og
1 løsning

udskrive tabel i gruppering og med farveskift

Hi there,
har en idé om at lave en linkssamling i database der så udskrives i en tabel som gruperes efter alfabetet og som viser hvert bogstav f.eks A som overskrift med link til 'top' og indefor hvert bogsatvsgrupering skriver alle links sorteret efter navn.
Når den så skifter til næste bogstav så ændres samtidig beggrundsfarven.

Har indtil nu fået denne til at virker men den er ikke grupperet:

Database:

CREATE TABLE links (
  id int(11) NOT NULL auto_increment,
  grp tinytext NOT NULL,
  www tinytext NOT NULL,
  navn tinytext NOT NULL,
  tekst text NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM COMMENT='links';


kode:

<?php
mysql_connect("localhost","","");
mysql_select_db("_db");
$x = 0;
$query = mysql_query("SELECT * FROM `links` ORDER BY grp");
$data = mysql_fetch_array($query);
$out .= "<table border=0 cellpadding=0 cellspacing=0>";
$out .= "<tr><td>";
$out .= "<table border='0' cellpadding='3' cellspacing='0'>";
while($data = mysql_fetch_array($query)) {
    $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
    $out .= "<tr><td bgcolor=\"".$color."\">$data[grp]<br><a href='$data[www]' target='_blank' class=''>$data[navn]</a><br>$data[tekst]</td></tr>";
}
$out .= "</table><br>";
$out .= "</td></tr>";
$out .= "</table>";
echo $out;
mysql_close();
?>
Avatar billede Slettet bruger
17. oktober 2005 - 11:44 #1
Lav en variabel med forbogstavet på det sidste post.
Hvis så ikke det er det samme som på det nuværende post, skriver du overskriften ud:

<?php
mysql_connect("localhost","","");
mysql_select_db("_db");
$x = 0;
$query = mysql_query("SELECT * FROM `links` ORDER BY grp");
$data = mysql_fetch_array($query);
$out .= "<table border=0 cellpadding=0 cellspacing=0>";
$out .= "<tr><td>";
$out .= "<table border='0' cellpadding='3' cellspacing='0'>";
while($data = mysql_fetch_array($query)) {
    $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
    if ($forbogstav != $data[navn]{0}) $out .= "<tr><td bgcolor=\"".$color."\" colspan=\"5\">".$data[navn]{0}."</td></tr>";
    $forbogstav = $data[navn]{0};
    $out .= "<tr><td bgcolor=\"".$color."\">$data[grp]<br><a href='$data[www]' target='_blank' class=''>$data[navn]</a><br>$data[tekst]</td></tr>";
}
$out .= "</table><br>";
$out .= "</td></tr>";
$out .= "</table>";
echo $out;
mysql_close();
?>
Avatar billede nyst Nybegynder
17. oktober 2005 - 11:51 #2
hej philip,
desværre så duer den ikke...
den skriver 'grp' som er alfabetet flere gange også kun ved en post under bogstavet, endvidere samler den ikke alle poster under f.eks. grp B - din skriver alle B'er ud i hver sit felt - hvor den skulle samle dem med samme farve og så gå videre til C og skifte farve her.
:-)
Avatar billede nyst Nybegynder
17. oktober 2005 - 12:11 #3
suppl. oplysninger:

har et alfabet hvor man kan springe til 'grp med <a href="#b">B </a> og <a name="b">B</a>

hvor der så skrives B som overskrift skal der samtidgig være link 'til top'

håber alle oplysninger nu er der ...

:-)
Avatar billede jaw Nybegynder
17. oktober 2005 - 14:07 #4
Kan du smide et link til din side?
Avatar billede nyst Nybegynder
17. oktober 2005 - 14:18 #5
hej jaw,
nej det er en andens side jeg hjælper med så det kan jeg ikke og det tager tid hvis jeg skal lægge den ud på min egen da der er en del links SS

:-)
Avatar billede coderdk Praktikant
17. oktober 2005 - 15:11 #6
Noget i denne stil?

<?php

    mysql_connect("localhost","","");
    mysql_select_db("_db");
    $x = 0;
    $query = mysql_query("SELECT * FROM `links` ORDER BY grp");
    $data = mysql_fetch_array($query);
    $out .= "<table border=0 cellpadding=0 cellspacing=0>";
    $out .= "<tr><td>";
    $out .= "<table border='0' cellpadding='3' cellspacing='0'>";
    $old = '';
    while($data = mysql_fetch_array($query))
    {
        $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
        $out .= "<tr><td bgcolor=\"".$color."\">";
        if ( $data['grp'] != $old )
        {
            $out .= "$data[grp]<br>";
            $old = $data['grp'];
        }
        $out .= "<a href='$data[www]' target='_blank' class=''>$data[navn]</a><br>$data[tekst]</td></tr>";
    }
    $out .= "</table><br>";
    $out .= "</td></tr>";
    $out .= "</table>";
    echo $out;
    mysql_close();

?>
Avatar billede nyst Nybegynder
17. oktober 2005 - 15:35 #7
Heij coderdk,
håber alt vel *S*

Se det ser bedre ud dog:

- ved flere i samme 'grp' skifter den farve for hvert link, det skal den ikke kun skifte for hvert bogstav altså A,B,C osv.

Kunne man give grp'en egen farve???

Endvidere skal jeg have koblet link til grp'erne på og til top men lad det vente.

:-)

:-)
Avatar billede coderdk Praktikant
17. oktober 2005 - 15:36 #8
Alt er vel ;) Du kan bare flytte farveskiftet ind i if'en:

<?php

    mysql_connect("localhost","","");
    mysql_select_db("_db");
    $x = 0;
    $query = mysql_query("SELECT * FROM `links` ORDER BY grp");
    $data = mysql_fetch_array($query);
    $out .= "<table border=0 cellpadding=0 cellspacing=0>";
    $out .= "<tr><td>";
    $out .= "<table border='0' cellpadding='3' cellspacing='0'>";
    $old = '';
    while($data = mysql_fetch_array($query))
    {
        $out .= "<tr><td bgcolor=\"".$color."\">";
        if ( $data['grp'] != $old )
        {
            $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
            $out .= "$data[grp]<br>";
            $old = $data['grp'];
        }
        $out .= "<a href='$data[www]' target='_blank' class=''>$data[navn]</a><br>$data[tekst]</td></tr>";
    }
    $out .= "</table><br>";
    $out .= "</td></tr>";
    $out .= "</table>";
    echo $out;
    mysql_close();

?>
Avatar billede coderdk Praktikant
17. oktober 2005 - 15:39 #9
Er det noget i denne stil du er ude efter:

<?php

    mysql_connect("localhost","","");
    mysql_select_db("_db");
    $x = 0;
    $query = mysql_query("SELECT * FROM `links` ORDER BY grp");
    $data = mysql_fetch_array($query);
    $out .= "<table border=0 cellpadding=0 cellspacing=0>";
    $out .= "<tr><td>";
    $out .= "<table border='0' cellpadding='3' cellspacing='0'>";
    $old = '';
    $grps = array();
    while($data = mysql_fetch_array($query))
    {
        $out .= "<tr><td bgcolor=\"".$color."\">";
        if ( $data['grp'] != $old )
        {
            $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
            $out .= "<a name='$data[grp]'></a>$data[grp]<br>";
            $old = $data['grp'];
            $grps[] = $data['grp'];
        }
        $out .= "<a href='$data[www]' target='_blank' class=''>$data[navn]</a><br>$data[tekst]</td></tr>";
    }
    $out .= "</table><br>";
    $out .= "</td></tr>";
    $out .= "</table>";
    $tmp = '';
    foreach ( $grps as $grp )
    {
        $tmp .= '<a href="#' . $grp . '">' . $grp . '</a><br>';
    }
    $tmp .= '<br>';
    echo $tmp . $out;
    mysql_close();

?>

?
Avatar billede nyst Nybegynder
17. oktober 2005 - 15:44 #10
der er noget galt med begge to:

de har ikke farve ved første grp A
og
når der er flere links i samme grp starter den med en farve på grp-bogstav + første link, skifter så farve på de andre og fortsætter med samme farve på næste grp-bogstav

så noget er galt?
Avatar billede coderdk Praktikant
17. oktober 2005 - 15:48 #11
Prøv lige med:

<?php

    mysql_connect("localhost","","");
    mysql_select_db("_db");
    $x = 0;
    $query = mysql_query("SELECT * FROM `links` ORDER BY grp");
    $data = mysql_fetch_array($query);
    $out .= "<table border=0 cellpadding=0 cellspacing=0>";
    $out .= "<tr><td>";
    $out .= "<table border='0' cellpadding='3' cellspacing='0'>";
    $old = '';
    $grps = array();
    $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
    while($data = mysql_fetch_array($query))
    {
        $out .= "<tr><td bgcolor=\"".$color."\">";
        if ( $data['grp'] != $old )
        {
            $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
            $out .= "<a name='$data[grp]'></a>$data[grp]<br>";
            $old = $data['grp'];
            $grps[] = $data['grp'];
        }
        $out .= "<a href='$data[www]' target='_blank'>$data[navn]</a><br>$data[tekst]</td></tr>";
    }
    $out .= "</table><br>";
    $out .= "</td></tr>";
    $out .= "</table>";
    $tmp = '';
    foreach ( $grps as $grp )
    {
        $tmp .= '<a href="#' . $grp . '">' . $grp . '</a><br>';
    }
    $tmp .= '<br>';
    echo $tmp . $out;
    mysql_close();

?>
Avatar billede nyst Nybegynder
17. oktober 2005 - 15:53 #12
nu er der farve på første grp
men
der er stadig problem når der er mere end et link i grp
så sker følgende
første link ok men skifter så farve på resten af link i denne grp
+
farven fortsætter på næste grp
Avatar billede nyst Nybegynder
17. oktober 2005 - 15:55 #13
+ den starter med ca 5 cm blank inden tabellen med links fremkommer !!!
Avatar billede coderdk Praktikant
17. oktober 2005 - 15:57 #14
hehhe ok, prøv lige med:

<?php

    mysql_connect("localhost","","");
    mysql_select_db("_db");
    $x = 0;
    $query = mysql_query("SELECT * FROM `links` ORDER BY grp");
    $data = mysql_fetch_array($query);
    $out .= "<table border=0 cellpadding=0 cellspacing=0>";
    $out .= "<tr><td>";
    $out .= "<table border='0' cellpadding='3' cellspacing='0'>";
    $old = '';
    $grps = array();
    $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
    while($data = mysql_fetch_array($query))
    {
        if ( $data['grp'] != $old )
        {
            $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
            $out .= "<tr><td bgcolor=\"".$color."\">";
            $out .= "<a name='$data[grp]'></a>$data[grp]<br>";
            $old = $data['grp'];
            $grps[] = $data['grp'];
        }
        else
        {
            $out .= "<tr><td bgcolor=\"".$color."\">";
        }
        $out .= "<a href='$data[www]' target='_blank' class=''>$data[navn]</a><br>$data[tekst]</td></tr>";
    }
    $out .= "</table><br>";
    $out .= "</td></tr>";
    $out .= "</table>";
    $tmp = '';
    foreach ( $grps as $grp )
    {
        $tmp .= '<a href="#' . $grp . '">' . $grp . '</a><br>';
    }
    $tmp .= '<br>';
    echo $tmp . $out;
    mysql_close();

?>
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:01 #15
nu er farverne ok
meeeen
der er stadig 5 cm øverst før tabel med links fremkommer

:-)
Avatar billede coderdk Praktikant
17. oktober 2005 - 16:02 #16
Hvordan ser HTML'en ud der bliver genereret?
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:07 #17
ok det er alle bogstvslinkene der mangler en class, men de står efter hinanden hvordan får jeg dem til at stå vandret og ikek lodret efter hinanden og hvis bogstav skal være bold hvor gør jeg det?
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:08 #18
bogstaver står nu vandret
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:10 #19
skal have en class ind i denne

        $tmp .= '<a href="#' . $grp . '">' . $grp . '</a>';

:-)
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:20 #20
html begynder med:

<a href="#A">A</a> &nbsp;<a href="#D">D</a> &nbsp;<a href="#H">H</a> osv.

udskriver tabel

men skriver <a name='A'></a>A forker som du kan se

samt min kodechecker giver maaer af fejl for ' i stedet for " - men det betyder nok ikek noget jo
Avatar billede coderdk Praktikant
17. oktober 2005 - 16:35 #21
Det skal den såmænd gøre... Virker det ikke da?
Du smider bare en class i a href:

  $tmp .= '<a class="enklasse" href="#' . $grp . '">' . $grp . '</a><br>';
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:43 #22
jo det virker bare ski''' godt

jeg finpudser lidt men har svært ved at få feltet øverst med bogstavslinkene i et farvet felt, farven skal ikke være som de to andre farver

har fået den bold osv

:-)
Avatar billede coderdk Praktikant
17. oktober 2005 - 16:44 #23
echo '<div class="en-andan-klasse">' . $tmp . '</div>' . $out;

:)
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:46 #24
sig mig denne

        if ( $data['grp'] != $old )
        {
            $color = ( $x++ % 2 ? "#DADADA" : "#E6E6E6");
            $out .= "<tr><td bgcolor=\"".$color."\">";
            $out .= "<a name='$data[grp]'></a><b>$data[grp]</b><br><br>";
            $old = $data['grp'];
            $grps[] = $data['grp'];
        }

er det linien

$out .= "<tr><td bgcolor=\"".$color."\">";

som skifter farven - for den går igen under

        else
        {
            $out .= "<tr><td bgcolor=\"".$color."\">";
        }

altså $color

:-)
Avatar billede coderdk Praktikant
17. oktober 2005 - 16:48 #25
Ja, de er ens ;P Den ene bruges hver gang der skiftes gruppe, den anden ved alt andet ;)
Avatar billede nyst Nybegynder
17. oktober 2005 - 16:48 #26
det må vel være denne som jeg skal have sat baggrundsfarve på ik'

    foreach ( $grps as $grp )
    {
        $tmp .= '&nbsp;&nbsp;&nbsp;<a href="#' . $grp . '" class="h">' . $grp . '</a> &nbsp;';
    }
    $tmp .= '<br><br>';
    echo $tmp . $out;


?? :-)
Avatar billede coderdk Praktikant
17. oktober 2005 - 16:49 #27
Se mit svar fra 17/10-2005 16:44:20 - Så kan du bare lave en ny klasse der med en baggrundsfarve :)
Avatar billede nyst Nybegynder
17. oktober 2005 - 17:08 #28
Hej coderdk,

undskyld den der kl 16:44 så jeg inte *GG*

Nu virker det lige som jeg havde tænkt mig - det er bare kanon...

Takker igen for din hjælp og sender points til dig.

God aften og sikkert på gensyn en anden dag

:-)
Avatar billede coderdk Praktikant
17. oktober 2005 - 17:08 #29
:) Tak for pts :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester