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
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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>";
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>";
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>";
11. november 2003 - 20:49
#4
de burde lave det så man kan rette sine posts her på eksperten :)
exp
Juniormester
11. november 2003 - 20:49
#5
11. november 2003 - 20:53
#6
oh ... while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
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']);
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
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>"; }
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>";
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)
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>";
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. :(
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>"; ?>
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>
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>";
11. november 2003 - 21:52
#18
Det ser mærkeligt ud. Jeg kan ikke se, hvor de kommer fra?
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 :-)
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>"; ?>
exp
Juniormester
11. november 2003 - 22:12
#21
Jamen det er jo smukt! Kast lige alle et svar :-)
11. november 2003 - 22:13
#22
c",)
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)
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>";
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
11. november 2003 - 22:45
#26
^ ^ ^ ^ swaxi ->
11. november 2003 - 22:47
#27
swaxi -> Og den laver kun den sidste overskrift, hvis der er flere med samme dato og sprog.
11. november 2003 - 22:48
#28
swaxi -> Undskyld, den skriver flere overskrifter, men uden <br />.
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; ?>
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...?!?
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... :-)
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"
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)
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']."'"
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>";
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?
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
exp
Juniormester
11. november 2003 - 23:53
#38
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?
exp
Juniormester
12. november 2003 - 00:05
#40
nopes
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.
12. november 2003 - 00:12
#42
Kunne du lave et link til koden?
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; ?>
12. november 2003 - 00:47
#44
Jeg snuppede formateringen fra din side ;o)
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
exp
Juniormester
12. november 2003 - 08:54
#46
exp
Juniormester
22. november 2003 - 14:17
#48
jakoba >> Så kan du bare blive fri :-) I andre >> Yak for hjælpen :-)
Vi tilbyder markedets bedste kurser inden for webudvikling