Avatar billede ellert Nybegynder
22. december 2002 - 16:29 Der er 13 kommentarer og
2 løsninger

[PHP] Kan dette gøres smartere?

Hej!

Kan dette ikke gøres på en smartere måde?:

<H1>DENNE MÅNED</H1>
Mærkedage:
<TABLE class="daysTABLE" cellspacing="2" cellpadding="1">
<?php
    include("conn_MySQL.inc");

    $q = mysql_query("SELECT * FROM calendar WHERE month='$month' && year='$year' && category='1' ORDER BY day ASC", $db);
    while ($r = mysql_fetch_array($q)) {

    print "<TR>";
    if (isset($_SESSION['admin']) && $_SESSION['admin'] == "1") {
        print "<TD width=\"10\"><A href=\"POPUP_ret-slet.php?action=slet&id=".$r['id']."\">[SLeT] </A></TD>";
        print "<TD width=\"10\">";?><a href="java script:PopWin('POPUP_ret-slet.php?action=ret&id=<?php print $r['id']?>');"><?php print"[ReT] </A></TD>";
    }
    print "<TD class=\"dayTITLE\" width=\"200\">d. ".$r['day']." - ".$r['title']."";
    print "<TD class=\"dayMESS\" colspan=\"2\">".$r['mess']."</TD></TR>";
}

?>
</TABLE>

<BR><BR>

Skolen:
<TABLE class="daysTABLE" cellspacing="2" cellpadding="1">
<?php
    include("conn_MySQL.inc");

    $q = mysql_query("SELECT * FROM calendar WHERE month='$month' && year='$year' && category='2' ORDER BY day ASC", $db);
    while ($r = mysql_fetch_array($q)) {

    print "<TR>";
    if (isset($_SESSION['admin']) && $_SESSION['admin'] == "1") {
        print "<TD width=\"10\"><A href=\"POPUP_ret-slet.php?action=slet&id=".$r['id']."\">[SLeT] </A></TD>";
        print "<TD width=\"10\">";?><a href="java script:PopWin('POPUP_ret-slet.php?action=ret&id=<?php print $r['id']?>');"><?php print"[ReT] </A></TD>";
    }
    print "<TD class=\"dayTITLE\" width=\"200\">d. ".$r['day']." - ".$r['title']."";
    print "<TD class=\"dayMESS\" colspan=\"2\">".$r['mess']."</TD></TR>";
}

?>
</TABLE>

<BR><BR>

Andet:
<TABLE class="daysTABLE" cellspacing="2" cellpadding="1">
<?php
    include("conn_MySQL.inc");

    $q = mysql_query("SELECT * FROM calendar WHERE month='$month' && year='$year' && category='3' ORDER BY day ASC", $db);
    while ($r = mysql_fetch_array($q)) {

    print "<TR>";
    if (isset($_SESSION['admin']) && $_SESSION['admin'] == "1") {
        print "<TD width=\"10\"><A href=\"POPUP_ret-slet.php?action=slet&id=".$r['id']."\">[SLeT] </A></TD>";
        print "<TD width=\"10\">";?><a href="java script:PopWin('POPUP_ret-slet.php?action=ret&id=<?php print $r['id']?>');"><?php print"[ReT] </A></TD>";
    }
    print "<TD class=\"dayTITLE\" width=\"200\">d. ".$r['day']." - ".$r['title']."";
    print "<TD class=\"dayMESS\" colspan=\"2\">".$r['mess']."</TD></TR>";
}

?>
</TABLE>


???

På forhånd tak!
:)

// eLLERT
// www.detersmart.dk/
Avatar billede jelzin101 Praktikant
22. december 2002 - 16:34 #1
du bedes for fremtiden afholde dig fra at benytte et link til en side som signatur - læs www.exp.dk/regler.phtml
Avatar billede ellert Nybegynder
22. december 2002 - 16:39 #2
okay ... Har jeg overset :(

men tilbage til spørgsmålet! :)
Avatar billede cpfrande Nybegynder
22. december 2002 - 16:48 #3
Hej !

Gøres på en smartere måde?
Vi aner jo ikke engang hvad scriptet er for noget - så hvordan skal vi kunne rediger i det? Formålet med scriptet fx ?
Hvad du vil have det skal kunne osv osv...

Regards,
FrandE
Avatar billede ellert Nybegynder
22. december 2002 - 16:49 #4
Scriptet virker fint!
Det er bare, om jeg så må sige, nederen, at hvis jeg skal rette noget, skal jeg rette det samme 3 steder :/
Avatar billede ellert Nybegynder
22. december 2002 - 16:50 #5
måske ku jeg bruge noget function etellerandet() -noget
Avatar billede ellert Nybegynder
22. december 2002 - 16:51 #6
det bruges her:
http://212.10.150.201/e-Calendar/
(kan kun ses mens jeg er hjemme)
Avatar billede _darkstar_ Nybegynder
23. december 2002 - 10:02 #7
Du bør:

* Skrive en funktion som returnerer true hvis man er administrator, og flytte al den kode som checker det til denne funktion.
* Skrive en funktion som henter data fra kalenderen og returnerer det i nogle arrays (med mindre at der er tale om meget data.
* Put funktionerne i en separat include-fil, som du inkluderer fra de forskellige scripts.
* Overvej at benytte en eller anden form for templates.
Avatar billede ellert Nybegynder
23. december 2002 - 14:01 #8
* Skrive en funktion som henter data fra kalenderen og returnerer det i nogle arrays (med mindre at der er tale om meget data. <-- Vil du uddybe? Måske med lidt kode?!
Avatar billede ellert Nybegynder
23. december 2002 - 23:00 #9
<?
    // MYSQL connect
    function dbconnect() {
        $db = mysql_connect("localhost", "detersmart_dk", "umhq00fb");
        mysql_select_db("detersmart_dk",$db);
    }

    // Funktion til at vise tabeller
    function category($func_catNUMBER,$func_catTITLE) {
        print "
        ".$func_catTITLE.":
        <TABLE class=\"daysTABLE\" cellspacing=\"2\" cellpadding=\"1\">
        ";
        dbconnect();
            $q = mysql_query("SELECT * FROM calendar WHERE month='$month' && year='$year' && category=$func_catNUMBER ORDER BY day ASC", $db);
            while ($r = mysql_fetch_array($q)) {
        print "<TR>";
            if (isset($_SESSION['admin']) && $_SESSION['admin'] == "1") {
                print "<TD width=\"10\"><A href=\"POPUP_ret-slet.php?action=slet&id=".$r['id']."\">[SLeT] </A></TD>";
                print "<TD width=\"10\">";?><a href="java script:PopWin('POPUP_ret-slet.php?action=ret&id=<?php print $r['id']?>');"><?php print"[ReT] </A></TD>";
            }
            print "<TD class=\"dayTITLE\" width=\"200\">d. ".$r['day']." - ".$r['title']."";
            print "<TD class=\"dayMESS\" colspan=\"2\">".$r['mess']."</TD></TR>";
        }
        print "</TABLE>";
    }


?>



??????????

<?php category('1','Mærekedage');?>


???????????

// eLLERT
// detersmart.dk
Avatar billede ellert Nybegynder
25. december 2002 - 11:59 #10
func.inc ser sådan her ud nu:
<?
    function dbconn() {
        mysql_connect("localhost", "detersmart_dk", "umhq00fb");
        mysql_select_db("detersmart_dk");
    }


    // Funktion til at vise tabeller
    function category($func_catNUMBER,$func_catTITLE) {

    print"    <TABLE class=\"daysTABLE\" cellspacing=\"2\" cellpadding=\"1\">";
        dbconn();
        $q = mysql_query("SELECT * FROM calendar WHERE month='$month' && year='$year' && category='$func_catTITLE' ORDER BY day");
            while ($r = mysql_fetch_array($q)) {
        print "<TR>";
            if (isset($_SESSION['admin']) && $_SESSION['admin'] == "1") {
                print "<TD width=\"10\"><A href=\"POPUP_ret-slet.php?action=slet&id=".$r['id']."\">[SLeT] </A></TD>";
                print "<TD width=\"10\">";?><a href="java script:PopWin('POPUP_ret-slet.php?action=ret&id=<?php print $r['id']?>');"><?php print"[ReT] </A></TD>";
            }
            print "<TD class=\"dayTITLE\" width=\"200\">d. ".$r['day']." - ".$r['title']."";
            print "<TD class=\"dayMESS\" colspan=\"2\">".$r['mess']."</TD></TR>";
        }
        print "</TABLE>";
print "<BR><BR>";
}

?>

*********************************

og kaldet til funk.:

<?php category('1','Mærekedage');?>
Avatar billede ellert Nybegynder
26. december 2002 - 15:05 #11
"exp.dk - Hjælp? Udelukket!"
Avatar billede ellert Nybegynder
27. december 2002 - 12:06 #12
Så gider jeg ikke ha de point flyvende!
Avatar billede _darkstar_ Nybegynder
27. december 2002 - 20:08 #13
Din funktion laver alt for mange ting på en gang. Du skal splitte den op i nogle flere, små bidder, som gør hver deres ting. F. eks.

* En funktion som opretter forbindelsen til databasen hvis den ikke allerede er oprettet (det er din funktion ved navn dbconn, dog med den undtagelse at den IKKE skal oprette forbindelsen igen, hvis den allerede er oprettet).
* En funktion som henter data ud af databasen og returnerer det i nogle arrays (det er alt databasehalløjet fra din funktion ved navn category).
* En funktion som tager de arrays og skriver dem ud (det er alt print-halløjet fra din funktion ved navn category).

Og en vigtig ting: du må ALDRIG i en funktion referere til variable som er blevet oprettet udenfor funktionen. Hvis du har brug for nogle bestemte værdier  "udefra", skal de overføres som parametre til funktionen.

Linien
mysql_query("SELECT * FROM calendar WHERE month='$month' && year='$year' && category='$func_catTITLE' ORDER BY day");

Er et eksempel på at du ikke overholder den regel. Hvis du bliver ved med det risikerer du at få følgende problemer:

1) du mister overblikket over din egen kode.
2) debugging er besværligt.
3) de funktioner du skriver, vil have en tendens til ikke at kunne bruges til særligt meget.

Tænk på at den funktion som skriver ud, bør kunne udskrive andre ting som kommer fra databasen. Hvis du så ønsker at ændre layoutet, skal du kun gøre det ét sted.
Avatar billede _darkstar_ Nybegynder
27. december 2002 - 20:09 #14
P.S. Du har stadigvæk ikke lavet en separat funktion til at checke om du er administrator. På med vanten!
Avatar billede ellert Nybegynder
27. december 2002 - 21:07 #15
hehe - tak _darkstar_ ... du gav mig blod på tanden! :) Jeg vidste heller ikke det, med at jeg ikke må bruge variabler defineret udenfor funktionen... :)
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