Avatar billede fogh Nybegynder
07. september 2005 - 21:34 Der er 12 kommentarer og
3 løsninger

Php - MySQL - vis 8 records ad gangen i en tabel

Jeg henter nogle records fra MySql via en query. Queryen vil fx. hente 20 records.

Når jeg præsenterer data sker det i en tabel, som jeg får php til at skrive, så længe der er records at hente. De records, der er, bliver hentet ind i forskellige rækker, således at overskrifterne står i kolonnen til venstre og data er præsenteret i rækker mod højre. Se koden nedenfor.

Jeg har brug for, at der bliver vist 8 records ad gangen, og derefter skal der skrives en ny tabel ud med overskrifter samt 8 records, og sådan skal det fortsætte til der ikke er flere data at hente, uagtet at der muligvis i den sidste tabel ikke er 8 records at vise...

Min kode indtil videre ser således ud:

<?PHP

print "<table border=½ CELLSPACING=\"0\">
<tr>
<td width=150><p>Titel</p></td>";
   
    $query = "SELECT `Titel` FROM `boger` ORDER BY `Titel`";
$result = @mysql_query ($query);
    while ($row = mysql_fetch_array ($result))
    {print "
<td><p>".$row["Titel"]." &nbsp;</a></p></td>";}
    print"</tr>
  <tr>
    <td width=150><p>Forfatter</p></td>";
   
    $query = "SELECT `Forfatter`, `Hjemmeside` FROM `boger` ORDER BY `Titel`";
$result = @mysql_query ($query);
    while ($row = mysql_fetch_array ($result))
    {print "
<td><b><p><a href=".$row["Hjemmeside"].">".$row["Forfatter"]."</a></p></td>";}
    print"</tr>
</table>";
?>

Håber på, at der er nogen der er bedre til løkker eller lignende end mig...??

200 point gives, fordi det er en hastesag :0)
Avatar billede udvikler Nybegynder
07. september 2005 - 21:56 #1
Er det ikke bare:

<?
if($_GET[a] == "" AND $_GET[b] == "") {
$limit = "0.8";
$hent_nyheder = mysql_query("SELECT * FROM blalb ORDER BY ID DESC LIMIT $limit") or die(mysql_error());
while($vis_n = mysql_fetch_array($hent_nyheder)) {
print_r($vis_n);
}
}else{

$limit = "$_GET[a].$_GET[b]";
$hent_nyheder = mysql_query("SELECT * FROM blabla ORDER BY ID DESC LIMIT $limit") or die(mysql_error());
while($vis_n = mysql_fetch_array($hent_nyheder)) {
print_r($vis_n);
}
}
?>

<a href="?a=20&b=28">Her vælger den så fra ID 20 til og med ID 28</a>


?
Avatar billede udvikler Nybegynder
07. september 2005 - 22:41 #2
Går sku i seng nu =P

Men her er et svar, afvis hvis du ikke kunne bruge min ovenståene kode :)
Avatar billede coderdk Praktikant
08. september 2005 - 00:33 #3
Hmm du har jo to queries, som ikke rigtig hænger sammen...
Så jeg har lavet "det samme" to gange:

<?php

    $query = "SELECT `Titel` FROM `boger` ORDER BY `Titel`";
    $result = @mysql_query( $query );
    $i = 0;
    while ( $row = mysql_fetch_assoc( $result ) )
    {
        if ( $i % 8 == 0 )
        {
            print "<table border=½ CELLSPACING=\"0\">
                <tr>
                    <td width=150><p>Titel</p></td>";
        }
        print "
                <td><p>".$row["Titel"]." &nbsp;</a></p></td>";
        if ( $i % 8 == 0 )
        {
            print"</tr>
                </table>";
        }
        $i++;
    }
    if ( --$i % 8 != 0 )
    {
        print"</tr>
            </table>";
    }

    $query = "SELECT `Forfatter`, `Hjemmeside` FROM `boger` ORDER BY `Titel`";
    $result = @mysql_query( $query );
    $i = 0;
    while ( $row = mysql_fetch_assoc( $result ) )
    {
        if ( $i % 8 == 0 )
        {
            print "<table border=½ CELLSPACING=\"0\">
                <tr>
                    <td width=150><p>Forfatter</p></td>";
        }
        print "
            <td><b><p><a href=".$row["Hjemmeside"].">".$row["Forfatter"]."</a></p></td>";
        if ( $i % 8 == 0 )
        {
            print"</tr>
                </table>";
        }
        $i++;
    }
    if ( --$i % 8 != 0 )
    {
        print"</tr>
            </table>";
    }

?>

Det er ikke testet, men umiddelbart ser det da ud til at skulle virke ;)
Avatar billede coderdk Praktikant
08. september 2005 - 00:35 #4
Ved nærmere eftertanke:

<?php

    $query = "SELECT `Titel` FROM `boger` ORDER BY `Titel`";
    $result = @mysql_query( $query );
    $i = 0;
    while ( $row = mysql_fetch_assoc( $result ) )
    {
        if ( $i % 8 == 0 )
        {
            print "<table border=½ CELLSPACING=\"0\">
                <tr>
                    <td width=150><p>Titel</p></td>";
        }
        print "
                <td><p>".$row["Titel"]." &nbsp;</a></p></td>";
        $i++;
        if ( $i % 8 == 0 )
        {
            print"</tr>
                </table>";
        }
    }
    if ( $i % 8 != 0 )
    {
        print"</tr>
            </table>";
    }

    $query = "SELECT `Forfatter`, `Hjemmeside` FROM `boger` ORDER BY `Titel`";
    $result = @mysql_query( $query );
    $i = 0;
    while ( $row = mysql_fetch_assoc( $result ) )
    {
        if ( $i % 8 == 0 )
        {
            print "<table border=½ CELLSPACING=\"0\">
                <tr>
                    <td width=150><p>Forfatter</p></td>";
        }
        print "
            <td><b><p><a href=".$row["Hjemmeside"].">".$row["Forfatter"]."</a></p></td>";
        $i++;
        if ( $i % 8 == 0 )
        {
            print"</tr>
                </table>";
        }
    }
    if ( $i % 8 != 0 )
    {
        print"</tr>
            </table>";
    }

?>
Avatar billede fogh Nybegynder
08. september 2005 - 09:37 #5
Vil dette ikke skrive titlerne og forfatterne i hver sin tabel? Det var nemlig ikke meningen. De skulle gerne stå i den samme tabel... og der skal vises 8 i hver tabel indtil der ikke er flere i databasen, hvilket så muligvis vil betyde at der kun er 4 i den sidste tabel... Hvis jeg forstår dit eksempel korrekt (coderdk) så vil den skrive 8 i første tabel og alt over 8 i den sidste (og så med titlerne og forfatterne i hver sin tabel?), eller er det mig, der ikke lige er helt med? Dette er ikke utænkeligt, da jeg ikke er så stiv i php... Men det kodeeksempel jeg gav foroven virker, og det bliver vist som jeg gerne vil have det, men mangler jo så automatisk at opdele tabellen med 8 visninger...

Tak for svarene, det er kanon at I gider. Jeg skal nok dele point ud, når jeg er sikker på det virker som jeg ønsker det. Ha' en god dag!
Avatar billede showsource Seniormester
08. september 2005 - 09:45 #6
Er heller ik' lige helt med på de to query's
Men noget lign.:

<?php

// connect til DB
$query = mysql_query("SELECT `Titel`, `Forfatter`, `hjemmeside`  FROM `boger` ORDER BY `Titel`") or die (mysql_error());

$tb_string = "</table>\r\n</p>\r\n<p>\r\n<table border=1>";
$del = 8;

echo"<p>\r\n<table border=1>";
$i = 0;
    while($vis = mysql_fetch_array($query)) {
    $i++;

    echo"<tr>\r\n";
    echo"    <td>". $vis[0] ."</td>\r\n";
    echo"    <td>". $vis[1] ."</td>\r\n";
    echo"    <td>". $vis[2] ."</td>\r\n";
    echo"</tr>";

        if($i%$del == 0 && $i != mysql_num_rows($query)) {
        echo $tb_string;
        }
    }
echo"</table>";
?>
Avatar billede fogh Nybegynder
08. september 2005 - 09:48 #7
Nej glem lige det med hver sin tabel... Jeg er vist ikke helt vågen endnu - sorry! Men vil dit eksempel ikke stadig skrive alt over 8 records i den sidste tabel?
Avatar billede fogh Nybegynder
08. september 2005 - 09:57 #8
Der er sandelig noget at gå i gang med... Det vil jeg gøre næste gang min søn skal ud at sove. Han skal jo passes frem for alt. Indtil videre tak for svarene, mon ikke ét af dem kan bruges :0)
Avatar billede coderdk Praktikant
08. september 2005 - 10:10 #9
Jo, jo, mit eksempel bruger modulo (%) og vil lave en ny tabel hver 8. record. Men ja, den tager ført alle bøger, og derefter alle forfattere - Lige som dit oprindelige eksempel. Det er det; jeg forstår ikke hvordan du vil have dine to queries til at hænge sammen (det gør de ikke nu)...
Avatar billede fogh Nybegynder
05. september 2006 - 21:45 #10
Hej! Jeg gik fuldstændig kold i denne for lææænge siden - og skylder jer nu en undskyldning, jeg arbejder ikke med den sag længere.

Hvad gør jeg nu? Giver jeg lige point til jer alle - eller hvad er mest korrekt?
Avatar billede coderdk Praktikant
05. september 2006 - 21:50 #11
hehe næsten et år siden :) måske vil -aco- og showsource have?
Avatar billede fogh Nybegynder
05. september 2006 - 22:06 #12
Pyh, ja, det er det vist også! Skulle man lige vente på at showsource giver et svar?
Avatar billede coderdk Praktikant
06. september 2006 - 00:34 #13
Ja, lad os bare vente på ham :) Lidt extra tid kan da ikke skade nu :-D
Avatar billede showsource Seniormester
06. september 2006 - 04:52 #14
Der kommer lige et svar så! :O)
Avatar billede fogh Nybegynder
06. september 2006 - 10:40 #15
Håber det er OK - og undskyld igen!
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