Avatar billede lsskaarup Nybegynder
17. august 2004 - 01:04 Der er 29 kommentarer og
1 løsning

Endnu et billedegalleri

Jeg skal bruge et billedegalleri, og har derfor kigget lidt rundt herinde, men kunne ikke finde noget som jeg helt kunne bruge eller forstå.

Jeg skal have lavet det sådan, at der er 2 overordende rækker og 4 kolonner, med forskellige billeder i. Er der flere billede end disse 8, skal man kunne bladre i siderne via paging.

Men hvordan får jeg sat det op, så billede 1 står i celle 1, billede 2 i celle 2 osv. Det skulle altså gerne komme til at se sådanne ud:

---------------------
| c1 | c2 | c3 | c4 |
---------------------
| c5 | c6 | c7 | c8 |
---------------------
            side 1 >>(næste side)

Hver overordnede række skal altså igen bestå af 4 rækker, til selve dataudtræk fra DB.
Avatar billede dennismp Nybegynder
17. august 2004 - 01:11 #1
print "<table><tr>";
for($i=0;$i<8;$i++) { // hvis vi antager at der er 8 pr side.
  print "<td>billede$i</td>";
  if( ($i+1)%4 == 0 ) {
      if($i == 7 ) // sidste række, der kommer ikke flere
        print "</tr>";
      else  // afslut nuværende række, forsæt med næste
        print "</tr><tr>";
  }
}

if( $i != 8 )
  print "</tr>";  // hvis der er 3 billeder - skal vi huske at afslutte med </tr> - da vi ikke har gjort det endnu.

print "</table>";


(koden er utestet - men jeg håber det kan give lidt inspiration)
Avatar billede lsskaarup Nybegynder
17. august 2004 - 16:53 #2
Både og, mit problem er at jeg skal have diverse oplysninger ud fra en DB, og klassikeren er jo:

$person = mysql_query("SELECT * FROM RS_Medarbejder");
while ($personen = mysql_fetch_array($person)){
    //Et eller andet sker
}

og det er også den jeg har arbejdet med, men det som skal ske i while-løkken, kommer jo til at ske ved hvert billede, og det er det som driller mig lidt.
Avatar billede dennismp Nybegynder
17. august 2004 - 17:03 #3
Du sætter dem  bare sammen.

$i=0;
while(($personen = mysql_fetch_array($person)) && $i < 8 ){
 
  // indholdet af for-løllen her

  $i++;
}

if( $i != 8 ) ...
Avatar billede lsskaarup Nybegynder
17. august 2004 - 17:08 #4
Mener du

print "<table><tr>";
for($i=0;while(($personen = mysql_fetch_array($person)) && $i < 8) {
  print "<td>$personen[navn]</td>";
  if( ($i+1)%4 == 0 ) {
      if($i == 7 ) // sidste række, der kommer ikke flere
        print "</tr>";
      else  // afslut nuværende række, forsæt med næste
        print "</tr><tr>";
  }
$i++
}

if( $i != 8 )
  print "</tr>";  // hvis der er 3 billeder - skal vi huske at afslutte med </tr> - da vi ikke har gjort det endnu.

print "</table>";
Avatar billede dennismp Nybegynder
17. august 2004 - 17:24 #5
Nej :)

print "<table><tr>";

$i=0;
while(($personen = mysql_fetch_array($person)) && $i < 8 ){ 
  print "<td>$personen[navn]</td>";
  if( ($i+1)%4 == 0 ) {
      if($i == 7 ) // sidste række, der kommer ikke flere
        print "</tr>";
      else  // afslut nuværende række, forsæt med næste
        print "</tr><tr>";
  }

  $i++;
}

if( $i != 8 )
  print "</tr>";  // hvis der er 3 billeder - skal vi huske at afslutte med </tr> - da vi ikke har gjort det endnu.

print "</table>";
Avatar billede lsskaarup Nybegynder
17. august 2004 - 17:27 #6
Ja, det fandt jeg også lige ud af, nu virker det i hvart fald med de 4 billeder som er uploadet. Så skal jeg bare lige teste om det også fordeler 8 billeder på 2 rækker, og om den laver paging ordentligt.
Avatar billede dennismp Nybegynder
17. august 2004 - 17:35 #7
Det er noget der plejer at kunne drille en smule :)
Avatar billede lsskaarup Nybegynder
17. august 2004 - 17:35 #8
Paging eller opdelingen, som lige nu ikke virker
Avatar billede lsskaarup Nybegynder
17. august 2004 - 17:39 #9
Okay, opdelingen fungere næsten, jeg har ændret noget i din kode, så nu laver den ikke helt en ny række. Mig kode pt. er

                                                    $person = mysql_query("SELECT * FROM RS_Medarbejder");
                                                    print "<table width='510' border='0' cellpadding='0' cellspacing='0'><tr><td>";
                                                    $i=0;
                                                    while(($personen = mysql_fetch_array($person)) && $i < 8) {
                                                        print "<table><tr><td><img src='$personen[sti]' width='123' height='168'></td></tr></table>";
                                                        print "<table><tr><td>$personen[navn]</td></tr></table>";
                                                        print "<table><tr><td>$personen[stilling]</td></tr></table>";
                                                        print "<table><tr><td>$personen[afdeling]</td></tr></table></td><td>";
                                                      if( ($i+1)%4 == 0 ) {
                                                          if($i == 7 ) // sidste række, der kommer ikke flere
                                                            print "</td></tr>";
                                                          else  // afslut nuværende række, forsæt med næste
                                                            print "</td></tr><tr>";
                                                      }
                                                    $i++;
                                                    }
Avatar billede dennismp Nybegynder
17. august 2004 - 17:40 #10
Nej det virker ikke, fordi det er slet ikke lavet endnu. Men virker visningen af een side rigtigt? Ser htmlen rigtig ud?
Avatar billede lsskaarup Nybegynder
17. august 2004 - 17:51 #11
Du kan prøve at se her hvordan jeg gerne vil have det til at se ud.
http://www.larsskaarup.dk/randerssport/personale.php
Avatar billede dennismp Nybegynder
17. august 2004 - 17:53 #12
ok.

Men lige pt. Viser den "en side" rigtigt? (at du ikke kan skifte side, venter vi med, til vi ved om den viser det ordenligt).
Avatar billede lsskaarup Nybegynder
17. august 2004 - 17:59 #13
Nej den viser faktisk ikke "én side" helt rigtigt. Det link jeg sendte til dig er en prototype, det er rene og skær html, altså ingen DB i den.
Avatar billede lsskaarup Nybegynder
17. august 2004 - 18:00 #14
Den siden som jeg arbejder på er faktisk denne:
http://www.larsskaarup.dk/randerssport/personale-test.php
Avatar billede dennismp Nybegynder
17. august 2004 - 18:06 #15
Kan du ikke bare sammenligne html'en i de to og se hvad forskellene er?
Avatar billede lsskaarup Nybegynder
17. august 2004 - 19:08 #16
Jo det er også det jeg kæmper med, men nu er der jo håndbold ;-)
Avatar billede lsskaarup Nybegynder
17. august 2004 - 19:19 #17
Lige nu ser html'en sådan ud:

<table width='510' border='1' cellpadding='0' cellspacing='0'>
<tr>
<td><img src='uploads/Niels-Ove.jpg' width='123' height='168'></td>
<td>Niels Ove Jensen</td><td>Indehaver</td>
<td></td>
<td><img src='uploads/Bent-J.jpg' width='123' height='168'></td>
<td>Bent Josephsen</td><td>Indehaver</td>
<td>Butikschef</td>
<td><img src='uploads/Leif.jpg' width='123' height='168'></td>
<td>Leif Nielsen</td><td>Indehaver</td>
<td>Sports Direct</td>
<td><img src='uploads/Peter-Winter.jpg' width='123' height='168'>
</td><td>Peter Winter</td>
<td>Indehaver</td>
<td>Bogholderiet</td>
</tr>
<tr>
<td><img src='uploads/Annika.jpg' width='123' height='168'></td>
<td>Annika Thomsen</td>
<td>Salgsassistent</td>
<td>Sport og fritidstøj</td>
<td><img src='uploads/Bent-A.jpg' width='123' height='168'></td>
<td>Bent Axelsen</td>
<td>Salgsassistent</td>
<td>Ski og vinterbeklæding</td>
<td><img src='uploads/Conny.jpg' width='123' height='168'></td>
<td>Conny L. Nielsen</td>
<td></td>
<td>Sport Direct</td>
<td><img src='uploads/Fanny.jpg' width='123' height='168'></td>
<td>Fanny Thorsen</td>
<td>Salgsassistent</td>
<td>Bade- og fitnesstøj</td>
</tr>
</table>

og den skal se sådanne ud:

<table width="510" border="0" cellpadding="0" cellspacing="0">
                                                <tr>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Niels-Ove.jpg" width="123" height="168" alt="Ja... Kommentar overflødig"></td>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Bent-J.jpg" width="123" height="168"></td>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Leif.jpg" height="168" width="123"></td>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Peter-Winter.jpg" width="123" height="168"></td>
                                                </tr>
                                                <tr>
                                                    <td class="norm">Niels Ove Jensen</td>
                                                    <td class="norm">Bent Josephsen</td>
                                                    <td class="norm">Leif Nielsen</td>
                                                    <td class="norm">Peter Winter</td>
                                                </tr>
                                                <tr>
                                                    <td class="norm" valign="top">Indehaver</td>
                                                    <td class="norm" valign="top">Indehaver<br>Butikschef</td>
                                                    <td class="norm" valign="top">Indehaver<br>Sport Direct</td>
                                                    <td class="norm" valign="top">Indehaver<br>Bogholderiet</td>
                                                </tr>
                                                <tr>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Annika.jpg" width="123" height="168"></td>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Bent-A.jpg" width="123" height="168"></td>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Conny.jpg" width="123" height="168"></td>
                                                    <td align="center" valign="middle" background=""><img src="images/personale/Fanny.jpg" width="123" height="168"></td>
                                                </tr>
                                                <tr>
                                                    <td class="norm">Annika Thomsen</td>
                                                    <td class="norm">Bent Axelsen</td>
                                                    <td class="norm">Conny L. Nielsen</td>
                                                    <td class="norm">Fanny Thorsen</td>
                                                </tr>
                                                <tr>
                                                    <td class="norm" valign="top">Salgsassistent<br>Sport og fritidstøj</td>
                                                    <td class="norm" valign="top">Salgsassistent<br>Ski og vinterbeklæding</td>
                                                    <td class="norm" valign="top">Sport Direct</td>
                                                    <td class="norm" valign="top">Salgsassistent<br>Bade- og fitnesstøj</td>
                                                </tr>
                                            </table>
Avatar billede lsskaarup Nybegynder
17. august 2004 - 19:19 #18
Altså alle billederne i én række, alle navnene i den næste række og så fremdeles.
Avatar billede lsskaarup Nybegynder
17. august 2004 - 20:39 #19
Ahhaaaa, pludselig gik der et lys op for mig ;-)

Koden skulle se sådan ud:

<? $person = mysql_query("SELECT * FROM RS_Medarbejder");
                                            print "<table width='510' border='0' cellpadding='0' cellspacing='0'><tr>";
                                            $i=0;
                                            while(($personen = mysql_fetch_array($person)) && $i < 8) {
                                                if ($personen[afdeling]==""){
                                                    $personen[afdeling]="&nbsp;";
                                                }
                                                if ($personen[stilling]==""){
                                                    $personen[stilling]="&nbsp;";
                                                }
                                                if ($personen[navn]==""){
                                                    $personen[navn]="&nbsp;";
                                                }
                                                if ($personen[sti]==""){
                                                    $personen[sti]="uploads/fotograf.jpg";
                                                }
                                                print "<td><table><tr><td><img src='$personen[sti]' width='123' height='168'></td></tr><tr><td>$personen[navn]</td></tr><tr><td>$personen[stilling]</td></tr><tr><td>$personen[afdeling]</td></tr></table></td>";
                                                  if( ($i+1)%4 == 0 ) {
                                                    if($i == 7 ) {// sidste række, der kommer ikke flere
                                                        print "</tr>";
                                                      } else {// afslut nuværende række, forsæt med næste
                                                        print "</tr><tr>";
                                                    }
                                                  }
                                                $i++;
                                            }
                           
                                            if( $i != 8 ) {
                                                  print "</td></tr>";  // hvis der er 3 billeder - skal vi huske at afslutte med </tr> - da vi ikke har gjort det endnu.
                                            }
                                            print "</table>";?>

If-sætningerne i starten er for at for "vist" den tomme celle, hvis ikke dette gøres, vil de personer som ikke har det hele udfyldt kommer til at ligge skævt i forhold til de andre.

Så er det paging...
Avatar billede dennismp Nybegynder
17. august 2004 - 21:37 #20
heh, det var jo nemt. Jeg tager en løbetur, imens du fixer scriptet :)

Nå, paging er forholdsvist nemt.

MySQL har en feature, som giver dig muilghed for at begrænse antallet af rækker. Fx. LIMIT 8. Så kommer der max 8 rækker. Men, man kan også angive et offset, så hvis vi vil have rækkerne 2-10, kan vi skrive:

LIMIT 2,8

2=hvor vi starter
8=antallet af rækker.

$person = mysql_query("SELECT * FROM RS_Medarbejder");
vil hente alle rækker

$person = mysql_query("SELECT * FROM RS_Medarbejder LIMIT 8");
vil vise de første 8. (rækkerne 1-8 - altså side 1)

$person = mysql_query("SELECT * FROM RS_Medarbejder LIMIT 0,8");
er det samme som før. Side to kan så skrives som

$person = mysql_query("SELECT * FROM RS_Medarbejder LIMIT 8,8");
Vi springer de første 8 over - og viser de næste 8... Side 3 er så LIMIT 16,8 .. osv. osv..

Lad os sige, vi har en variable der hedder side (Dette skal gøres øverst på siden)

if( isset($_GET['side']) && ctype_digit($_GET['side']) )  // hvis 'side' er angivet og består kun af tal
  $side = $_GET['side'];
else
  $side = 1;

Hvis starter med side 1, hvis intet sidenummer er angivet eller hvis det er et ugyldigt sidenummer.

Side 1 skal så vise de første 8 (1-8) rækker, næste side skal så vise de næste 8 (9-16) rækker osv.... Dette kan vi gøre ved at:

$start=($side-1)*8; 
fx:
  side1 giver: $start=(1-1)*8 = 0.. Passer!
  side2 giver: $start=(2-1)*8 = 8.. Passer!
  side3 giver: $start=(3-1)*8 = 18.. Passer!

SQL'en skal så bare rettes;
$person = mysql_query("SELECT * FROM RS_Medarbejder LIMIT $start,8");

Hvis du kalder
http://www.larsskaarup.dk/randerssport/personale-test.php
bør den vise side 1
http://www.larsskaarup.dk/randerssport/personale-test.php?side=test
bør stadig vise side 1
http://www.larsskaarup.dk/randerssport/personale-test.php?side=2
viser så side to..

-----------------------------------------------

Lad mig samle koden her:

if( isset($_GET['side']) && ctype_digit($_GET['side']) )
  $side = $_GET['side'];
else
  $side = 1;

$start=($side-1)*8; 

$person = mysql_query("SELECT * FROM RS_Medarbejder LIMIT $start,8");

... resten her..

-------------------

Strengt taget, behøver du ikke i din while at have ($i < 8) - da der aldrig vil være mere end 8 rækker (da vi bruger LIMIT i sql).
Avatar billede dennismp Nybegynder
17. august 2004 - 21:38 #21
Hvis dette virker, så mangler du sådan set bare at lave links til forrige/næste side. Men lad mig lige høre om jeg har tabt dig først :)
Avatar billede lsskaarup Nybegynder
17. august 2004 - 22:54 #22
Jeg har faktisk imellem tiden også lavet sideskiftene selv, dog langt fra så smart som dit. Min er heller ikke 100% korrekt med virker lige i dette tilfælde, derfor tjekker jeg lige din løsning ud.
Avatar billede dennismp Nybegynder
17. august 2004 - 23:01 #23
Ok. Jeg sidder her ihvertfald et par timer endnu, så du kan jo bare kaste lidt kode i min retning, hvis det driller (for meget).
Avatar billede lsskaarup Nybegynder
17. august 2004 - 23:18 #24
Wow, det her sgu værd at give ekstra point for.

Grundet din kode, kunne jeg skære ikke mindre end ca. 140 liniers kode fra.

Og det virker helt nu, ja, fra regnet ctype_digit, der får jeg en fejlmeddelelse om at funktionen ikke er defineret.
Avatar billede dennismp Nybegynder
17. august 2004 - 23:22 #25
http://dk.php.net/ctype_digit fortæller at den findes i php v4.0.4 og frem. Så den burde du have.. (med mindre du bruger en gaaammel php).

alternativ kan du prøv is_numeric() istedet for ctype_digit().
Avatar billede lsskaarup Nybegynder
17. august 2004 - 23:24 #26
Jeg har lige tjekket min udbyders php, og versionen skulle være 4.1.2, så det lyder da lidt mærkeligt. Prøver lige med is_numeric(), men mener godt den kan bruges.
Avatar billede lsskaarup Nybegynder
17. august 2004 - 23:39 #27
Der står også :

"Beginning with PHP 4.2.0 these functions are enabled by default. For older versions you have to configure and compile PHP with --enable-ctype. You can disable ctype support with --disable-ctype."

Så jeg skal enable den, men hvordan gør man lige det, for jeg synes ikke "--enable-ctype" virker?
Avatar billede dennismp Nybegynder
17. august 2004 - 23:51 #28
Så skal du igang med at rekompilerer php og installerer den nye.. Hvis du bruger et webhotel kan du ikke selv gøre det. Du kan prøve at forhøre dig, men ellers brug bare is_numeric()

Forskellen på de to er minimal. is_numeric() accepterer også kommatal o.lign.

Du kan evt bruge preg_match til at få samme effekt som is_digit.

Uden at have testet følgende kode, så tror jeg det virker :). Den tester først om funktionen "ctype_digit" findes, og hvis den ikke gør, så laver den een selv som gør det samme (hvis du en dag får den "rigtige" ctype_digit() så vil den ikke blive defineret - så du undgår problemer, da man ikke kan have to funktioner defineret med samme navn). Så nu kan du bare sætte dette ind, et sted.. Og så bruge ctype_digit som normalt.

if(! function_exists("ctype_digit") ) {

function ctype_digit($str) {
  return preg_match('/^\d*$/', $str) != 0;
}

}
Avatar billede lsskaarup Nybegynder
17. august 2004 - 23:56 #29
Okay, så tror jeg nu jeg holder mig til is_numeric().

Tak for hjælpen, ellers, smider du et svar.
Avatar billede dennismp Nybegynder
18. august 2004 - 00:03 #30
Joda. Ellers post igen, hvis det driller.
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