Swecoder.se
| ASP.NET | PHP | XHTML | CSS |
 
Hem Presentation Projekt Blogg Anlita Mig Nerladdningar Länkar Kontakt
 
 
 
Recaptcha

Har de senaste dagarna arbetat med en gästbok åt VillaboCilla.se, en kund till Webmind.se. Det är i det stora hela en rätt så enkel gästbok med lite smilies och så. Men för att skydda mot spam som idag är ett stort problem så integrerade jag en komponent som heter Recaptcha. Dom har en asp.net-plugin som går att hitta här.

Systemet fungerar så att man måste ange två stycken ord som visas som renderad grafik så att inte bottar kan läsa dem. Anges dessa ord "lite" fel så går det ändå igenom men annars så får man ett felmeddelande och två nya ord att ange. När rätt ord anges så går formulärets validering igenom och inlägget postas.

Har även implementerat så att ett mail skickas ut vid nya inlägg i gästboken samt att admin måste godkänna inlägg innan dessa visas.

Kommentera | Kommentarer: 0 | 2009-07-17 11:02:01

Importera MySQL i MSSQL

Ett projekt jag jobbar nu med kräver att jag bland annat måste importera över befintlig data ifrån en MySQL databas till en MSSQL databas. Detta visade sig vara extremt klurigt eftersom MySQL databasen inte tillåter externa uppkopplingar. Jag försökte först göra en SQL dump från phpMyAdmin och ändra massor i den filen då syntaxen för MSSQL är ganska annorlunda. Detta fick jag aldrig att fungera och för att få det att fungera skulle jag nog ha fått lagt ner mängder med tid på det.

Hittade efter mycket om och men en lösning här. Jag började med att lägga in MySQL dumpen i min egen MySQL-server. Efter det laddade jag ner ODBC-drivare för MySQL-versionen jag kör här. Sedan körde jag följande kod i en query i SQL Management Studio.

EXEC master.dbo.sp_addlinkedserver
    @server = N´MYSQL´,
    @srvproduct=N´MySQL´,
    @provider=N´MSDASQL´,
    @provstr=N´DRIVER={MySQL ODBC 5.1 Driver}; SERVER=127.0.0.1; DATABASE=db_name; USER=user; PASSWORD=pass; OPTION=3´

Enda man behöver ändra i koden ovan är adressen till servern, databasnamnet (i MySQL), användarnamnet och lösenordet. Detta skapar en ODBC connection mellan MSSQL och MySQL så att MSSQL kan importera data ifrån MySQL direkt. Man behöver inte ens skapa tabellerna utan allt följer med.

Efter det så kör man följande kod för varje tabell man vill kopiera över.

SELECT * INTO [target_mssql_db].dbo.[target_mssql_table]
FROM openquery(MySQL, ´select * from mysql_db_name.mysql_tablename´)

I denna kod måste man ändra target_mssql_db, target_mssql_table, mysql_db_name och mysql_tablename så de stämmer. Tabellerna behöver alltså inte finnas i MSSQL redan utan de skapas med namnet man sätter i target_mssql_table.

Det enda jag fick lite problem med var fält i MySQL av typen date. De stod som Not Null i MySQL och jag fick sätta om dem som Null för att kunna importera dem. Vet inte varför det blev så men det gjorde inget i alla fall.

OBS! I all kod ovan måste du ersätta ´ med SQLs tecken. Jag kan inte spara ner detta tecken i databasen eftersom SQL då tolkar koden.

Kommentera | Kommentarer: 0 | 2009-04-29 17:49:02

Statistikapplikationen

Arbetet fortlöper med statistikapplikationen. Idag har jag lekt runt lite med utseendet på den och tänkte mest posta en screenshot så ni får en liten ide om hur den ser ut och fungerar.

(Klicka för större bild)

Kommentera | Kommentarer: 0 | 2009-04-16 19:06:27

Google & sökmotoroptimering...

Måste säga att detta är lite komiskt. Jag har inte ens tänkt tanken ännu på att försöka optimera mina resultat på Google. Ändå så har ett flertal besökare hittat hit genom att söka på olika saker som gett träffar i min blogg. Detta är definitivt skojj och kommer att medföra att jag kommer att blogga desto mer om asp.net och annat vad gäller webbdesign och webbprogrammering.

Som jag nämnt på flera andra ställen på hemsidan så jobbar jag på timanställning just nu åt webbyrån
Webmind.se i Göteborg. Detta är ju lite av ett drömjobb för mig då jag älskar programmering och att skapa saker. De flesta projekt jag är involverad i nu kommer via Webmind.

Just nu håller jag på i slutfasen av ett par projekt åt Webmind där det är mest att vänta och se att allt fungerar. Men några nya projekt är på gång med och jag kommer att omnämna dessa på sidan Projekt när de är igång.

Kommentera | Kommentarer: 0 | 2009-04-07 16:45:03

Nästlad Repeater

I vissa fall kan man behöva använda sig utav en repeater inuti en annan repeater. Ett exempel på detta är om man har en länksamling i databasen där länkarna ligger i kategorier. I detta exempel har man då alltså en tabell för kategorierna och en tabell för själva länkarna. Om man vill lista dessa på en och samma sida med kategorier och tillhörande länkar så måste man använda sig av nästlade repeaters.

Denna kod lägger man i codebehind-filen

protected void Page_Load(object sender, EventArgs e)
    {
        string sql = "select cat_id, cat_name from link_categories order by cat_name";
        SqlConnection myConnection = new SqlConnection(ConfigurationManager.AppSettings["databas"].ToString());
        SqlCommand myCommand = new SqlCommand(sql, myConnection);
        myConnection.Open();
        SqlDataReader dr = myCommand.ExecuteReader();
        repeater.DataSource = dr;
        repeater.DataBind();

        foreach (RepeaterItem repeaterItem in repeater.Items)
        {
            SqlConnection myConnection2 = new
            sqlConnection(ConfigurationManager.AppSettings["databas"].ToString());
            SqlCommand myCommand2 = new SqlCommand("select * from clickstats where cat_id=@cat_id",
            myConnection2);
            myCommand2.CommandType = CommandType.Text;
            myConnection2.Open();
            myCommand2.Parameters.Add("@cat_id", SqlDbType.Int).Value =
            (HiddenField)repeaterItem.FindControl("hiddenCatID")).Value;
            SqlDataAdapter mySqlAdapter = new SqlDataAdapter(myCommand2);
            DataSet myDataSet = new DataSet();
            mySqlAdapter.Fill(myDataSet);
            ((Repeater)(repeaterItem.FindControl("repeater2"))).DataSource = myDataSet;
            ((Repeater)(repeaterItem.FindControl("repeater2"))).DataBind();
        }
        myConnection.Close();
    }

Man har alltså två stycken repeaters i varandra på .aspx-sidan. Man lägger repeater2 i repeater1´s <ItemTemplate>. I repeater1´s <ItemTemplate> måste man även lägga <asp:HiddenField ID="hiddenCatID" runat="server" Value=´<%#DataBinder.Eval(Container.DataItem, "cat_id") %>´ /> för att repeater2´s databas-förfrågan skall veta vilket cat_id den skall hämta länkarna för.


Kommentera | Kommentarer: 0 | 2009-04-07 14:32:19

Statistikapplikationen

Har fått lite tid över nu och har då jobbat lite mer på min statistikapplikation. Just nu håller jag på att integrera klickstatistik vilket innebär att man anger den riktiga länken till en sida man vill länka och sedan får man en fejkad länk tillbaka. Den fejkade länken leder till en sida som registrerar varje klick på länken och sedan omdirigerar den besökaren till den riktiga sidan.

Detta fungerar inte bara på länkar utan även bilder, mailto-länkar, nerladdningar...ja allt som man kan tänka sig att länka till. Klickstatistiken registrerar förutom klick även första klick och senaste klick.

Har även skapat ett par admin-sidor nu för att lägga till Klickstat-Kategorier och själva Länkarna.

Än finns det massor med saker man kan göra på statistikapplikationen, men det känns som den börjar bli ganska fullständig i alla fall.


Kommentera | Kommentarer: 0 | 2009-04-07 14:24:46

PHP & MySQL

Har nu även installerat stöd för MySQL och PHP på min development-server. MySQL var aningen trixigt att få igång i Windows 2003. Säkerhetsinställningarna ville inte riktigt komma överens med 2003´an av någon anledning. Men efter ett tag fick jag till det. Det verkar som det hade att göra med att jag försökte lägga katalogen med databaser på en annan partition än windows-partitionen. När jag lät bli att ändra den inställningen så lyckades installationen. Dock hade jag velat ha databaserna på min webb-partition för att slippa risken att förlora dem vid en ominstallation. Men jag får tänka på det antar jag och göra backups ibland.

Jag använder ju mest MSSQL som läget är eftersom det känns naturligast ihop med ASP.NET. Men det kan vara bra att kunna utvecka mot båda delarna. Och de php projekt jag håller på med använder ju MySQL med så jag behöver båda. 

Kommentera | Kommentarer: 0 | 2009-04-02 20:04:33

Fotogalleri

Har börjat skapa ett fotogalleri i asp.net som kommer att byggas på med mer och mer funktionalitet allt eftersom.

Hitills har jag skapat funktioner för att skapa, ändra och ta bort Album. Skapat en funktion för att ladda upp 1-5 foton i taget med beskrivning till varje. När foton laddas upp så beskärs de ner till 1024x768 ifall att de är större än så samt att en thumbnail på 120px skapas.

Har även skapat själva galleriet som visar albumen och fotona i varje album. Fotona visas självklart med hjälp av
Lightbox 2.

Håller nu på med en funktion för att besökare skall kunna skicka in bidrag till fotoalbumet som sedan kan godkännas av en admin och läggas in i valfritt album.

Kommentera | Kommentarer: 0 | 2009-04-02 12:37:21

Statistikapplikationen

Har nu kommit en bit längre med min statistikapplikation. Har byggt ett antal sidor för att visa informationen som sparats ner om en besökare. Bland annat kan man se unika besökare, alla besök, webbläsare, operativsystem, vilket land ett ip tillhör och unika besökare per land. Känner att denna app kommer att utvecklas under en lång tid framöver med förändringar och tillägg vilket är skojj.

Som läget är just nu så visar statistiken samtlig information vilket gör att jag inte vill publicera den för alla att se ännu. Men jag kommer att göra en lite-version senare där jag kommer dölja IP och lite annat.

Vill även publicera en kodsnutt som var väldigt användbar för mig. Jag använder ip-to-country-databasen för att spåra vilket land ett ip tillhör och för att göra detta så måste ett IP-nummer räknas om till ett tal. Detta tal kan sedan jämföras mot databasen för att se vilket land IP tillhör. Nedan följer en class som jag använt för omräkningen.

public double IPAddressToNumber(string IPaddress)
{
   int i;
   string [] arrDec;
   double num = 0;
   if (IPaddress == "")
   {
      return 0;
   }
   else
   {
      arrDec = IPaddress.Split(´.´);
      for(i = arrDec.Length - 1; i >= 0 ; i--)
      {
         num += ((int.Parse(arrDec[i])%256) * Math.Pow(256 ,(3 - i )));
      }
      return num;
   }
}


För att använda den gör man följande...

ip = Request.ServerVariables["REMOTE_ADDR"];
string ipnumber = IPAddressToNumber(ip);


Man kan ju även sätta ip=Request.QueryString("ip"); eller ta värdet från form om man vill kunna skriva in ett ip att kontrollera.

Sedan för att kontrollera och ta fram landet ip tillhör kan man köra följande sql-förfrågan.

string sql = "select country_code2, country_name from iptocountry where ip_from <= " +ipnumber + " and ip_to >= " + ipnumber;

Kommentera | Kommentarer: 0 | 2009-03-22 18:23:57

ASP.NET Calendar Control

Som ni kan se har jag lagt till en kalender i bloggen. Den är i grunden en drag-and-drop control i Visual Studio. Efter att ha lagt in den har jag gjort en del modifikationer på den.

Tanken är ju att bloggen skall användas till att bland annat posta kod-lösningar och jag tänkte dela med mig av en av de lösningar jag använt på kalendern.

Dels så har jag lagt in en funktion som gör att dagar som har inlägg markeras med blå text. Detta görs genom följande modifikationer i cs-filen.

protected void Page_Load(object sender, EventArgs e)
{
  this.Calendar1.DayRender += new

  System.Web.UI.WebControls.DayRenderEventHandler(this.Calendar1_DayRender);
}

private void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
  //Datumet som just nu renderas

  string currentdate = e.Day.Date.ToShortDateString(); 
  //Här kan man kolla om currentdate stämmer mot ett visst datum eller
  //mot ett inläggs datum i databasen
  //men jag väljer att kontrollera mot ett fast datum för detta exempel
  if(currentdate == "2009-03-18")
  {
    //Färgar texten blå om datumet är 2009-03-18
    e.Cell.ForeColor = ColorTranslator.FromHtml("#0000FF");
  }
}


ColorTranslator är en del av System.Drawing!

Kommentera | Kommentarer: 0 | 2009-03-18 23:42:28

En del på gång...

Som läget ser ut just nu så lutar det åt att det kan bli en hel del jobb framöver. Har precis påbörjat ett jobb åt Webmind.se som ni kan läsa mer om på projekt-sidan. Men det finns några projekt till väntande och några på gång. Men det är skönt att komma igång och jobba lite igen efter att ha gått hemma en längre tid.

Utöver det så har jag själv en del funderingar på egna projekt med men det blir ju att trixa med dem när tid finns. Dels så håller jag ju på med statistik-applikationen som det är en hel del kvar att göra på. Tanken med den är att den skall gå att implementera på vilken sajt som helst, bara det finns asp.net stöd.

Har även funderat lite på att skapa ett eget CMS. Men det är ju ett rätt stort projekt att ta tag i så vi får väl se hur det blir med det. Men "om" jag gör det så kan det ju bli en inkomstkälla vilket aldrig är fel. Har under många år funderat på att bygga ett CMS egentligen men det har kännts som ett alldeles för stort projekt att ta tag i själv om man använder t.ex PHP. Men nu med asp.net så känns det överkomligt då Visual Studio spar en hel del jobb.

Kommentera | Kommentarer: 0 | 2009-03-18 21:14:57




 
 
 
«september 2010»
tiontofr
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

 

 
Senaste Inlägg

» Recaptcha

» Importera MySQL i MSSQL

» Statistikapplikationen

» Google & sökmotoroptimering...

» Nästlad Repeater

» Statistikapplikationen

» PHP & MySQL

» Fotogalleri

» Statistikapplikationen

» ASP.NET Calendar Control