Avatar billede chrisjon Nybegynder
23. november 2006 - 23:27 Der er 12 kommentarer og
1 løsning

Dele resultat fra Mysql query op i flere celler

Hej, jeg sidder her og fumler lidt med noget php, jeg har i min database  feks 15 navne på folk og jeg vil gerne udskrive dem i en tabel, hvor der er 4 navne i hver <td></td> Her er et eksempel på hvordan det kunne se ud i en tabel  http://www.chrisjon.dk/resultat.gif

Og jeg vil gerne have at der er 4 navne i hver td uahængig af hvor mange navne jeg tilføjer til min database

Indtil videre har jeg denne kode:

<table cellspacing=0 cellpadding=0>
<tr>
<?php
$data = mysql_query("SELECT fornavn FROM navne ORDER BY fornavn") or die;

while ($row = mysql_fetch_array($data))

{
    $fornavn = "$row[fornavn]";
    print ("<p>".$fornavn."</p>");
   
}
?>
</tr>
</table>




Håber at i kan yde mig lidt hurtig hjælp her

På Forhånd tak.
Avatar billede thesurfer Nybegynder
23. november 2006 - 23:36 #1
Det er sjovt at du skriver "<td></td>" i dit spørgsmål, men ikke i din kode.. :-)

Løsningen er simpel:

- Lav en tabel der matcher opsætningen (billedet)
- Læg mærke til hvor navnet bliver placeret, i forhold til tr og td
- Brug en tæller "i" til at finde ud af, hvor man navne du har udskrevet i td'en
- Brug "if (i mod 4 == 0) " til at finde ud af, om der er udskrevet 4
- Hvis der er udskrevet 4 navne i td'en, afslut den
osv..

Afhængigt af hvor du starter med "i", kan det være at du skal erstatte 4 med f.eks. 3 eller 5..
Avatar billede chrisjon Nybegynder
23. november 2006 - 23:42 #2
okay koden skulle nok se sådan her ud så,

<table cellspacing=0 cellpadding=0>
<tr>
<?php
$data = mysql_query("SELECT fornavn FROM navne ORDER BY fornavn") or die;

while ($row = mysql_fetch_array($data))

{
    $fornavn = "$row[fornavn]";
    print ("<td>".$fornavn."</td>");
 
}
?>
</tr>
</table>

Og $fornavn skal så skrives 4 gange i hver <td></td>


Men altså jeg er ikke helt med i hvad du er ude på der,
Avatar billede thesurfer Nybegynder
23. november 2006 - 23:48 #3
Jeg programmerer normalt ikke i PHP, men jeg slår lige nogle ting op.. så burde jeg kunne lave et fungerende eksempel..
Avatar billede thesurfer Nybegynder
24. november 2006 - 00:06 #4
Hmmm... Det giver lidt af et problem, at den skal skrive lodret først, og derefter vandret..

Dvs,

A E I M
B F J N
C G K O
B H L P

i stedet for

A B C D
E F G H
I J K L
M N O P

Det sidste er det nemmeste.. men man kunne jo smide navnene over i en array.. det er nok nemmere at arbejde med, så jeg prøver..
Avatar billede thesurfer Nybegynder
24. november 2006 - 00:54 #5
Eksempel:

<?php

// Dette er simulering af navnene i databasen:

/* disse linie skal kommenteres, når du vil arbejde med databasen*/
$navn[0] = "Allan";
$navn[1] = "Birger";
$navn[2] = "Bo";
$navn[3] = "Børge";

$navn[4] = "Cirkeline";
$navn[5] = "Daniel";
$navn[6] = "Danny";
$navn[7] = "Erik";

$navn[8] = "Hanne";
$navn[9] = "Helle";
$navn[10] = "Irene";
$navn[11] = "Jens";

$navn[12] = "Jørgen";
$navn[13] = "Lars";
$navn[14] = "Mette";
/* slut på simulation */


/* din database kode, som skal aktivere ved at slutte DENNE linie af med "/": *


$data = mysql_query("SELECT fornavn FROM navne ORDER BY fornavn") or die;

while ($row = mysql_fetch_array($data))

{
    // denne del er jeg lidt usikker på:
    $navn[count($navn)] = "$row[fornavn]";
}

/**/

?>



<table cellspacing=0 cellpadding=0 width=100% border=1> <!-- jeg har tilføjet width og border, som du kan fjerne -->


<?php
for($i = 0; $i < count($navn) / 4; $i++) // dette er WHILE-løkken
{
    $et = "&nbsp;" . $navn[$i];
    $et = ($et != "&nbsp;")?str_replace("&nbsp;","", $et):$et;

    $to = "&nbsp;" . $navn[$i+4];
    $to = ($to != "&nbsp;")?str_replace("&nbsp;","", $to):$to;

    $tre = "&nbsp;" . $navn[$i+4+4];
    $tre = ($tre != "&nbsp;")?str_replace("&nbsp;","", $tre):$tre;

    $fire = "&nbsp;" . $navn[$i+4+4+4];
    $fire = ($fire != "&nbsp;")?str_replace("&nbsp;","", $fire):$fire;

    echo "<tr>";
    echo "<td>" . $et ."</td>";
    echo "<td>" . $to ."</td>";
    echo "<td>" . $tre ."</td>";
    echo "<td>" . $fire ."</td>";
    echo "</tr>";
}

?>


</tr>
</table>
Avatar billede thesurfer Nybegynder
24. november 2006 - 02:17 #6
Hvordan skal det se ud, hvis der kun er 3 navne ("under 4")?:

Layout 1: Allan Birger Bo

Layout 2:
Allan
Birger
Bo
Avatar billede mcardle Nybegynder
24. november 2006 - 03:16 #7
Så løkkesdes det endelig.

<table cellspacing="5" cellpadding="5">
<tr>
<?php
connect();

echo '<td style="border: 1px #000000 solid; width: 100px;">';

$i=0;
$data = mysql_query("SELECT * FROM navne ORDER BY fornavn ASC") OR die(mysql_error());
while($a = mysql_fetch_array($data)){
    if(($i==4)||($i==8)||($i==12)){
        echo '</td><td style="border: 1px #000000 solid; width: 100px;">';
        echo $a["fornavn"].'<br />';
    }
    else{
        echo $a["fornavn"].'<br />';
    }
    $i++;
}
echo '</td>';

close();
?>
</tr>
</table>
Avatar billede mcardle Nybegynder
24. november 2006 - 03:17 #8
Alt efter hvor mange navne du har skal du skrive dem i din if. Den er ikke holdbar mht. til det, men det virker.
Avatar billede mcardle Nybegynder
24. november 2006 - 07:55 #9
Så fik jeg den også til at køre ligegyldigt hvor mange navne du har i din db.

Her er det færdige script.

<table cellspacing="5" cellpadding="5">
<tr>
<?php

$i=0;
$data = mysql_query("SELECT * FROM navne ORDER BY fornavn ASC") OR die(mysql_error());

echo '<td style="border: 1px #000000 solid; width: 100px;">';
while($a = mysql_fetch_array($data)){
        if($i==0){
            $i=-1;
            $y = ($i%4) ? false : true ;
            $i=0;
        }
        else{
        $y = ($i%4) ? false : true ;
        }

        if($y == 1){
      echo '</td><td style="border: 1px #000000 solid; width: 100px;">'.$a["fornavn"].'<br />';
    }
    else{
      echo $a["fornavn"].'<br />';
    }
    $i++;
}
echo '</td>';

?>
</tr>
</table>

Du må lige sige til, hvis det ikke skulle virke hos dig ;o)
Avatar billede chrisjon Nybegynder
24. november 2006 - 22:16 #10
thesurfer dit duttede ikke så godt igen, og det som mcardle lavede virker lige precist som jeg vil have det skal,

så mcardle jeg vil gerne give dig 200 point
og thesurfer, jeg vil også gerne give dig 200 point fordi du også har brugt god tid på at hjælpe mig her, så hvis i begge kan lave et svar, kan jeg vel give jer begge 2 point eller hvordan.
Avatar billede mcardle Nybegynder
25. november 2006 - 03:13 #11
Her er mit svar ;o)
Avatar billede thesurfer Nybegynder
27. november 2006 - 07:56 #12
Ingen points til mig, tak.

Og max antal points de må udloves/gives pr "problem", er 200 points.. og man må ikke dele pointsudelingen over flere spørgsmål..
Avatar billede chrisjon Nybegynder
28. november 2006 - 12:32 #13
Hmn ja okay, 200 point til dig mcardle, og tak for hjælpen, og thesurfer tak for tiden
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