Avatar billede exp Juniormester
11. november 2003 - 20:28 Der er 46 kommentarer og
2 løsninger

at opstille en tabel, sorteret efter dato og sprog

Nu må jeg efterhånden give op, har brugt det meste af aftenen på et, i mine øjne, latterligt simpelt script... og det vil bare ikke som jeg vil.

Det jeg søger kan ca ses her:
www.firewerx.dk/exp/ny.jpg

Det der skal ske er, at der for hver linie skal være en dato,  disse ligger i variablen $data['die']

Ud for hver linie skal der så sorteres efter sprog, således at alle rækker i tabellen, hvor datoen er fx 15/11/03 OG! sproget = "dan" skal sættes i samme celle. Er der flere rækker i tabellen der har samme dato og samme sprog, skal de adskilles med <br />

Den sql jeg bruger til at hente og sortere data ses her:
"select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die`, `sprog` asc"

Systemet bag kan ses her:
www.firewerx.dk/montana/add.php
login: exp/test

Det der skal laves ligger nede i bunden, altså tabellen.
Det er meningen, at alle det poster der har samme dato, skal ligge i samme række i tabellen, under deres respektive sprog.

Jeg håber virkelig i kan hjælpe, sig til hvis der er noget der skal uddybes
Avatar billede swaxi Nybegynder
11. november 2003 - 20:43 #1
prøv det her (utestet, men mon ikke ... )

$result = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die` asc");
$tmp = array();
while ($row = mysql_fetch_array($result)) {
    $index = md5($row['die'].$row['overskrift']);
    if (!isset($tmp[$index])) $tmp[$index] = array();
    array_push($tmp[$index], $row);
}
echo "<table>";
foreach ($tmp as $row) {
    echo "<tr>";
    foreach ($row as $tupple)
        echo "<td>".$tupple."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede swaxi Nybegynder
11. november 2003 - 20:48 #2
undskyld ... såddan her :

$result = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die` asc");
$tmp = array();
while ($row = mysql_fetch_array($result)) {
    $index = md5($row['die'].$row['overskrift']);
    if (!isset($tmp[$index])) $tmp[$index] = $row;
    else $tmp[$index]['overskrift'] .= '<br />'.$row['overskrift'];
}
echo "<table>";
foreach ($tmp as $row) {
    echo "<tr>";
    foreach ($row as $tupple)
        echo "<td>".$tupple."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede swaxi Nybegynder
11. november 2003 - 20:49 #3
arh ...

$result = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die` asc");
$tmp = array();
while ($row = mysql_fetch_array($result)) {
    $index = md5($row['die'].$row['sprog']);
    if (!isset($tmp[$index])) $tmp[$index] = $row;
    else $tmp[$index]['overskrift'] .= '<br />'.$row['overskrift'];
}
echo "<table>";
foreach ($tmp as $row) {
    echo "<tr>";
    foreach ($row as $tupple)
        echo "<td>".$tupple."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede swaxi Nybegynder
11. november 2003 - 20:49 #4
de burde lave det så man kan rette sine posts her på eksperten :)
Avatar billede exp Juniormester
11. november 2003 - 20:49 #5
Avatar billede swaxi Nybegynder
11. november 2003 - 20:53 #6
oh ...
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
Avatar billede exp Juniormester
11. november 2003 - 20:58 #7
Nu skal du ikke tage det personligt, men det der ligner ikke lige det jeg skal bruge ;-)

Det skulle meget gerne ende med dette:
www.firewerx.dk/exp/ny.jpg


Og hvorfor md5() ?
$index = md5($row['die'].$row['overskrift']);
Avatar billede jakoba Nybegynder
11. november 2003 - 20:59 #8
$sql_kommando = "
  SELECT dato, sprog, andet1, andet2, osv
  FROM  dintabel
  ORDER BY dato ASC, sprog ASC
";

$resultatsaet = mysql_query($sql_kommando) or die(mysql_error());

if ( mysql_num_rows( $resultatsaet ) > 0 ) {
    echo "<table>";
    $ptdato = 0;
    $ptsprog = "";
    $row = mysql_fetch_array( $resultatsaet );
    while ( $row ) {
        if ( $row['dato'] != $ptdato ) { // start ny tabel-række
            $ptdato = $row['dato'];
            echo "  <tr><td>" .$ptdato ."</td><td>";
        }
        if ( $row['sprog'] != $ptsprog ) {  // indsæt et break imellem sprog
            $ptsprog = $row['sprog'];
            echo "<br>" );
        }
        echo "hvad data der ellers skal skrives fra den row"; // udfuld selv
        $row = mysql_fetch_array( $resultatsaet );  // hent næste db-række

        if ( !$row || $row['dato'] != $ptdato ) {  // afslut denne tabel-række
            echo "  </td></tr>";
        }
    }
    echo "</table>;
}

mvh JakobA
Avatar billede jakoba Nybegynder
11. november 2003 - 21:04 #9
Ups. der skal tilføjes en ekstra linie i første if setning indeni løkken

        if ( $row['dato'] != $ptdato ) { // start ny tabel-række
            $ptdato = $row['dato'];
            $ptsprog = $row['sprog'];  // undgå extra <br> ved datoskift
            echo "  <tr><td>" .$ptdato ."</td><td>";
        }
Avatar billede swaxi Nybegynder
11. november 2003 - 21:05 #10
my bad ... jeg misforstod hvad du skrev ... prøv det her :

$result = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die` asc");

$lang = array('dan' => '','eng' => '',fra' => '','tys' => ''):
$tmp = array();
while ($row = mysql_fetch_array($result)) {
    if (!isset($tmp['die']))
        $tmp['die'] = $lang;
   
    $tmp['die'][$row['sprog']] .= (($tmp['die'][$row['sprog']]=='')?'':'<br />').$row['overskrift'];
}

echo "<table>";
foreach ($tmp as $row) {
    echo "<tr>";
    foreach ($row as $tupple)
        echo "<td>".$tupple."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede exp Juniormester
11. november 2003 - 21:22 #11
jakoba >>
http://firewerx.dk/montana/temp.php <== den kaster dem bare ind i rækkefølge...

swaxi >>
Dine forslag kan ses øverst og nederst. Den nederste er indtil videre den der er nærmest.
Men den er rykket en tak, kan ikke lige lure hvor datoen skal indsættes date('d/m/y', $noget)
Avatar billede detox Nybegynder
11. november 2003 - 21:24 #12
Jeg fandt en rimelig enkel løsning:


error_reporting (E_ALL ^ E_NOTICE);
$res = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die`, `sprog` asc");
while ($row = mysql_fetch_assoc($res)) {
    $var[$row['die']][$row['sprog']] = $row['overskrift'];
}
echo "<table bgcolor='#AAAAAA' border='1'>";
echo "<th>Dato</th><th>Danmark</th><th>England</th><th>Frankrig</th><th>Tyskland</th>";
$i = 0;
foreach ($var as $die => $sprog) {
    $i++;
    $bg = $i&1 ? '#CCCCCC' : '#EEEEEE';
    echo "<tr bgcolor=$bg>";
    echo "<td>".$die."</td><td>".$sprog['dan']."</td>
        <td>".$sprog['eng']."</td>
        <td>".$sprog['fra']."</td>
        <td>".$sprog['tys']."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede detox Nybegynder
11. november 2003 - 21:31 #13
Hmm, og dog er den ikke helt fin, hvad angår flere rækker med samme dato og samme sprog. :(
Avatar billede exp Juniormester
11. november 2003 - 21:32 #14
detox >>
Skulle lige til at skrive det :-)

Har lagt den sammen med de andre her:
http://firewerx.dk/montana/temp.php
Avatar billede detox Nybegynder
11. november 2003 - 21:38 #15
Har jeg fixet:


error_reporting (E_ALL ^ E_NOTICE);
$res = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die`, `sprog` asc");
while ($row = mysql_fetch_assoc($res)) {
    if ($die == $row['die'] && $sprog == $sprog['sprog']) {
        $var[$row['die']][$row['sprog']] .= "<br />".$row['overskrift'];
    } else {
        $var[$row['die']][$row['sprog']] = $row['overskrift'];
    }
    $die = $row['die'];
    $sprog = $sprog['sprog'];
}
echo "<table bgcolor='#AAAAAA' border='1'>";
echo "<th>Dato</th><th>Danmark</th><th>England</th><th>Frankrig</th><th>Tyskland</th>";
$i = 0;
foreach ($var as $die => $sprog) {
    $i++;
    $bg = $i&1 ? '#CCCCCC' : '#EEEEEE';
    echo "<tr bgcolor=$bg>";
    echo "<td>".$die."</td><td>".$sprog['dan']."</td>
        <td>".$sprog['eng']."</td>
        <td>".$sprog['fra']."</td>
        <td>".$sprog['tys']."</td>";
    echo "</tr>";
}
echo "</table>";
?>
Avatar billede exp Juniormester
11. november 2003 - 21:49 #16
detox >>
Har faktisk kun lige en ting...

Der indsættes <br /> FØR teksten i felterne :-(

<tr style="background:#fff">
  <td style="border: 1px solid black;vertical-align: top;">15/11/03</td>
  <td style="border: 1px solid black;vertical-align: top;">Dansk test 2<br />Dansk test 1</td>
  <td style="border: 1px solid black;vertical-align: top;"><br />Engelsk test 1</td>
  <td style="border: 1px solid black;vertical-align: top;"><br />Fransk test 1</td>
  <td style="border: 1px solid black;vertical-align: top;"><br />Tysk test 1</td>
</tr>
Avatar billede swaxi Nybegynder
11. november 2003 - 21:52 #17
$result = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die` asc");

$lang = array('dan' => '','eng' => '',fra' => '','tys' => ''):
$tmp = array();
while ($row = mysql_fetch_array($result)) {
    if (!isset($tmp['die']))
        $tmp['die'] = $lang;
   
    $tmp['die'][$row['sprog']] .= (($tmp['die'][$row['sprog']]=='')?'':'<br />').$row['overskrift'];
}

echo "<table>";
foreach ($tmp as $die => $row) {
    echo "<tr>";
    echo "<td>".$die."</td>";
    foreach ($row as $tupple)
        echo "<td>".$tupple."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede detox Nybegynder
11. november 2003 - 21:52 #18
Det ser mærkeligt ud. Jeg kan ikke se, hvor de kommer fra?
Avatar billede exp Juniormester
11. november 2003 - 22:03 #19
swaxi >>
hmm... den indsætter alle med samme sprog i den korrekte række, men $die er forkert (se datoen), og så sker der det der kan ses nederst: http://firewerx.dk/montana/temp.php

detox >>
Du simpelthen en skattebasse, hvis du løser det :-)
Avatar billede detox Nybegynder
11. november 2003 - 22:03 #20
Jo, nu fandt jeg den:


error_reporting (E_ALL ^ E_NOTICE);
$res = mysql_query("select `id`, `overskrift`, `sprog`, `die` from `news` where status = '1' order by `die`, `sprog` asc");
while ($row = mysql_fetch_assoc($res)) {
    if ($die == $row['die'] && $sprog == $row['sprog']) {
        $var[$row['die']][$row['sprog']] .= "<br />".$row['overskrift'];
    } else {
        $var[$row['die']][$row['sprog']] = $row['overskrift'];
    }
    $die = $row['die'];
    $sprog = $row['sprog'];
}
echo "<table bgcolor='#AAAAAA' border='1'>\n";
echo "<th>Dato</th><th>Danmark</th><th>England</th><th>Frankrig</th><th>Tyskland</th>\n";
$i = 0;
foreach ($var as $die => $sprog) {
    $i++;
    $bg = $i&1 ? '#CCCCCC' : '#EEEEEE';
    echo "<tr bgcolor=$bg>";
    echo "<td>".$die."</td><td>".$sprog['dan']."</td>\n
        <td>".$sprog['eng']."</td>\n
        <td>".$sprog['fra']."</td>\n
        <td>".$sprog['tys']."</td>\n";
    echo "</tr>\n";
}
echo "</table>";
?>
Avatar billede exp Juniormester
11. november 2003 - 22:12 #21
Jamen det er jo smukt! Kast lige alle et svar :-)
Avatar billede detox Nybegynder
11. november 2003 - 22:13 #22
c",)
Avatar billede detox Nybegynder
11. november 2003 - 22:17 #23
swaxi -> Når jeg ser på dine og mine forslag, må jeg sige at vi har nogle af de samme elementer. Jeg vil godt understrege at jeg ikke har skelet til dine indlæg og at jeg først bemærker det nu. Men vi må tænke i nogle af de samme baner ;o)
Avatar billede swaxi Nybegynder
11. november 2003 - 22:31 #24
detox > det er vel meget naturligt ... hvorfor sætter du egt. error-reporting - sjusk ? :)

jeg sidder og stener lidt ... det er faktisk lidt svært at skrive kode, når man ikke kan kompile det og se resultatet right-away ...
tror den virker nu :

$result = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die` asc");

$lang = array('dan' => '','eng' => '',fra' => '','tys' => ''):
$tmp = array();
while ($row = mysql_fetch_array($result)) {
    if (!isset($tmp[$row['die']]))
        $tmp[$row['die']] = $lang;
   
    $tmp[$row['die']][$row['sprog']] .= (($tmp['die'][$row['sprog']]=='')?'':'<br />').$row['overskrift'];
}

echo "<table>";
foreach ($tmp as $die => $row) {
    echo "<tr>";
    echo "<td>".$die."</td>";
    foreach ($row as $tupple)
        echo "<td>".$tupple."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede detox Nybegynder
11. november 2003 - 22:45 #25
$lang = array('dan' => '','eng' => '',fra' => '','tys' => ''):
skal være:
$lang = array('dan' => '','eng' => '','fra' => '','tys' => '');

Error_reporting() er for at undgå notices. Det er forøvrigt standardindstillingen jeg har sat den til. Fordi jeg har E_ALL på normalt.
Du fik 6 af dem her:
Notice: Undefined index: die in c:\foxserv\www\test2\tmpadkcmo7iyo.php on line 11
Avatar billede detox Nybegynder
11. november 2003 - 22:45 #26
^ ^ ^ ^
swaxi ->
Avatar billede detox Nybegynder
11. november 2003 - 22:47 #27
swaxi -> Og den laver kun den sidste overskrift, hvis der er flere med samme dato og sprog.
Avatar billede detox Nybegynder
11. november 2003 - 22:48 #28
swaxi -> Undskyld, den skriver flere overskrifter, men uden <br />.
Avatar billede detox Nybegynder
11. november 2003 - 23:04 #29
En lille forenkling af whileløkken (inspireret af swaxi):


<?
require 'db.php';//Connect til database
error_reporting (E_ALL ^ E_NOTICE);
$res = mysql_query("select `id`, `overskrift`, `sprog`, `die` from `news` where status = '1' order by `die`, `sprog` asc");
while ($row = mysql_fetch_assoc($res)) {
    $var[$row['die']][$row['sprog']] .= isset($var[$row['die']][$row['sprog']]) ? "<br />".$row['overskrift'] : $row['overskrift'];
}
$out = "<table bgcolor='#AAAAAA' border='1'>\n";
$out .= "<th>Dato</th><th>Danmark</th><th>England</th><th>Frankrig</th><th>Tyskland</th>\n";
$i = 0;
foreach ($var as $die => $sprog) {
    $i++;
    $bg = $i&1 ? '#CCCCCC' : '#EEEEEE';
    $out .= "<tr bgcolor=$bg>\n";
    $out .= "<td>".$die."</td><td>".$sprog['dan']."</td>\n<td>".$sprog['eng']."</td>\n
        <td>".$sprog['fra']."</td>\n<td>".$sprog['tys']."</td>\n</tr>\n";
}
$out .= "</table>";
echo $out;
?>
Avatar billede exp Juniormester
11. november 2003 - 23:07 #30
detox >>
Prøv lige at smutte ind på http://firewerx.dk/montana/add.php exp/test

Klik på "Engelsk test 1" og sæt sproget til tysk

Når jeg gør det, forsvinder den originale tyske "Tysk test 1"

Ændrer jeg den tilbage til engelsk, kommer den tyske igen...?!?
Avatar billede exp Juniormester
11. november 2003 - 23:12 #31
Og den du forenkler while-løkken i, er vist heller ikke helt i orden *G*

Den udskriver mange af posterne to gange... :-)
Avatar billede swaxi Nybegynder
11. november 2003 - 23:13 #32
:)
jeg har også E_ALL på som default ... det tvinger een til at skrive ordentlig kode ... det var det jeg hintede til med "sjusk"
Avatar billede detox Nybegynder
11. november 2003 - 23:19 #33
exp -> Det er en pudsig detalje, men det må jo hænge sammen med din opdatering af database. Laver du henholdsvis INSERT og UPDATE?
Mht 'forenklingen' oplever jeg ingen problemer ;o)
Avatar billede exp Juniormester
11. november 2003 - 23:30 #34
forenklingen:
www.firewerx.dk/montana/temp.php - nederst :-)

opdatering af db:
$sql = "update `news` set `overskrift` = '".$overskrift."', `text` = '".$text."', `sprog` = '".$sprog."', `die` = '".$die."' where `id` = '".$_POST['id']."'"
Avatar billede swaxi Nybegynder
11. november 2003 - 23:34 #35
$result = mysql_query("select `id`, `overskrift`, `sprog`, die from `news` where status = '1' order by `die` asc");

$lang = array('dan' => '','eng' => '','fra' => '','tys' => '');
$tmp = array();
while ($row = mysql_fetch_array($result)) {
    if (!isset($tmp[$row['die']]))
        $tmp[$row['die']] = $lang;
   
    $tmp[$row['die']][$row['sprog']] .= (($tmp[$row['die']][$row['sprog']]=='')?'':'<br />').$row['overskrift'];
}

echo "<table>";
foreach ($tmp as $die => $row) {
    echo "<tr>";
    echo "<td>".$die."</td>";
    foreach ($row as $tupple)
        echo "<td>".$tupple."</td>";
    echo "</tr>";
}
echo "</table>";
Avatar billede detox Nybegynder
11. november 2003 - 23:46 #36
Jeg får dette output med 'forenklingen':
http://www.buksevand.dk/test/test2.php

Det andet der er lidt spooky. Er du sikker på du får rigtigt fat i alle data fra formen?
Avatar billede exp Juniormester
11. november 2003 - 23:53 #37
Hehe... ja det er jeg - bruger nøjagtig samme sql som resten af eksemplerne på www,firewerx.dk/montana/temp.php
Avatar billede exp Juniormester
11. november 2003 - 23:53 #38
Avatar billede detox Nybegynder
12. november 2003 - 00:01 #39
Den kode jeg har postet er nøjagtig den jeg har lagt ud, så det er jo spøjst. Bruger du register_globals=On?
Avatar billede exp Juniormester
12. november 2003 - 00:05 #40
nopes
Avatar billede detox Nybegynder
12. november 2003 - 00:11 #41
Det virker jo helt tosset, at der er sådan en forskel.
Umiddelbart ser din updatequery jo ok ud. Det er ikke til at sige, hvor det går galt, uden at have hele koden.
Avatar billede detox Nybegynder
12. november 2003 - 00:12 #42
Kunne du lave et link til koden?
Avatar billede detox Nybegynder
12. november 2003 - 00:38 #43
Du er nok nødt til at prøve med en anden whileløkke. Den anden virker kun hvis rækkerne kommer lige efter hinanden. Det burde de gøre når man sorterer efter die og sprog. Men den dur ikke når der er flere sprog med flere data med samme dato.
Prøv fx:

<?
require 'db.php';//Connect til database
error_reporting (E_ALL ^ E_NOTICE);
$res = mysql_query("select `id`, `overskrift`, `sprog`, `die` from `news` where status = '1' order by `die`, `sprog` asc");
while ($row = mysql_fetch_assoc($res)) {
    if (isset($var[$row['die']][$row['sprog']])) {
        $var[$row['die']][$row['sprog']] .= "<br />".$row['overskrift'];
    } else {
        $var[$row['die']][$row['sprog']] = $row['overskrift'];
    }
}
$out = "<table style='border: 1px solid black; border-collapse: collapse;'>\n";
$out .= "<th style='border: 1px solid black; vertical-align: top;'>Dato</th>
    <th style='border: 1px solid black; vertical-align: top;'>Danmark</th>
    <th style='border: 1px solid black; vertical-align: top;'>England</th>
    <th style='border: 1px solid black; vertical-align: top;'>Frankrig</th>
    <th style='border: 1px solid black; vertical-align: top;'>Tyskland</th>\n";
$i = 0;
foreach ($var as $die => $sprog) {
    $i++;
    $bg = $i&1 ? '#CCCCCC' : '#EEEEEE';
    $out .= "<tr style='background:$bg'>\n";
    $out .= "<td style='border: 1px solid black; vertical-align: top;'>".$die."</td>
        <td style='border: 1px solid black; vertical-align: top;'>".$sprog['dan']."</td>
        <td style='border: 1px solid black; vertical-align: top;'>".$sprog['eng']."</td>
        <td style='border: 1px solid black; vertical-align: top;'>".$sprog['fra']."</td>
        <td style='border: 1px solid black; vertical-align: top;'>".$sprog['tys']."</td>\n</tr>\n";
}
$out .= "</table>";
echo $out;
?>
Avatar billede detox Nybegynder
12. november 2003 - 00:47 #44
Jeg snuppede formateringen fra din side ;o)
Avatar billede exp Juniormester
12. november 2003 - 08:53 #45
Smider lige et link senere...

Men tror faktisk jeg HAR fået svar...
Se det her:
ww.firewerx.dk/montana/add.php exp/test
Avatar billede exp Juniormester
12. november 2003 - 08:54 #46
Avatar billede exp Juniormester
13. november 2003 - 18:19 #47
http://firewerx.dk/montana/temp.php

jakoba >>
Vil du lige smide et svar, så får du også lige lidt for forsøget...
Avatar billede exp Juniormester
22. november 2003 - 14:17 #48
jakoba >>
Så kan du bare blive fri :-)

I andre >>
Yak for hjælpen :-)
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