Avatar billede nyst Nybegynder
06. februar 2004 - 12:25 Der er 32 kommentarer og
1 løsning

fra MySQL til tabel

Hi there,

kan I hælpe med udtræk fra MySQL database til side med dannelse af tabel.

Databasen indeholder feks.

id - indeks - sort - titel - overskrift - indhold - navn - dag

- id - bruges ikke til noget

- indeks - er et nummer til rækkefølgen i tabellen

- sort - er de rækker fra MySQL som skal behandles på denne side

- titel - er ens i alle felter i hver sin 'sort', dvs. den skal kun vises 1 gang og før tabellen

- overskrift - samme som 'titel'

TABLE

- indhold - skal vises i tabelform, værdierne forskellige

- navn - samme som 'indhold'

/TABLE

- dag - er ens i alle felter i hver sin 'sort', dvs. den skal kun vises 1 gang og efter tabellen

Følgende har jeg prøvet, men det virker dog ikke...

<?php
mysql_connect("");
mysql_select_db("");
$query = mysql_query("SELECT * FROM MYTable WHERE sort='10' ORDER BY indeks");
while($data = mysql_fetch_array($query)) {
echo "<TABLE border='1' bordercolorlight='#a5b9d7' bordercolordark='#ffffff' cellpadding='3' cellspacing='0' width='400'>";
    $i++;
    if ( $i == 1 )
    {
        echo "<H3>$data[titel]</H3>";
        echo "<H1>$data[overskrift]</H1>";
    }
    else
    {
        echo "<TR><TD width='300'>Indhold</TD><TD width='100' align='center'>Navn</TD></TR>";
        for ( $i = 0; $i < sizeof($data); $i++ )
        {
            echo "<TR><TD width='300'>$data[indhold]</TD><TD width='100' align='right'>$data[navn]</TD></TR>";
        }
    }
    echo "</TABLE><BR>";
    if ( $i == 1 ) {
        echo "<DIV class=h3>$data[dag]</DIV>";
    }
}

mysql_close();
?>
Avatar billede detox Nybegynder
06. februar 2004 - 13:16 #1
Prøv sådan her:

<?php
mysql_connect("");
mysql_select_db("");
$query = mysql_query("SELECT * FROM MYTable WHERE sort='10' ORDER BY indeks");
$tmp = "";
$out = "<table border='1' bordercolorlight='#a5b9d7' bordercolordark='#ffffff' cellpadding='3' cellspacing='0' width='400'>";
while($data = mysql_fetch_array($query)) {
    if ($tmp != $data['overskrift']) {
        $out .= "<H3>$data[titel]</H3>";
        $out .= "<H1>$data[overskrift]</H1>";
        $out .= "<tr><th width='300'>Indhold</th><th width='100' align='center'>Navn</th></tr>";
        $dag = $data['dag'];
    }
    $out .= "<tr><td width='300'>$data[indhold]</td><td width='100' align='right'>$data[navn]</td></tr>";
    $tmp = $data['overskrift'];
}
$out .= "</table><br />";
$out .= "<div class=h3>$dag</div>";
echo $out;
mysql_close();
?>
Avatar billede detox Nybegynder
06. februar 2004 - 13:22 #2
Du vil gøre det nemmere for dig selv, hvis du opdeler dine data i flere tabeller så du undgår at de samme data gentager sig i de forskellige rækker (en såkaldt normalisering).
Avatar billede nyst Nybegynder
06. februar 2004 - 13:31 #3
Hejsa,

den kommer med:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Du har denne:

    if ($tmp != $data['overskrift']) {

som er samme som

        $out .= "<H1>$data[overskrift]</H1>";

er det korrekt, idet siden skal se ud som følger:

-------------
Titel

Overskrift

TABLE
  indhold - navn
  indhold - navn
  osv.
/TABLE

Dag
---------------

Håber du kan hjælpe yderligere...
Avatar billede detox Nybegynder
06. februar 2004 - 13:34 #4
Der er noget galt med din forespørgsel:

$query = mysql_query("SELECT * FROM MYTable WHERE sort='10' ORDER BY indeks");

prøv istedet:

$query = mysql_query("SELECT * FROM MYTable WHERE sort='10' ORDER BY indeks") or die(mysql_error());
Avatar billede nyst Nybegynder
06. februar 2004 - 13:35 #5
Fik noget frem nu - undskyld, men

overskrift og titel gentages før tabel, altså ikke kun 1 gang og dag vises ikke.
Avatar billede detox Nybegynder
06. februar 2004 - 13:36 #6
if ($tmp != $data['overskrift']) {

Er bare for at sikre at titel og overskrift kun bliver udskrevet en gang.
Avatar billede detox Nybegynder
06. februar 2004 - 13:37 #7
Har du ændret noget?
Avatar billede nyst Nybegynder
06. februar 2004 - 13:40 #8
nu virker den

det er kun dag til sidst efter tabel der ikke vises
Avatar billede detox Nybegynder
06. februar 2004 - 13:42 #9
Her er en anden måde at gøre det på:

<?php
mysql_connect("");
mysql_select_db("");
$query = mysql_query("SELECT * FROM MYTable WHERE sort='10' ORDER BY indeks");
$data = mysql_fetch_array($query);
$out = "<H3>$data[titel]</H3>";
$out .= "<H1>$data[overskrift]</H1>";
$out .= "<table border='1' bordercolorlight='#a5b9d7' bordercolordark='#ffffff' cellpadding='3' cellspacing='0' width='400'>";
$out .= "<tr><th width='300'>Indhold</th><th width='100' align='center'>Navn</th></tr>";
$out .= "<tr><td width='300'>$data[indhold]</td><td width='100' align='right'>$data[navn]</td></tr>";
$dag = $data['dag'];
while($data = mysql_fetch_array($query)) {
    $out .= "<tr><td width='300'>$data[indhold]</td><td width='100' align='right'>$data[navn]</td></tr>";
}
$out .= "</table><br />";
$out .= "<div class=h3>$dag</div>";
echo $out;
mysql_close();
?>
Avatar billede detox Nybegynder
06. februar 2004 - 13:44 #10
Disse to linier skulle gerne sikre at din dato bliver udskrevet til sidst efter tabellen:

$dag = $data['dag'];
$out .= "<div class=h3>$dag</div>";
Avatar billede nyst Nybegynder
06. februar 2004 - 13:53 #11
Kun et problem, denne linie

$out .= "<tr><th width='300'>Indhold</th><th width='100' align='center'>Navn</th></tr>";

der skrives der ikke med alm. tekst men med bold eller ligende!!!
Avatar billede detox Nybegynder
06. februar 2004 - 13:55 #12
Tja, jeg har brugt <th></th> som overskrift i tabellen. Du kan skifte ud med: <td></td> eller sætte en style på <th>
Avatar billede detox Nybegynder
06. februar 2004 - 13:58 #13
style='font-weight: normal;'
Avatar billede nyst Nybegynder
06. februar 2004 - 14:01 #14
Ja, den fangede jeg ikke lige i farten *S*

Den funger nu - skønt og 1000 tak.

Lige en ting så jeg kan lære om det her.

Skriver den først en linie ud

$out .= "<tr><td width='300'>$data[indhold]</td><td width='100' align='right'>$data[navn]</td></tr>";

og så hvis der er flere, så er det udsagnet

while($data = mysql_fetch_array($query)) {
    $out .= "<tr><td width='300'>$data[indhold]</td><td width='100' align='right'>$data[navn]</td></tr>";
}

som danner resten af tabellen?

Ellers tak for nu og points til dig og god weekend.
Avatar billede detox Nybegynder
06. februar 2004 - 14:06 #15
Ja, det er korrekt, bortset fra at den ikke udskriver noget der.
$out = og $out .= sørger bare for at samle outputtet i en variabel, som bliver udskrevet til sidst med: echo $out;
Det kan tit være en fordel at samle output fra fx løkker på den måde, istedet for at have en masse langsomme echo sætninger.
Avatar billede detox Nybegynder
06. februar 2004 - 14:06 #16
og velbekommen c",)
Avatar billede nyst Nybegynder
06. februar 2004 - 14:11 #17
Takker,

det undrede mig også lidt du brugte $out i første sætning og derefter .$out bagefter, men det er så ligemeget?
Avatar billede nyst Nybegynder
06. februar 2004 - 14:22 #18
skulle være $out = eller $out .=

er der forskel på dem ?
Avatar billede detox Nybegynder
06. februar 2004 - 14:46 #19
Brug: $out = første gang og derefter: $out .= når du tilføjer.
Avatar billede nyst Nybegynder
09. februar 2004 - 11:16 #20
også hvis jeg indsætter:

$out = "<TR><TD>";

før

$out .= "<H3>$data[afdeling]</H3>";

eller skal der være et $-udtryk for jeg starter med out uden .

???
Avatar billede detox Nybegynder
09. februar 2004 - 12:34 #21
$out = "<TR><TD>"; tildeler: "<TR><TD>" til variablen: $out.
$out .= "<H3>$data[afdeling]</H3>"; tilføjer: "<H3>$data[afdeling]</H3>" til $out, så den nu indeholder:
"<TR><TD><H3>$data[afdeling]</H3>"
og så fremdeles.
Avatar billede detox Nybegynder
09. februar 2004 - 12:40 #22
Hvis du fx har brug for en mere overskuelig html-kode, kan du tilføje \n de steder hvor du ønsker et linieskift i sourcekoden. Fx:
$out = "<TR>\n<TD>\n";
$out .= "<H3>$data[afdeling]</H3>\n";
vil give:
<TR>
<TD>
<H3>$data[afdeling]</H3>
Dette betyder intet for browseren, men giver som sagt en mere overskuelig kode til fx debug.
Avatar billede nyst Nybegynder
10. februar 2004 - 11:28 #23
Hej igen,
jeg poster lige koden:

    <table border="0" cellpadding="0" cellspacing="0">
<?php
mysql_connect("xx");
mysql_select_db("yy");
$query = mysql_query("SELECT * FROM priser WHERE afd='060' ORDER BY indeks");
$data = mysql_fetch_array($query);
$out = "<TR><TD>";
$out .= "<H3>$data[afdeling]</H3>";
$out .= "<H1>$data[overskrift]</H1>";
$out .= "<TABLE border='1' bordercolorlight='#a5b9d7' bordercolordark='#ffffff' cellpadding='3' cellspacing='0' width='400'>";
$out .= "<TR><TD width='300' align='left'>Ydelse</TD><TD width='100' align='center'>Pris</TD></TR>";
$out .= "<TR><TD width='300'>$data[indhold]</TD><TD width='100' align='right'>$data[pris] kr.</TD></TR>";
$dag = $data['dag'];
while($data = mysql_fetch_array($query)) {
    $out .= "<TR><TD width='300'>$data[indhold]</TD><TD width='100' align='right'>$data[pris] kr.</TD></TR>";
}
$out .= "</TABLE><BR>";
$out .= "<DIV class='h3'>Priser gældende fra $dag og til ny prisliste udkommer.<BR>Der tages forbehold for fejl.<BR></DIV>";
$out .= "</TR></TD>";
echo $out;
mysql_close();
?>
    </table>

som du kan se har jeg indsat

$out = "<TR><TD>";

og til sidst

$out .= "</TR></TD>";

disse vedrører ikke selve tabeldannelsen, som du hjalp med, det er bare selve designopstillingen, der gør de skal være der, men for en sikkerheds skyld, hvis du gider - er den så ok mht $out osv.

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

Kan du hjælpe yderligere med et andet problem - selvfølgelige nye points *S* ???
Avatar billede detox Nybegynder
10. februar 2004 - 11:44 #24
Ja, umiddelbart ser det rigtigt ud. Er du i tvivl kan du indsætte \n som jeg beskrev: 09/02-2004 12:40:32. Det gør det meget nemmere at undersøge kildekoden fra den færdige html side.
Mht. til det andet problem, vil jeg da gerne prøve at se på det.
Avatar billede nyst Nybegynder
10. februar 2004 - 12:02 #25
Jeg har i databasen 2 tabeller 'sider' og 'priser'

For tabellen 'sider' har jeg en søgefunktion:

<?php
    mysql_connect("xx");
if($search){   
    mysql_select_db("yy");
    $noResult = "<BR>Deres søgning gav intet resultat.";   
    $query = mysql_query("SELECT * FROM sider WHERE indhold LIKE '%".addslashes($search)."%' AND godkendt='ja' AND afd='".addslashes($afd)."' ORDER BY afdeling");
    echo mysql_num_rows($query) . " resultater blev fundet og vist efter afdeling.<BR><BR>";
    while($row = mysql_fetch_array($query)){
        $id = $row["id"];
        $afd = $row["afd"];
        $afdeling = $row["afdeling"];
        $overskrift = $row["overskrift"];
        $filnavn = $row["filnavn"];
        $indhold = $row["indhold"];
        $indhold = strip_tags($indhold);
        echo ("$afdeling<BR>");
        echo ("<a href=/$filnavn class=hamlet>$overskrift</a><BR>");
        echo strlen($indhold) > 120 ? '<i>' .  substr($indhold, 0, 120) . '...</i>' : $indhold;
        echo ("<BR><BR>");       
    }
if (!$id){
        print ("$noResult");
    }
mysql_close();
}
?>

men jeg vil gerne have den udviddet til også at søge i tabel 'priser', som ikke har helt de samme felter - kan man det???
Avatar billede nyst Nybegynder
10. februar 2004 - 12:06 #26
tabel 'sider' ser sådanne ud:

CREATE TABLE sider (
  id int(11) NOT NULL auto_increment,
  indeks tinytext NOT NULL,
  godkendt tinytext NOT NULL,
  filnavn tinytext NOT NULL,
  afd tinytext NOT NULL,
  list tinytext NOT NULL,
  afdeling tinytext NOT NULL,
  overskrift tinytext NOT NULL,
  indhold text NOT NULL,
  kopi tinytext NOT NULL,
  dag tinytext NOT NULL,
  appetit tinytext NOT NULL,
  PRIMARY KEY  (id),
  FULLTEXT KEY afd (afd)
) TYPE=MyISAM COMMENT='alle almindelige sider';

tabel 'priser' sådanne:

CREATE TABLE priser (
  id int(11) NOT NULL auto_increment,
  indeks tinytext NOT NULL,
  godkendt tinytext NOT NULL,
  filnavn tinytext NOT NULL,
  afd tinytext NOT NULL,
  list tinytext NOT NULL,
  afdeling tinytext NOT NULL,
  overskrift tinytext NOT NULL,
  indhold text NOT NULL,
  pris tinytext NOT NULL,
  dag tinytext NOT NULL,
  PRIMARY KEY  (id),
  FULLTEXT KEY tekst (indhold,pris)
) TYPE=MyISAM COMMENT='alle almindelige sider';

men søgningen i 'priser' behøver kun vise nogenlunde det samme som søgning i 'sider'
Avatar billede nyst Nybegynder
11. februar 2004 - 20:36 #27
fik du svar på dine oplysninger?
Avatar billede detox Nybegynder
11. februar 2004 - 21:08 #28
Det letteste vil nok være at lave en søgning mere magen til den anden, blot på tabellen priser og så køre den i forlængelse af den anden.
Avatar billede nyst Nybegynder
12. februar 2004 - 10:08 #29
det lyder som en ide, men hvordan gør jeg det så den kommer lige efter - og kan jeg sætte koderne sammen på en smart måde?
Avatar billede nyst Nybegynder
12. februar 2004 - 10:49 #30
nok ikke så smart alligevel, hvis du mener 2 søgefelter.
Det skal være sådan at hvis man i søgefeltet skriver et ord som både finde i 'sider' og i 'priser' skal søgningen vise begge.
Jeg kan ikke se hvordan de fra samme søgefelt søger i begge og så sætter dem sammen og viser resultatet efter hinanden.
Men der er måske en løsning?
Avatar billede detox Nybegynder
12. februar 2004 - 18:20 #31
Næ, jeg mener ikke med to søgefelter, men at lave en forespørgsel i tabellen priser magen til den anden (med samme søgeord) og derefter en udskrivning fra hver forespørgsel.
Avatar billede nyst Nybegynder
13. februar 2004 - 10:06 #32
men hvor i koden indsættes så forespørgslen for tabellen 'priser'
Avatar billede detox Nybegynder
13. februar 2004 - 21:32 #33
Bare efter den anden i den her stil (skal nok rettes lidt til):

<?php
    mysql_connect("xx");
if($search){ 
    mysql_select_db("yy");
    $noResult = "<BR>Deres søgning gav intet resultat."; 
    $query = mysql_query("SELECT * FROM sider WHERE indhold LIKE '%".addslashes($search)."%' AND godkendt='ja' AND afd='".addslashes($afd)."' ORDER BY afdeling");
    echo mysql_num_rows($query) . " resultater blev fundet og vist efter afdeling.<BR><BR>";
    while($row = mysql_fetch_array($query)){
        $id = $row["id"];
        $afd = $row["afd"];
        $afdeling = $row["afdeling"];
        $overskrift = $row["overskrift"];
        $filnavn = $row["filnavn"];
        $indhold = $row["indhold"];
        $indhold = strip_tags($indhold);
        echo ("$afdeling<BR>");
        echo ("<a href=/$filnavn class=hamlet>$overskrift</a><BR>");
        echo strlen($indhold) > 120 ? '<i>' .  substr($indhold, 0, 120) . '...</i>' : $indhold;
        echo ("<BR><BR>");   
    $query = mysql_query("SELECT * FROM priser WHERE indhold LIKE '%".addslashes($search)."%' AND godkendt='ja' AND afd='".addslashes($afd)."' ORDER BY afdeling");
    echo mysql_num_rows($query) . " resultater blev fundet og vist efter afdeling.<BR><BR>";
    while($row = mysql_fetch_array($query)){
        $id = $row["id"];
        $afd = $row["afd"];
        $afdeling = $row["afdeling"];
        $overskrift = $row["overskrift"];
        $filnavn = $row["filnavn"];
        $indhold = strip_tags($row["indhold"]);
        echo ("$afdeling<BR>");
        echo ("<a href=/$filnavn class=hamlet>$overskrift</a><BR>");
        echo strlen($indhold) > 120 ? '<i>' .  substr($indhold, 0, 120) . '...</i>' : $indhold;
        echo ("<BR><BR>");   
    }
if (!$id){
        print ("$noResult");
    }
mysql_close();
}
?>
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