Avatar billede Morten Nybegynder
12. november 2003 - 10:25 Der er 58 kommentarer og
1 løsning

PHP - MySql funktion

Hej

Jeg har en opgave som jeg havde tænkt at løse med PHP og MySql (som jeg langt om længe har fået sat mig lidt ind i)

Jeg skal lave nogle stamtavler og havde tænkt mig at gøre som følgende:

Tabel: HUND
Felter: ID (tekst som jeg selv indtaster)
        Navn
        Far ID
        Mor ID

Min PHP skal så i en tabel indsætte far/mor farfar/farmor morfar/mormor osv. (4 generationer) udfra et id som jeg angiver.

Tabellen består af 4 kolonner og 16 rækker

hvor
kolonne 1 har 2 felter (far og mor)
kolonne 2 har 4 felter (farfar, farmor, morfar, mormor)
kolonne 3 har 8 felter etc.
kolonne 4 har 16 felter etc.

lavet med rowspan...

Kan jeg med PHP gøre dette?

Det er jo nok noget med at for hver hund der bliver indsat skal jeg gemme den værdi i en variabel (et eksempel på den kunne være godt) - men spørgsmålet er om jeg kan fedte det ind i tabellen
Avatar billede erikjacobsen Ekspert
12. november 2003 - 10:52 #1
Behøver du mere end far og mor? Farfar kan du jo fx slå op via dens fars far.
Avatar billede Morten Nybegynder
12. november 2003 - 11:05 #2
Okay måske har jeg ikke forklaret mig ordentlig - jeg havde tænkt mig at alle skulle slås op - på nær selvfølelig hunden for hvem stamtavlen gælder.

I min database har jeg jo på hver hund reg. far og mor ...
Avatar billede detox Nybegynder
13. november 2003 - 02:26 #3
Her er et eksempel på hvordan du kunne gøre:

<?
/*******************************************
CREATE TABLE `hunde` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `navn` varchar(20) NOT NULL default '',
  `far` varchar(20) NOT NULL default '',
  `mor` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=8 ;

#
# Data dump for tabellen `hunde`
#

INSERT INTO `hunde` VALUES (1, 'fido', 'vaks', 'tulle');
INSERT INTO `hunde` VALUES (2, 'vaks', 'fax', 'lula');
INSERT INTO `hunde` VALUES (3, 'tulle', 'vagabonden', 'lady');
INSERT INTO `hunde` VALUES (4, 'fax', 'banditten', 'elysa');
INSERT INTO `hunde` VALUES (5, 'vagabonden', 'pluto', 'smukke');
INSERT INTO `hunde` VALUES (6, 'lady', 'scotty', 'blue');
INSERT INTO `hunde` VALUES (7, 'lula', 'bamse', 'mamse');
**************************************************************/

require 'db.php';// Forbindelse til database
$antal = 3;// Antal generationer
$hund[0]['start'] = 'fido';// valgt hund

$out = "<table border='1'><tr><td colspan='".pow(2, $antal)."' align='center'>";
$out .= $hund[0]['start']."</td></tr>";
for ($i=1;$i<=$antal;$i++) {
    $hund = hent($hund);
    $out .= "<tr>";
    foreach ($hund as $navn) {
        $out .= "<td colspan='".pow(2, $antal-$i)."' align='center'>" . $navn['far'] . "</td>
              <td colspan='".pow(2, $antal-$i)."' align='center'>" . $navn['mor'] . "</td>";
    }
    $out .= "</tr>";
}
$out .= "</table>";
echo $out;

function hent($hund) {
    for ($i=0;$i<count($hund);$i++) {
        foreach ($hund[$i] as $navn) {
            $res = mysql_query("select far, mor from hunde where navn='$navn'");
            $row[] = mysql_fetch_assoc($res);
        }
    }
    return $row;
}
?>
Avatar billede detox Nybegynder
13. november 2003 - 02:31 #4
Den viser så kun hunden og den forældre og bedsteforældre, men det kan du selv bestemme. Så ændrer du bare $antal til 4, hvis du vil have 4 generationer.
Og det var så et svar :o)
Avatar billede detox Nybegynder
13. november 2003 - 03:01 #5
Jeg har ændret tabelstrukturen ift. dit eksempel og det har selvfølgelig den ulempe at to hunde ikke må have samme navn. Det var mest af bekvemmelighedsgrunde, så jeg slap for at taste de sidste 8 hunde ind i mit lille eksempel. Men det kan nemt laves om, så det passer med din struktur.
Avatar billede detox Nybegynder
13. november 2003 - 03:04 #6
Jeg har ændret tabelstrukturen ift. dit eksempel og det har selvfølgelig den ulempe at to hunde ikke må have samme navn. Det var mest af bekvemmelighedsgrunde, så jeg slap for at taste de sidste 8 hunde ind i mit lille eksempel. Men det kan nemt laves om, så det passer med din struktur.
Avatar billede Morten Nybegynder
13. november 2003 - 08:48 #7
Det ser spændende ud detox - men jeg når desværre nok ikke at kigge på det de første par dage - kunne du måske lave små korte forklaringer til koden, da jeg stadig er lidt våd bag ørerne mht. PHP vil jeg gerne vide hvad jeg laver...?
Avatar billede detox Nybegynder
13. november 2003 - 14:28 #8
Jeg har rettet det til så det virker med dit forslag til tabelstruktur (navn, far(id), mor(id)). Det viste sig at være en smule mere vanskelligt end jeg havde troet, men her er det med kommentarer.


<?
/*******************************************
DROP TABLE IF EXISTS `hunde`;
CREATE TABLE `hunde` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `navn` varchar(20) NOT NULL default '',
  `far` smallint(5) unsigned NOT NULL default '0',
  `mor` smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=16 ;

#
# Data dump for tabellen `hunde`
#

INSERT INTO `hunde` VALUES (1, 'fido', 2, 3);
INSERT INTO `hunde` VALUES (2, 'vaks', 4, 7);
INSERT INTO `hunde` VALUES (3, 'tulle', 5, 6);
INSERT INTO `hunde` VALUES (4, 'fax', 8, 9);
INSERT INTO `hunde` VALUES (5, 'vagabonden', 10, 11);
INSERT INTO `hunde` VALUES (6, 'lady', 12, 13);
INSERT INTO `hunde` VALUES (7, 'lula', 14, 15);
INSERT INTO `hunde` VALUES (8, 'banditten', 0, 0);
INSERT INTO `hunde` VALUES (9, 'elisa', 0, 0);
INSERT INTO `hunde` VALUES (10, 'pluto', 0, 0);
INSERT INTO `hunde` VALUES (11, 'smukke', 0, 0);
INSERT INTO `hunde` VALUES (12, 'scotty', 0, 0);
INSERT INTO `hunde` VALUES (13, 'blue', 0, 0);
INSERT INTO `hunde` VALUES (14, 'bamse', 0, 0);
INSERT INTO `hunde` VALUES (15, 'mamse', 0, 0);
**************************************************************/

require 'db.php';// Forbindelse til database
$antal = 3;// Antal generationer
$hund[0]['id'] = 1;// valgt hunds ID
// Alle '$out' sætningerne indsamler det der skal udskrives i en string
$out = "<table border='1'><tr><td colspan='".pow(2, $antal)."' align='center'>";// pow() udregner colspan udfra 2^antal generationer
// Henter navn på hunden med det valgte ID
$navn = mysql_result(mysql_query("select navn from hunde where id=".$hund[0]['id']),0);
$out .= $navn."</td></tr>";
// Gennemløber det valgte antal generationer
for ($i=1;$i<=$antal;$i++) {
    $hund = hent($hund);// Kalder funktionen hent()
    $out .= "<tr>";
    // $hund er et multidimensionelt array af formen $hund[0]['far'], så her gennemløbes det første af de to array's
    foreach ($hund as $id) {
        $navn = navn($id);// Kalder funktionen navn()
        $out .= "<td colspan='".pow(2, $antal-$i)."' align='center'>" . $navn[0] . "</td>
              <td colspan='".pow(2, $antal-$i)."' align='center'>" . $navn[1] . "</td>";
    }
    $out .= "</tr>";
}
$out .= "</table>";
echo $out;

function hent($hund) {// Henter id's (far & mor) på hundene i arrayet
    for ($i=0;$i<count($hund);$i++) {
        foreach ($hund[$i] as $id) {
            $res = mysql_query("select far, mor from hunde where id=$id");
            $row[] = mysql_fetch_assoc($res);
        }
    }
    return $row;
}//function hent slut

function navn($id) {// Henter navne på far og mor
    $res = mysql_query("select navn from hunde where id=".$id['far']." OR id=".$id['mor']) or die(mysql_error());
    while ($row = mysql_fetch_row($res)) {
        $navn[] = $row[0];
    }
    return $navn;
}//function navn slut
?>
Avatar billede detox Nybegynder
13. november 2003 - 14:31 #9
Jeg håber du har en editor med syntax farvning, ellers se det her:
http://www.buksevand.dk/test/hunde.phps
Avatar billede Morten Nybegynder
13. november 2003 - 15:17 #10
Hej detox

Du er sq da en knag!! :O)

Jeg glæder mig til at teste..

Nu har jeg rodet en del med VBA og der har men jo mulighed for debugge og dermed se værdien efterhånden som koden gennemløbes - kan man noget tilsvarende med PHP?

Lige umiddelbart hva har jeg så når din kode er færdig - et array jeg kan smide i min tabel elller???

Og endnu engang - jeg er imponeret !!!!
Avatar billede detox Nybegynder
13. november 2003 - 15:30 #11
Mht til debugning, så viser php jo flere forskellige fejltyper og på hvilke linier de forekommer. Derudover kan det være praktisk at udskrive nogle værdier undervejs, for at se om de indeholder det man forventer. Fx, hvis man har en query med variabler, kan man midlertidigt erstatte mysql_query() med print().
I det eksempel jeg har lavet, lægges den færdige html-kode i en variabel ($out), der udskrives sidst i scriptet. Du kan selvfølgelig tilføje dine egne styles i de forskellige tags (fx <table> <tr> <td>), men resultatet er en færdig tabel.
Avatar billede Morten Nybegynder
13. november 2003 - 15:37 #12
Nåååå ja - kunne ikke lige se at der var noget tabel halløj i koden

Det er vildt hvis det virker - og jeg tror sq også jeg kan lære noget af det her... du får sq pointsne nu som tak for dit store arbejde....!!!

Og håber jeg kan vende tilbage hvis jeg får problemer......
Avatar billede detox Nybegynder
13. november 2003 - 15:42 #13
Du skal bare spørge, hvis der er noget der driller c",)
Avatar billede Morten Nybegynder
14. november 2003 - 01:22 #14
Det virker for genialt - men.. (altid et men ;O)

det vender den forkerte vej - det skal ses fra højre mod venstre og ikke oppe fra og ned...

Jeg prøvede lige at ændre colspan til rowspan men det lykkedes ikke helt - jeg vil kigge videre men hvis du kan give de vise sten såååååå

;O)
Avatar billede Morten Nybegynder
14. november 2003 - 01:31 #15
Her kan du se en færdig tabel - er usikker på om det kan lade sig gøre...?
<table class="pedigree">
    <tr>
        <td class="pedigree"  rowspan="8">1</td>
        <td class="pedigree"  rowspan="4"> 2    </td>
        <td class="pedigree"  rowspan="2"> 3    </td>
        <td class="pedigree"                      > 4</td>
    </tr>
    <tr>
        <td class="pedigree" > 5    </td>
    </tr>
    <tr>
        <td class="pedigree"  rowspan="2"> 6</td>
        <td class="pedigree" >7</td>
    </tr>
    <tr>
        <td class="pedigree" >8</td>
    </tr>
    <tr>
        <td class="pedigree"  rowspan="4">9</td>
        <td class="pedigree"  rowspan="2">10</td>
        <td class="pedigree" ></td>
    </tr>
    <tr>
        <td class="pedigree" >11</td>
    </tr>
    <tr>
        <td class="pedigree"  rowspan="2">12</td>
        <td class="pedigree" >13</td>
    </tr>
    <tr>
        <td class="pedigree" >14</td>
    </tr>
    <tr>
        <td class="pedigree"  rowspan="8">15</td>
        <td class="pedigree"  rowspan="4">16</td>
        <td class="pedigree"  rowspan="2">17</td>
        <td class="pedigree" >18</td>
    </tr>
    <tr>
        <td class="pedigree" ></td>
    </tr>
    <tr>
        <td class="pedigree"  rowspan="2">19</td>
        <td class="pedigree" >20</td>
    </tr>
    <tr>
        <td class="pedigree" >21</td>
    </tr>
    <tr>
        <td class="pedigree"  rowspan="4">22</td>
        <td class="pedigree"  rowspan="2">23</td>
        <td class="pedigree" >24</td>
    </tr>
    <tr>
        <td class="pedigree">25</td>
    </tr>
    <tr>
        <td class="pedigree"  rowspan="2">26</td>
        <td class="pedigree" >27</td>
    </tr>
    <tr>
        <td class="pedigree" >28</td>
    </tr>
</table>
Avatar billede detox Nybegynder
14. november 2003 - 01:43 #16
Der må da mangle 4 i den sidste kolonne, skulle der ikke være 16?
Avatar billede detox Nybegynder
14. november 2003 - 01:48 #17
Jeg overvejer om man, om ikke andet kunne smide de 30 navne i et arrray, som du så kunne indsætte i din tabel.
Avatar billede Morten Nybegynder
14. november 2003 - 01:48 #18
Nåå men det er fordi i mit vises ikke hunden som det drejer sig om.....

Men jeg vil gerne have den med - skal du have den med 16 - det får du lige et øjeblik...
Avatar billede Morten Nybegynder
14. november 2003 - 01:48 #19
tænkte jeg også - give dem id al'a "DOG1"

Og i tabelfelt et og andet =$DOG1 (eller hva ved jeg???)
Avatar billede detox Nybegynder
14. november 2003 - 01:49 #20
Ja, logikken må da være 2,4,8,16
Avatar billede detox Nybegynder
14. november 2003 - 01:51 #21
Hvis du kan lave en færdig tabel, som du vil have den, skal jeg prøve at smide dem i et array der passer.
Avatar billede Morten Nybegynder
14. november 2003 - 01:51 #22
<table border="0" summary="" class="pedigree">
    <tr>
        <td rowspan="16" class="pedigree">1</td>
        <td rowspan="8" class="pedigree">2</td>
        <td rowspan="4" class="pedigree">3</td>
        <td rowspan="2" class="pedigree">4</td>
        <td class="pedigree">5</td>
    </tr>
    <tr>
        <td class="pedigree">6</td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">7</td>
        <td class="pedigree">8</td>
    </tr>
    <tr>
        <td class="pedigree">9</td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree">10</td>
        <td rowspan="2" class="pedigree">11</td>
        <td class="pedigree"></td>
    </tr>
    <tr>
        <td class="pedigree">12</td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">13</td>
        <td class="pedigree">14</td>
    </tr>
    <tr>
        <td class="pedigree">15</td>
    </tr>
    <tr>
        <td rowspan="8" class="pedigree">16</td>
        <td rowspan="4" class="pedigree">17</td>
        <td rowspan="2" class="pedigree">18</td>
        <td class="pedigree">19</td>
    </tr>
    <tr>
        <td class="pedigree"></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">20</td>
        <td class="pedigree">21</td>
    </tr>
    <tr>
        <td class="pedigree">22</td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree">23</td>
        <td rowspan="2" class="pedigree">24</td>
        <td class="pedigree">25</td>
    </tr>
    <tr>
        <td class="pedigree">26</td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">27</td>
        <td class="pedigree">28</td>
    </tr>
    <tr>
        <td class="pedigree">29</td>
    </tr>
</table>
Avatar billede Morten Nybegynder
14. november 2003 - 01:52 #23
numrene er cellerne er ikke til noget.....
Avatar billede detox Nybegynder
14. november 2003 - 02:00 #24
Men der er noget galt. Du har: 1,2,4,8,14 i dine kolonner.
Det burde være: 1,2,4,8,16.
Avatar billede Morten Nybegynder
14. november 2003 - 02:06 #25
Øhhh - ??? jeg havde bare for at se for noget tid siden indtastet numre - der er ingen logik i mine numre - men det laver jeg lige...
Avatar billede detox Nybegynder
14. november 2003 - 02:08 #26
Jamen numrene er fine. Jeg mener bare at hvis hver hund har to forældre, så skal de 8 hunde i tredie kolonne have 16 forældre.
Avatar billede detox Nybegynder
14. november 2003 - 02:09 #27
Lad bare numrene stå, så jeg laver jeg et array med navnene i den rette rækkefølge.
Avatar billede detox Nybegynder
14. november 2003 - 02:11 #28
Så behøver du bare bytte 1,2,3,... ud med $dog[1],$dog[2],$dog[3],...
Avatar billede Morten Nybegynder
14. november 2003 - 02:13 #29
OKAY - MEN HER ER DEN LIGE.. manglede lidt numre

<table border="0" summary="" class="pedigree">
    <tr>
        <td rowspan="16" class="pedigree">1</td>
        <td rowspan="8" class="pedigree">2</td>
        <td rowspan="4" class="pedigree">4</td>
        <td rowspan="2" class="pedigree">8</td>
        <td class="pedigree">16</td>
    </tr>
    <tr>
        <td class="pedigree">17</td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">9</td>
        <td class="pedigree">18</td>
    </tr>
    <tr>
        <td class="pedigree">19</td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree">5</td>
        <td rowspan="2" class="pedigree">10</td>
        <td class="pedigree">20</td>
    </tr>
    <tr>
        <td class="pedigree">21</td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">11</td>
        <td class="pedigree">22</td>
    </tr>
    <tr>
        <td class="pedigree">23</td>
    </tr>
    <tr>
        <td rowspan="8" class="pedigree">3</td>
        <td rowspan="4" class="pedigree">6</td>
        <td rowspan="2" class="pedigree">12</td>
        <td class="pedigree">24</td>
    </tr>
    <tr>
        <td class="pedigree">25</td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">13</td>
        <td class="pedigree">26</td>
    </tr>
    <tr>
        <td class="pedigree">27</td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree">7</td>
        <td rowspan="2" class="pedigree">14</td>
        <td class="pedigree">28</td>
    </tr>
    <tr>
        <td class="pedigree">29</td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree">15</td>
        <td class="pedigree">30</td>
    </tr>
    <tr>
        <td class="pedigree">31</td>
    </tr>
</table>
Avatar billede Morten Nybegynder
14. november 2003 - 02:14 #30
Ja og rækkefølgene er lige meget - bare jeg kender den selvfølelig ;O)
Avatar billede Morten Nybegynder
14. november 2003 - 02:17 #31
Kan jeg selv nemt hente flere felter pr hund - jeg skal hente et tekstfelt mere samt en path til et billede som jeg så skal omsætte til et link...?

Men det ku' jeg skulle prøve selv før jeg søger hjælp - lærer nok lide mere så selvom dette har været meget lærerigt...
Avatar billede detox Nybegynder
14. november 2003 - 02:20 #32
<?

require 'db.php';// Forbindelse til database
$antal = 3;// Antal generationer
$hund[0]['id'] = 1;// valgt hunds ID

$dog = array();
$item = mysql_result(mysql_query("select navn from hunde where id=".$hund[0]['id']),0);
$dog[1] = $item;
for ($i=1;$i<=$antal;$i++) {
    $hund = hent($hund);// Kalder funktionen hent()
    foreach ($hund as $id) {
        $navne = navn($id);// Kalder funktionen navn()
        foreach ($navne as $item) {
            $dog[] = $item;
        }
    }
}
//
// Her kan du indsætte din tabel navnene ligger så i $dog[1],$dog[2],$dog[3],...
//

//FUNKTIONER
function hent($hund) {// Henter id's (far & mor) på hundene i arrayet
    for ($i=0;$i<count($hund);$i++) {
        foreach ($hund[$i] as $id) {
            $res = mysql_query("select far, mor from hunde where id=$id");
            $row[] = mysql_fetch_assoc($res);
        }
    }
    return $row;
}//function hent slut

function navn($id) {// Henter navne på far og mor
    $res = mysql_query("select navn from hunde where id=".$id['far']." OR id=".$id['mor']) or die(mysql_error());
    while ($row = mysql_fetch_row($res)) {
        $navn[] = $row[0];
    }
    return $navn;
}//function navn slut
?>
Avatar billede detox Nybegynder
14. november 2003 - 02:21 #33
$antal skal være 4
Avatar billede detox Nybegynder
14. november 2003 - 02:28 #34
Fx sådan her:

<?

require 'db.php';// Forbindelse til database
$antal = 3;// Antal generationer
$hund[0]['id'] = 1;// valgt hunds ID

$dog = array();
$item = mysql_result(mysql_query("select navn from hunde where id=".$hund[0]['id']),0);
$dog[1] = $item;
for ($i=1;$i<=$antal;$i++) {
    $hund = hent($hund);// Kalder funktionen hent()
    foreach ($hund as $id) {
        $navne = navn($id);// Kalder funktionen navn()
        foreach ($navne as $item) {
            $dog[] = $item;
        }
    }
}
?>
<table border="0" summary=" class="pedigree">
    <tr>
        <td rowspan="16" class="pedigree"><?=$dog[1]?></td>
        <td rowspan="8" class="pedigree"><?=$dog[2]?></td>
        <td rowspan="4" class="pedigree"><?=$dog[4]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[8]?></td>
        <td class="pedigree"><?=$dog[16]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[17]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[9]?></td>
        <td class="pedigree"><?=$dog[18]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[19]?></td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree"><?=$dog[5]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[10]?></td>
        <td class="pedigree"><?=$dog[20]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[21]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[11]?></td>
        <td class="pedigree"><?=$dog[22]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[23]?></td>
    </tr>
    <tr>
        <td rowspan="8" class="pedigree"><?=$dog[3]?></td>
        <td rowspan="4" class="pedigree"><?=$dog[6]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[12]?></td>
        <td class="pedigree"><?=$dog[24]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[25]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[13]?></td>
        <td class="pedigree"><?=$dog[26]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[27]?></td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree"><?=$dog[7]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[14]?></td>
        <td class="pedigree"><?=$dog[28]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[29]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[15]?></td>
        <td class="pedigree"><?=$dog[30]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[31]?></td>
    </tr>
</table>
<?
//FUNKTIONER
function hent($hund) {// Henter id's (far & mor) på hundene i arrayet
    for ($i=0;$i<count($hund);$i++) {
        foreach ($hund[$i] as $id) {
            $res = mysql_query("select far, mor from hunde where id=$id");
            $row[] = mysql_fetch_assoc($res);
        }
    }
    return $row;
}//function hent slut

function navn($id) {// Henter navne på far og mor
    $res = mysql_query("select navn from hunde where id=".$id['far']." OR id=".$id['mor']) or die(mysql_error());
    while ($row = mysql_fetch_row($res)) {
        $navn[] = $row[0];
    }
    return $navn;
}//function navn slut
?>
Avatar billede detox Nybegynder
14. november 2003 - 02:29 #35
Hov, $antal skal være 4 ;o)
Avatar billede Morten Nybegynder
14. november 2003 - 02:34 #36
Det er fedt!

Se her: http://www.american-bulldogs.dk/males_bandit.php

vælg stamtavle....

Kan jeg på nogen måde henvise til dig på de her stamtavler???
Avatar billede detox Nybegynder
14. november 2003 - 02:38 #37
Ja, det skal nok blive godt. Du skal lige fjerne: '// // Her kan du indsætte din tabel nameene ligger så i $dog[1],$dog[2],$dog[3],... //'

Og, ja der skulle ikke være det store besvær med at hente yderligere data, som fx tekst og sti til billede. Du kan tilføje de felter i funktionen navn. De skal så dog lægges i et multidimensionelt array i stil med den anden funktion.
Avatar billede Morten Nybegynder
14. november 2003 - 02:41 #38
jo jo - men det er jeg vist for træt til nu ;O)))))

Tusind tak for hjælpen - hvis jeg får brug for yderligere hjælp opretter jeg et nyt spørgsmål - og venligst sig til hvis jeg på nogen måde kan henvise til dig på disse stamtavler?
Avatar billede detox Nybegynder
14. november 2003 - 02:51 #39
Ok, velbekommen :o) Jeg har lavet et eksempel, hvor den henter navn, sti, og tekst og ligger i hver deres array, så skulle det vidst være til at gå til ;o)

<?

require 'db.php';// Forbindelse til database
$antal = 4;// Antal generationer
$hund[0]['id'] = 1;// valgt hunds ID

$dog = array();
$item = mysql_result(mysql_query("select navn from hunde where id=".$hund[0]['id']),0);
$dog[1] = $item;
for ($i=1;$i<=$antal;$i++) {
    $hund = hent($hund);// Kalder funktionen hent()
    foreach ($hund as $id) {
        $navne = navn($id);// Kalder funktionen navn()
        foreach ($navne['navn'] as $item) {
            $dog[] = $item;
        }
        foreach ($navne['sti'] as $item) {
            $sti[] = $item;
        }
        foreach ($navne['tekst'] as $item) {
            $tekst[] = $item;
        }
    }
}
?>
<table border="0" summary=" class="pedigree">
    <tr>
        <td rowspan="16" class="pedigree"><?=$dog[1]?></td>
        <td rowspan="8" class="pedigree"><?=$dog[2]?></td>
        <td rowspan="4" class="pedigree"><?=$dog[4]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[8]?></td>
        <td class="pedigree"><?=$dog[16]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[17]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[9]?></td>
        <td class="pedigree"><?=$dog[18]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[19]?></td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree"><?=$dog[5]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[10]?></td>
        <td class="pedigree"><?=$dog[20]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[21]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[11]?></td>
        <td class="pedigree"><?=$dog[22]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[23]?></td>
    </tr>
    <tr>
        <td rowspan="8" class="pedigree"><?=$dog[3]?></td>
        <td rowspan="4" class="pedigree"><?=$dog[6]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[12]?></td>
        <td class="pedigree"><?=$dog[24]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[25]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[13]?></td>
        <td class="pedigree"><?=$dog[26]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[27]?></td>
    </tr>
    <tr>
        <td rowspan="4" class="pedigree"><?=$dog[7]?></td>
        <td rowspan="2" class="pedigree"><?=$dog[14]?></td>
        <td class="pedigree"><?=$dog[28]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[29]?></td>
    </tr>
    <tr>
        <td rowspan="2" class="pedigree"><?=$dog[15]?></td>
        <td class="pedigree"><?=$dog[30]?></td>
    </tr>
    <tr>
        <td class="pedigree"><?=$dog[31]?></td>
    </tr>
</table>
<?
//FUNKTIONER
function hent($hund) {// Henter id's (far & mor) på hundene i arrayet
    for ($i=0;$i<count($hund);$i++) {
        foreach ($hund[$i] as $id) {
            $res = mysql_query("select far, mor from hunde where id=$id");
            $row[] = mysql_fetch_assoc($res);
        }
    }
    return $row;
}//function hent slut

function navn($id) {// Henter navne på far og mor
    $res = mysql_query("select navn, sti, tekst from hunde where id=".$id['far']." OR id=".$id['mor']) or die(mysql_error());
    while ($row = mysql_fetch_assoc($res)) {
        $data['navn'][] = $row['navn'];
        $data['sti'][] = $row['sti'];
        $data['tekst'][] = $row['tekst'];
    }
    return $data;
}//function navn slut
?>
Avatar billede Morten Nybegynder
14. november 2003 - 10:39 #40
$dog = array();
        $item = mysql_result(mysql_query("select name from hunde where id=".$hund[0]['id']),0);
        $dog[1] = $item;
        for ($i=1;$i<=$antal;$i++) {
            $hund = hent($hund);// Kalder funktionen hent()
            foreach ($hund as $id) {
                $name = name($id);// Kalder funktionen name()
                foreach ($name['name'] as $item) {
                    $dog[] = $item;
                }
                foreach ($name['img_path'] as $item) {
                    $img_path[] = $item;
                }
                foreach ($name['hipp_score'] as $item) {
                    $hipp_score[] = $item;
                }
            }
        }
        ?>
        <table border="0" summary=" class="pedigree">
            <tr>
                <td rowspan="16" class="pedigree"><?=$dog[1]?><br><?=$hipp_score[1]?></td>
                <td rowspan="8" class="pedigree"><?=$dog[2]?><br><?=$hipp_score[2]?></td>
                <td rowspan="4" class="pedigree"><?=$dog[4]?><br><?=$hipp_score[4]?></td>
                <td rowspan="2" class="pedigree"><?=$dog[8]?><br><?=$hipp_score[8]?></td>
                <td class="pedigree"><?=$dog[16]?><br><?=$hipp_score[16]?></td>.........

.......
    function name($id) {// Henter name på sire og dam
            $res = mysql_query("select name, img_path, hipp_score from hunde where id=".$id['sire']." OR id=".$id['dam']) or die(mysql_error());
            while ($row = mysql_fetch_assoc($res)) {
                $data['name'][] = $row['name'];
                $data['img_path'][] = $row['img_path'];
                $data['hipp_score'][] = $row['hipp_score'];
            }
            return $data;
Burde dette ikke virke???

Den viser bare ikke hipp_score???

Men jeg får heller ingen fejl
Avatar billede detox Nybegynder
14. november 2003 - 11:39 #41
Jo, det ser rigtigt ud. Men der mangler en rettelse i starten af scriptet, for at få den første med:

$dog = array();
        $res = mysql_query("select name, img_path, hipp_score  from hunde where id=".$hund[0]['id']);
        $row = mysql_fetch_assoc($res);
        $dog[1] = $row['navn'];
        $img_path[1] = $row['img_path'];
        $hipp_score[1] = $row['hipp_score'];
Avatar billede Morten Nybegynder
14. november 2003 - 11:51 #42
problemet var, at nogle felter i hipp_score var tomme - det kunne den åbenbart ikke lide - nu har jeg indsat en - i de tomme og så virker det - kan man komme uden om det?
Avatar billede Morten Nybegynder
14. november 2003 - 11:54 #43
Øhh det forstod jeg ikke helt - koden ser ud som her og virker nu:

        $antal = 4;// Antal generationer
        $hund[0]['id'] =$_GET['id'];// valgt hunds ID

        $dog = array();
        $item = mysql_result(mysql_query("select name from hunde where id=".$hund[0]['id']),0);
        $dog[1] = $item;
        for ($i=1;$i<=$antal;$i++) {
            $hund = hent($hund);// Kalder funktionen hent()
            foreach ($hund as $id) {
                $navne = name($id);// Kalder funktionen navn()
                foreach ($navne['name'] as $item) {
                    $dog[] = $item;
                }
                foreach ($navne['img_path'] as $item) {
                    $imgpath[] = $item;
                }
                foreach ($navne['hipp_score'] as $item) {
                    $hippscore[] = $item;
                }
            }
        }

Og tabellen:

?>               



        <table border="0" summary=" class="pedigree">
            <tr>
                <td rowspan="16" class="pedigree"><?=$dog[2]?><?=$hippscore[1]?></td>
                <td rowspan="8" class="pedigree"><?=$dog[2]?><br><?=$hippscore[2]?></td>
Avatar billede Morten Nybegynder
14. november 2003 - 11:56 #44
sån:
        $antal = 4;// Antal generationer
        $hund[0]['id'] =$_GET['id'];// valgt hunds ID

        $dog = array();
        $item = mysql_result(mysql_query("select name from hunde where id=".$hund[0]['id']),0);
        $row = mysql_fetch_assoc($item);
        $dog[1] = $item;
        for ($i=1;$i<=$antal;$i++) {
            $hund = hent($hund);// Kalder funktionen hent()
Avatar billede Morten Nybegynder
14. november 2003 - 11:57 #45
hvad bruges $row til ???
Avatar billede detox Nybegynder
14. november 2003 - 11:57 #46
Her henter vi navnet på den første hund:

$dog = array();
        $item = mysql_result(mysql_query("select name from hunde where id=".$hund[0]['id']),0);
        $dog[1] = $item;

Det skal rettes til:

$dog = array();
        $res = mysql_query("select name, img_path, hipp_score  from hunde where id=".$hund[0]['id']);
        $row = mysql_fetch_assoc($res);
        $dog[1] = $row['navn'];
        $img_path[1] = $row['img_path'];
        $hipp_score[1] = $row['hipp_score'];

Så vi får alle tre oplysninger om den første hund.
Avatar billede detox Nybegynder
14. november 2003 - 11:59 #47
$row er her et array der indeholder de 3 data (samme princip som i funktionerne)
Avatar billede Morten Nybegynder
14. november 2003 - 12:01 #48
tak!
Avatar billede Morten Nybegynder
14. november 2003 - 12:05 #49
Der var en lille BUG:
$dog[1] = $row['navn']; - skal være > $dog[1] = $row['name'];

Er det ikke muligt at have tomme felter i hipp_score og img_path?
og så alligevel få vist de andre?
Avatar billede detox Nybegynder
14. november 2003 - 12:11 #50
Jo, det skulle jeg da mene, men det er muligt at du skal give dem en standardværdi i tabellen.
Avatar billede Morten Nybegynder
14. november 2003 - 12:16 #51
hvad betyder det her:

You have an error in your SQL syntax near 'OR id=' at line 1

Det får jeg på et par stykker af dem?
Avatar billede Morten Nybegynder
14. november 2003 - 12:36 #52
det var såmænd fordi en del af dem har ikke hverken far eller mor (eller det har de jo jeg kender dem bare ikke *LOL*)

Jeg oprette derfor en dummie nr. 9999 med teks n/a

Det eneste er så hvis den ukendt ikke er i sidste række men f.eks. i anden sidste række så bliver sidste række tom - den kan ligesom ikke hente den samme hund som forældre - men det går nok.....
Avatar billede Morten Nybegynder
14. november 2003 - 22:26 #53
Hey er du der stadig detox? ;O)

En sidste lillebitte ting:

Jeg har brug for at få id'en med på lige line med name og hipp_score og har forsøgt men det virker ikke - her er mit forsøg - kan du hjælpe igen igen igen:

$dog = array();
        $res = mysql_query("select name, img_path, hipp_score  from hunde where id=".$hund[0]['id']);
        $row = mysql_fetch_assoc($res);
        $id[1]=$row['id'];
        $dog[1] = $row['name'];
        $img_path[1] = $row['img_path'];
        $hipp_score[1] = $row['hipp_score'];
        for ($i=1;$i<=$antal;$i++) {
            $hund = hent($hund);// Kalder funktionen hent()
            foreach ($hund as $id) {
                $navne = name($id);// Kalder funktionen navn()
                foreach ($navne['id'] as $item) {
                    $id[] = $item;
                }
               
                foreach ($navne['name'] as $item) {
                    $dog[] = $item;
                }
                foreach ($navne['img_path'] as $item) {
                    $img_path[] = $item;
                }
                foreach ($navne['hipp_score'] as $item) {
                    $hipp_score[] = $item;
                }
            }
        }
?>               

        <table>
            <tr>
                <td rowspan="16" class="pedigree">
                    <a href="show_ped_pic.php?id=<?=$id[0]?>" onclick="NewWindow(this.href,'dog1','475','475','no','center');return false" onfocus="this.blur()">
                            <b><?=$dog[1]?></b>
                        <br>
                            <?=$hipp_score[1]?>
                    </a>
                </td>

Som du ser skal jeg bruge id til at hente img_path og navn i en anden funktion hvordan gør jeg det?

Kom lige til at tænke på om jeg egentlig kunne sende img_paht og name videre til den næste funktion i min <a href ????? så skal jeg ikke hente data igen?
Avatar billede Morten Nybegynder
14. november 2003 - 22:38 #54
fik den til at virke:


$dog = array();
        $res = mysql_query("select id, name, img_path, hipp_score  from hunde where id=".$hund[0]['id']);
        $row = mysql_fetch_assoc($res);
        $iddog[1]=$row['id'];
        $dog[1] = $row['name'];
        $img_path[1] = $row['img_path'];
        $hipp_score[1] = $row['hipp_score'];
        for ($i=1;$i<=$antal;$i++) {
            $hund = hent($hund);// Kalder funktionen hent()
            foreach ($hund as $id) {
                $navne = name($id);// Kalder funktionen navn()
                foreach ($navne['id'] as $item) {
                    $iddog[] = $item;
                }
                foreach ($navne['name'] as $item) {
                    $dog[] = $item;
                }
                foreach ($navne['img_path'] as $item) {
                    $img_path[] = $item;
                }
                foreach ($navne['hipp_score'] as $item) {
                    $hipp_score[] = $item;
                }
            }
        }

Men burde jeg ikke kunne sende værdien direkte  -  det må da alt andet lige være det bedste - skal bare lige finde ud af hvordan jeg sender flere værdier.....
Avatar billede detox Nybegynder
14. november 2003 - 22:44 #55
Nu er jeg ikke med på hvad du mener?
Avatar billede Morten Nybegynder
14. november 2003 - 22:49 #56
næ det kan jeg godt forstå hhaahahah

altså jeg har et pop-up vindue som viser billede og navn på hunden.
Jeg har fået det til at virke ved at sende de enkelte hundes ID videre til næste funktion sådan her:

                    <a href='show_ped_pic.php?id=<?=$iddog[2]?>' onclick="NewWindow(this.href,'Bandit3','475','475','no','center');return false" onfocus="this.blur()">

Men så tænkte jeg - vi har jo lige trukket både navn og img_path ud så hvorfor ikke bare sende den til show_ped_pic direkte? Men jeg ved ikke hvordan jeg sætter det ind i ovenstående - hvis man altså kan?
Avatar billede detox Nybegynder
14. november 2003 - 22:57 #57
Ja, ok. Nu er jeg med, tror jeg. Du kunne prøve med:

<a href='show_ped_pic.php?sti=<?=$img_path[$i]?>&<?=$hipp_score[$i]?>' onclick="NewWindow(this.href,'Bandit3','475','475','no','center');return false" onfocus="this.blur()">

Du skal adskille flere variabler med: &
Avatar billede Morten Nybegynder
14. november 2003 - 23:06 #58
Gi'r du undervisning i skidtet (læs: PHP) ku' vist godt bruge et par timer hahahaha

Tak endnu engang.
Avatar billede detox Nybegynder
14. november 2003 - 23:08 #59
Jamen det må vi finde ud af ved lejlighed c",)
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