14. december 2003 - 21:34Der er
31 kommentarer og 1 løsning
Vurdering ønskes af min kode (Book-Mark system)
Hej eksperter.
Jeg har brugt dagen i dag på, at lave et system, som jeg kan opbevare min bogmærker/favorites/bookmarks i.
Jeg har lavet dette lille projekt af flere grunde. Dels for at have noget, som jeg kunne bede jer om at vurdere (og fejlrette, så jeg bliver bedre til PHP/MySQL), og dels fordi jeg selv skulle bruge systemet. Yderligere har jeg tænkt mig at frigive den endelig version til fri download.
Jeg vil gerne bede jer kigge på koden der ligger bag, og give mig input til forbedringer eller fejlrettelser.
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
- Smid filerne op i en mappe på dit webhotel - Rediger i filen config.php, så den passer til dit webhotel. - Kør filen configure.php fra din browser (dette vil sætte databasen op)
Jeg har kigget lidt på det og testet lidt. Der er bestemt nogle gode aspekter. Fx kan jeg godt lide at den opretter et par enkle og velfungerende tabeller i min database uden nogen dikkedarer. Det er dog svært at teste den ordentlig, da der dukker en masse notices op rundt omkring, ved variabler og indeks der ikke er sat. Bare lige et eksempel: linie 27 i maneger.php: unset($name,$desc,$cate,$addr,$func); og så bruger du senere variablerne i en form?
Se unset'erne er netop en af de ting, jeg ikke fik kigget færdig på. Den blev faktisk brugt til at fjerne $id på et tidspunkt. Dette blev gjort for, at punktet "Delete category" ikke blev vist efter at en kategori var blevet slettet.
.. skal siges at jeg også har fundet nogle fejl selv. Men det var primært HTML fejl. Det skal jo gerne følge W3C standarden for både HTML og CSS. Og det skulle den gøre nu :) Har også fået tilføjet logoer og lidt mere teksten under "About"
Det med de mange notices skyldes selvfølgelig at jeg kører med E_ALL error_reporting. Den nemme, men mindre kønne løsning er at sætte: error_reporting(E_ALL ^ E_NOTICE); øverst på dine sider. Den "rigtige" måde at undgå dem på er fx: $name = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ""; istedet for: $name = $_REQUEST["name"];
Ja - delvist. Nogle af mine variabler kommer fra URL'erne (fx. når der skal slettes/redigeres et link). Andre gange er den fra en form.
Det er en ting jeg ofte bliver spurgt over, og jeg undre mig en egentlig en smule. Er det en dårlig måde at gøre det på ? Folk siger fx. at jeg skal bruge $_GET i stedet.
Så fik jeg rettet nogle fejl. Jeg tror at den er ved at blive helt god nu.
Jeg har ryddet lidt op i mine "Unset"'er. Jeg bruger dem bla. fordi, jeg ikke vil have, at der ligger noget i min form efter at jeg har submittet det, og det er blevet tilføjet til databasen.
Yderligere bruger jeg det under "posts.php", for at tømme $id. Dermed vises delete-linket ikke mere.
Endelig har jeg rettet en del dumme fejl. Men der er muligvis flere :-)
Jeg har ikke kigget på muligheden for at benytte noget andet end $_REQUEST["var"]; Det hører jeg gerne mere om.
Det med error_reporting(E_ALL ^ E_NOTICE); og $name = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ""; har jeg heller ikke fået kigget på endnu.
Jeg har kigget lidt på din nyeste version. Den fungerer for så vidt udemærket, når jeg tilføjer: error_reporting(E_ALL ^ E_NOTICE); øverst på siderne. Det kunne sikkert være nok at tilføje den i 'config.php', da den bliver kaldt fra de andre sider. Der er et par småting omkring tabellerne. Jeg synes fx det kunne være en idé at lave "bookmarks.address" og "categories.category" UNIQUE. Så undgår man at det samme link eller kategori bliver lagt ind flere gange (hvilket fx er tilfældet hvis man reloader siden). Du vil så skulle bruge: "INSERT IGNORE INTO tabelnavn osv..." istedet, når der tilføjes nyt til tabellerne.
En anden ting: på 'posts.php' viser den navnet på den der har postet linket, samt beskrivelsen (når man holder musen over navnet). Det kunne være rart at se selve linket osse.
- AutoLogin tilføjet (angives i config.php, og "behandles" i index.php).
- Ved klik på en kategori, vises kategori-navnet nu over listen med links. Dermed kan man lettere overskue, hvilken kategori man befinder sig i. Yderligere vises også en beskrivelse af kategorien, hvis en sådan er angivet
- Ved slet af bookmark udskrives navnet på bookmark'en, så man ikke risikerer at slette den forkerte.
- Det er blevet muligt at redigere i kategorierne (kategori-navn og beskrivelse). Dette har betydet at edit.php er lavet en hel del om.
Systemet er så vidt jeg kan se, ved at opfylde de krav jeg satte til det i starten. Jeg håber derfor at du/I vil tage endnu et kig på filerne, og se om jeg har fået smidt en fejl ind et eller andet sted. Jeg kan ikke umiddelbart få øje på nogen.
Efterfølgende må det så være tid til en Final Release :)
Jeg havde misforstået det med navnet. Jeg brugte sådan en autofill ting som lagde mit navn i feltet istedet for et navn på linket. Det med autologon er en fin feature. Måske kunne det laves med en lille checkbox ved første login, med 'husk mig fremover'. Her kan du faktisk spare et kald til din database (search.php):
$hits = mysql_query("SELECT COUNT(*) AS total FROM bookmarks WHERE name LIKE '%$word%' OR description LIKE '%$word%'") or die(mysql_error()); $alto = mysql_result($hits,0);
$return = mysql_query("SELECT * FROM bookmarks WHERE name LIKE '%$word%' or description LIKE '%$word%' ORDER BY name LIMIT $from,$max") or die(mysql_error());
Kunne laves sådan:
$return = mysql_query("SELECT * FROM bookmarks WHERE name LIKE '%$word%' or description LIKE '%$word%' ORDER BY name LIMIT $from,$max") or die(mysql_error()); $alto = mysql_num_rows($return);
Ellers alt i alt et fint lille system du har fået banket op der ;o)
Så burde det være absolut sidste version. De sidste fejl skal rettes hvis der er nogen, og så udgiver jeg systemet på div. script-sider.
- Jeg har add'et en logout-funktion (logout.php) - index.php er ændret så den passer til auto-logon - check.php er ændret og optimeret - config.php er ændret en smule - menu.php har fået tilføjet punktet "logout", der kun vises når man er logget ind. - Search.php er optimeret (MySQL - forslag fra detox)
Jeg skulle ikke mene, at der er foretaget ændringer i de resterende filer.
Jeg er ked af at sige at den rettelse jeg foreslog i 'search.php' nu giver problemer når der er flere resultater en $max (fra config.php). Så jeg bliver nødt til at foreslå dig at vende tilbage til din oprindelige måde at finde antal hits på:
$alto = mysql_result(mysql_query("SELECT count(*) FROM bookmarks WHERE name LIKE '%$word%' or description LIKE '%$word%'"),0);
En lille detalje er, hvis man søger på "" (et tomt felt) siger den fx: "Search for gave 7 hits". Derfor vil jeg foreslå at du enten fjerner muligheden for at søge på et tomt felt eller ændrer output til fx: echo "<div class=\"text\">Search for \"$word\" gave $alto hits</div>"; så man fx får: "Search for "" gave 7 hits". Ellers synes jeg det fungerer fint (særlig efter 10'øren ang. navnet faldt). m.v.h. c",)
Hej igen, detox. Lækkert at du kommentere så meget :)
Jeg ser lige på det med MySQL'en senere i dag. Jeg har for øvrigt fundet et andet problem, som du nok også har opdaget, da du medvirker i den diskution også. Nemlig at jeg får problemer ved brug af "-tegn. Dette vil jeg ligeledes se på i dag.
Så er koden endnu engang blevet forbedret - og dermed risiko for nye fejl.
Det er primært funktionerne stripslashes(), nl2br() og htmlentities() som jeg nu har gjort brug af. Dette er for at sikre, at det korrekte indhold fra databasen blev udskrevet, og at folk ikke pludselig kom frem til nogle mærkelige resultater i deres input-felter efter submit af data.
Jeg håber at du/i vil gennemgå koden endnu engang.
Jeg kan ikke finde nogle fejl i de forskellige funktioner. Jeg tror din brug af: stripslashes(), nl2br() og htmlentities() er helt fin. Spørgsmålet er om nl2br() gør nogen forskel i det her tilfælde, men den skader jo ikke. Personligt har jeg forsøgt mig med en lille tilføjelse, der gør at kategorien osse bliver forvalgt i 'edit.php'. Det synes jeg nemlig er lidt rarere ;o). Jeg har brugt:
while ($cat = mysql_fetch_array($categories)) { echo "<option value=\"".$cat["id"]."\""; if ($cat["id"] == $bookmark["category"]) echo " selected='selected'"; echo ">".nl2br(htmlentities($cat["category"]))."</option>"; }
og det fungerer lige efter hensigten. Ellers kan jeg ikke finde andet jeg vil ændre c",)
Hej Detox. Det lyder helt perfekt. Jeg kigger lige på dit forbedringsforslag, når jeg kommer hjem fra juleindkøbene. Og så skal jeg jo gerne have et svar. Du har været yderst behjælpelig. Tak for det :-)
Nej, du har forresten ret i, at nl2br ikke har nogen nytte her. Man kan jo ikke lave tekst med linieskift. Så den fjerner jeg da igen. Godt set :-)
Hvad angår automatisk valg af kategori under Edit, så giver jeg dig ret. Den funktion manglede faktisk. Var bare for doven til at tilføje den. Men nu har jeg ingen undskyldning for ikke at gøre det, så det gør jeg :)
Og så vil jeg gerne bede dig om et svar. Be be :-)
Btw - til interesserede. Hvis nogen vil have systemet, så hold øje med www.powerzone.dk - her vil mine fremtidige kreationer være tilgængelige. Jeg skal dog liige have et nogen lunde site op at stå først.
Indtil videre kan den tilrettede og forhåbentlig fejlfrie version hentes her : www.powerzone.dk/bm.zip
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.