Avatar billede bb_maze Nybegynder
06. april 2005 - 20:28 Der er 20 kommentarer og
1 løsning

Sortering af dato

Hejsa

Jeg har et problem med et kalender script. Det har store problemer med sorteringen af dato'en. Jeg vil gerne have den til at stå i formatet 30/12-05 og så skal de 5 kommende begivenheder vises.

MySQL tabellen er oprettet ved hjælp af følgende:
CREATE TABLE `kalender` (
  `id` int(11) NOT NULL auto_increment,
  `dato` date default NULL,
  `begivenhed` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;

Og min php fil(kalender.php) der viser begivenhederne ser således ud:

<html>
<head>
<link href="nystyle.css" rel="stylesheet" type="text/css">

<title>Kalender</title>
</head

><body bgcolor="#f5f5f5">

<div align="center">
    <table border="0" width="450" id="table1">
        <tr>
            <td align='center' valign='top' width='110' bgcolor="#C0C0C0">
            <p align="left"><b>Dato</b></td>
            <td width="340" bgcolor="#C0C0C0" align="center">
            <p align="left"><b>Begivenhed</b></td>
        </tr>
    </table>
</div>


<?php

include "db.php";

$test = mysql_query("select begivenhed,date_format(dato,'%d-%m-%y') as dato FROM kalender ORDER BY dato ASC LIMIT 5");

WHILE($onl = mysql_fetch_array($test)) {

print "<div align='center'><table border='0' width='450' id='table1'><tr><td align='left' valign='top' width='110'> $onl[dato]</td><td align='left' valign='top' width='340'> $onl[begivenhed]</td></tr></table></div>";

}

mysql_close();
?>
</body>
</html>


Et eksempel på sorteringen kan ses her, hvor de 5 kommende begivenheder skulle vises hvis det hele fungerede som det burde: http://safetycar.dk/Kalender/kalender.php

Jeg er lidt i tvivl om det jeg har lagt her i indlæget er nok. Hvis det ikke er nok så siger i bare til.

På forhånd stor tak!

Hygge
Mads
Avatar billede detox Nybegynder
06. april 2005 - 20:35 #1
Prøv således:

$test = mysql_query("select begivenhed, date_format(dato,'%d/%m-%y') as dansk_dato FROM kalender ORDER BY dato DESC LIMIT 5");

WHILE($onl = mysql_fetch_array($test)) {

print "<div align='center'><table border='0' width='450' id='table1'><tr><td align='left' valign='top' width='110'> $onl[dansk_dato]</td><td align='left' valign='top' width='340'> $onl[begivenhed]</td></tr></table></div>";
Avatar billede bb_maze Nybegynder
06. april 2005 - 20:41 #2
Det var tæt på! Du kan se på siden: http://safetycar.dk/Kalender/kalender.php

Den sorterer kun den "forkerte" vej, ellers så er den der vidst.

Hygge
Avatar billede detox Nybegynder
06. april 2005 - 20:42 #3
Så fjerner du bare DESC.
Avatar billede bb_maze Nybegynder
06. april 2005 - 20:45 #4
Har jeg lige prøvet. Men nu opstår det problem at den viser en nyhed fra '87. Det skulle den helst ikke, den skulle gerne vise begivenhederne fra i dag som de ældste. Altså der må ikke være ældre begivenheder end dem fra i dag.
Avatar billede detox Nybegynder
06. april 2005 - 20:47 #5
Prøv:

$test = mysql_query("select begivenhed, date_format(dato,'%d/%m-%y') as dansk_dato FROM kalender WHERE TO_DAYS(dato)>=TO_DAYS(NOW()) ORDER BY dato LIMIT 5");
Avatar billede bb_maze Nybegynder
06. april 2005 - 20:50 #6
Det ser ud til at det virker! Fantastisk. Er det i orden jeg vender tilbage når jeg lige får tid til at gennemteste det hele lidt?

Hygge

P.S. Mange mange tak!
Avatar billede detox Nybegynder
06. april 2005 - 20:51 #7
Klart klart
Avatar billede detox Nybegynder
06. april 2005 - 20:53 #8
Du får lige et svar, hvis dine test forløber tilfredsstillende :O)
Avatar billede bb_maze Nybegynder
06. april 2005 - 20:56 #9
Jeg er lidt stødt på et problem. Nemlig sorteringen i adminmodulet. Denne driller også. Du kan se det her: http://safetycar.dk/Kalender/kalender_view.php

Jeg går ud fra at det er filen kalender_dml.php som har en fejl. Denne fil indeholder følgende:

<?php

// Data functions for table kalender

// This script and data application were generated by AppGini 2.61 on 11-02-2005 at 19:43:48
// Download AppGini for free from http://www.bigprof.com/appgini/download/

function insert()
{
    global $HTTP_SERVER_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_POST_FILES, $Translation;
   
    if(get_magic_quotes_gpc())
    {
        $dato = $HTTP_POST_VARS["datoYear"] . '-' . $HTTP_POST_VARS["datoMonth"] . '-' . $HTTP_POST_VARS["datoDay"];
        $begivenhed = $HTTP_POST_VARS["begivenhed"];
    }
    else
    {
        $dato = $HTTP_POST_VARS["datoYear"] . '-' . $HTTP_POST_VARS["datoMonth"] . '-' . $HTTP_POST_VARS["datoDay"];
        $begivenhed = addslashes($HTTP_POST_VARS["begivenhed"]);
    }
    if($begivenhed== ""){
        echo StyleSheet() . "\n\n<div class=Error>" . $Translation["error:"] . " 'Begivenhed': " . $Translation['field not null'] . "</div>";
        exit;
    }
   
    sql("insert into kalender (dato, begivenhed) values (" . (($dato != "") ? "'$dato'" : "NULL") . ", " . (($begivenhed != "") ? "'$begivenhed'" : "NULL") . ")");
    return mysql_insert_id();
}

function delete($selected_id)
{
    // insure referential integrity ...
    global $Translation;

    sql("delete from kalender where id='$selected_id'");
}

function update($selected_id)
{
    global $HTTP_SERVER_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, $Translation;
   
    if(get_magic_quotes_gpc())
    {
        $dato = $HTTP_POST_VARS["datoYear"] . '-' . $HTTP_POST_VARS["datoMonth"] . '-' . $HTTP_POST_VARS["datoDay"];
        $begivenhed = $HTTP_POST_VARS["begivenhed"];
    }
    else
    {
        $dato = $HTTP_POST_VARS["datoYear"] . '-' . $HTTP_POST_VARS["datoMonth"] . '-' . $HTTP_POST_VARS["datoDay"];
        $begivenhed = addslashes($HTTP_POST_VARS["begivenhed"]);
    }

    sql("update kalender set " . "dato=" . (($dato != "") ? "'$dato'" : "NULL") . ", " . "begivenhed=" . (($begivenhed != "") ? "'$begivenhed'" : "NULL") . " where id='$selected_id'");
}

function form($selected_id = "", $AllowUpdate = 1, $AllowInsert = 1, $AllowDelete = 1)
{
    // function to return an editable form for a table records
    // and fill it with data of record whose ID is $selected_id. If $selected_id
    // is empty, an empty form is shown, with only an 'Add New'
    // button displayed.
   
    global $Translation;
   
    if(!$AllowInsert && $selected_id==""){  return ""; }
   
    $code = "<br><table border=1 bordercolor=navy cellpadding=0 cellspacing=0><tr><td><div class=TableTitle>Detaljeret visning</div></td></tr><tr><td><table>";
    $code .= "\n\t<tr><td colspan=2></td><td rowspan=7 valign=top>";
    if($AllowInsert)
        $code .= "<div><input type=image src=insert.gif name=insert alt='" . $Translation["add new record"] . "'></div>";
   
    // combobox: dato
    $combo_dato = new DateCombo;
    $combo_dato->DateFormat = "dmy";
    $combo_dato->MinYear = 1900;
    $combo_dato->MaxYear = 2100;
    $combo_dato->DefaultDate = date("Y-m-d");
    $combo_dato->MonthNames = $Translation['month names'];
    $combo_dato->CSSOptionClass = 'Option';
    $combo_dato->CSSSelectedClass = 'SelectedOption';
    $combo_dato->NamePrefix = 'dato';

    if($selected_id)
    {
        $res = sql("select * from kalender where id='$selected_id'");
        $row = mysql_fetch_array($res);
        $combo_dato->DefaultDate = $row["dato"];

        $code .= "<br>";
        if($AllowUpdate)
            $code .= "<div><input type=image src=update.gif vspace=1 name=update alt='" . $Translation["update record"] . "'></div>";
        if($AllowDelete)
            $code .= "<div><input type=image src=delete.gif vspace=1 name=delete alt='" . $Translation["delete record"] . "' onclick='return confirm(\"" . $Translation["are you sure?"] . "\");'></div>";
        $code .= "<div><input type=image src=deselect.gif vspace=1 name=deselect alt='" . $Translation["deselect record"] . "'></div>";
    }

    $code .= "</td></tr>";


    // Detail view form fields
/*    $code .= "\n\t<tr><td class=TableHeader valign=top><div class=TableHeader style='text-align:right;'>Id</div></td><td class=TableBody width=300>" . $row['id'] . "&nbsp;&nbsp;</td></tr>";
*/    $code .= "\n\t<tr><td class=TableHeader valign=top><div class=TableHeader style='text-align:right;'>Dato</div></td><td class=TableBody width=300>" . $combo_dato->GetHTML() . "&nbsp;&nbsp;</td></tr>";
    $code .= "\n\t<tr><td class=TableHeader valign=top><div class=TableHeader style='text-align:right;'><b class='Error'>" . $Translation['*'] . "</b> Begivenhed</div></td><td class=TableBody width=300><textarea class=TextBox name=begivenhed cols=50 rows=6>" . htmlspecialchars($row["begivenhed"], ENT_QUOTES) . "</textarea>&nbsp;&nbsp;</td></tr>";

    $code .= "</table></td></tr></table>";

    return $code;
}
?>

Hygge

P.S. Nu hvor det ikke var en del af det oprindelige spørgsmål smider jeg en sjat point mere i puljen :)
Avatar billede detox Nybegynder
06. april 2005 - 22:02 #10
Hvordan ser: 'kalender_view.php' ud?
Avatar billede bb_maze Nybegynder
06. april 2005 - 22:13 #11
Således:
<?php
// This script and data application were generated by AppGini 2.61 on 11-02-2005 at 19:43:48
// Download AppGini for free from http://www.bigprof.com/appgini/download/

    include("./language.php");
    include("./lib.php");
    include("./kalender_dml.php");
   
    $x = new DataList;
    if($HTTP_POST_VARS["Filter_x"] != ""  || $HTTP_POST_VARS['CSV_x'] != "")
    {
        // Query used in filters page and CSV output
        $x->Query = "select kalender.dato as 'Dato', kalender.begivenhed as 'Begivenhed' from kalender";
    }
    else
    {
        // Query used in table view
        $x->Query = "select date_format(kalender.dato,'%d/%m/%y') as 'Dato', kalender.begivenhed as 'Begivenhed' from kalender";
    }
    $x->DataHeight = 150;
    $x->AllowSelection = 1;
    $x->AllowDelete = 1;
    $x->AllowInsert = 1;
    $x->AllowUpdate = 1;
    $x->AllowFilters = 0;
    $x->AllowSavingFilters = 0;
    $x->AllowSorting = 1;
    $x->AllowNavigation = 1;
    $x->AllowPrinting = 1;
    $x->AllowCSV = 1;
    $x->HideTableView = 0;
    $x->RecordsPerPage = 10;
    $x->QuickSearch = 1;
    $x->QuickSearchText = $Translation["quick search"];
    $x->ScriptFileName = "kalender_view.php";
    $x->TableTitle = "Kalender";
    $x->PrimaryKey = "kalender.id";
    $x->ColWidth[] = 150;
    $x->ColWidth[] = 150;
    $x->Render();
   
    include("./header.php");
    echo $x->HTML;
    include("./footer.php");
?>
Avatar billede detox Nybegynder
06. april 2005 - 22:40 #12
Ja, det er jo så ikke helt til at vide, da du bruger en Class fil og vi jo ikke kender metoden: Query() (eller 'DataList' klassen i det hele taget).
Avatar billede bb_maze Nybegynder
06. april 2005 - 22:47 #13
Ok. Hvilken fil vil du tro, jeg kan finde det information du skal bruge, i?
Avatar billede detox Nybegynder
06. april 2005 - 23:23 #14
Det er meget svært at svare på, da det er et mix af php, MySQL, javascript og forskellige include sider med bl.a. klasser.
Avatar billede bb_maze Nybegynder
06. april 2005 - 23:28 #15
Jeg tror jeg fandt det du søger! Det var i datalist.php. Da der er en del linie har jeg lagt det ind på denne side: http://pastebin.dk/index.php?show=391

Hygge
Avatar billede detox Nybegynder
06. april 2005 - 23:34 #16
Ja, der er jo over 1000 linjer ;O)
Det har jeg altså ikke lige noget bud på, men jeg vil tro det muligvis kan løses i samme stil som før, ved at give det formaterede datoudtræk et andet navn end 'Dato'.
Avatar billede bb_maze Nybegynder
06. april 2005 - 23:38 #17
Ok, fair nok. Er det i orden du får de 100 point, og vi så holder spørgsmålet åbent lidt endnu hvis nu der var en der havde svar på det sidste?
Avatar billede detox Nybegynder
06. april 2005 - 23:43 #18
Mit bedste bud er at formatere udtrækket så det kan sorteres fx:

        // Query used in table view
        $x->Query = "select date_format(kalender.dato,'%Y %m-%d') as 'Dato', kalender.begivenhed as 'Begivenhed' from kalender";
Avatar billede bb_maze Nybegynder
06. april 2005 - 23:58 #19
Nøj, det var tæt på :D Det virker når man bruger din datoformatering, men jeg vil gerne have %d-%m %Y men når jeg bruger denne sorterer den efter dag som det første, og så måned.

Du må undskylde at jeg er så besværlig...
Avatar billede detox Nybegynder
07. april 2005 - 00:55 #20
Du kan prøve at eksperimentere med at kalde 'Dato' noget andet, men jeg er ikke sikker på det hjælper.
Avatar billede bb_maze Nybegynder
21. april 2005 - 21:20 #21
Nåh, lad os lukke :D Mange mange tak for hjælpen. Du får alle point, detox ;)

Hygge

P.S. God bededagsferie :)
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