Digitális világ

Digitális világ

Az invalid HTML kódok veszélyei #1

2020. július 02. - benfish

A bejegyzés elkészítését a munkahelyemen tapasztalt, mindennapos, már megszokottnak mondható hibák miatt készítem. A célom, hogy a junior programozók NE kövessék el ezeket a hibákat, mert könnyen a projektek bukásához vezethetnek!

Nézzük is az első kódrészt: (nekem ez az egyik kedvencem :D )

<TABLE>

      <TBODY>

              <FORM  ACTION="VALAMI">

                    <TR>

                   

                    </TR>

                </FORM> 

                   <TR>

                   

                    </TR>

                    <TR>

                   

                    </TR>

    </TBODY>

</TABLE>

Elég sok helyen találkozok ehez hasonló HTML kóddal, amivel az az alapszintű probléma van, hogy eleve sérti a TABLE szerkezetét. Ennek durvább változata, amikor FOREACH-be rakja a tbody tartalmát... ezt pedig gondolom, már írnom sem kell, hogy mihez vezet....

További probléma a resszponzivitás: ez a szerkezet mindig szét fog esni dolgozzunk bootstrapel, reactel vagy bármi mással.

Ha mindenképp form-ot akarunk tenni a table, azt a td tagek közé tegyük, de ez sem profi megoldás, inkább hagyjuk el, ha tehetjük.

Nálunk rendszeresen szűrök készíteskor követik el a junior programozók ezt a hibás szerkezetet, aminek az az ára, hogy sehogy sem lesz resszponzív a táblázat, ugyanis a nagyon sérti a table tag szerkezetét.

Ha jobban megnézzük, akkor egy sort <tr> fog közzé egy form-al, ami azért baj, mert mondjuk a bootstrap nem tud semmit kezdeni vele. A FORM egy block szintű tag, ami egyen értékű a DIV-el, SECTION-el, TABLE-el és még jó pár block szintű elemmel. 

A TR azon kívül, hogy egy sort jelent a táblázaton belül, egy kötött szerkezeti tag, ami a table része.
Ahoz, hogy fent említett kód működjön - tehát resszponzív - CSS hacket kellene írnunk, de még az sem garancia a sikeres működésre, nem beszélve a a front-end oldali technológiákról, ahol ilyen és ehez hasonló szerkezetet nem kezelnek!

10 éves pályafutásom során még egyszer sem láttam ilyen kódot...

Egyébként a projekt vége az lett, hogy több hasonló hibát vétettek a front-enden, a junior kollégáim, ezért a megrendelő nem vette át a weboldalt. 2,5 hónapos projekt, az ilyen szerkezeti hibák miatt (is) 9 hónapos szenvedés lett nekik.

Persze, itt a vezetés is hibás, mert szenior fejlesztőt nem vontak be a projektbe, csak amikor elkezdődött. Viszont utána káosz lett, a jól felépített resszponzív layout-ot hetek alatt szétbombázták, a fenti HTML szintaxisokkal és még jó pár érdekes kóddal.


 

 

 

C# OOP: AbstractClass és property hiba

Kezdő .NET-sek futhatnak bele az alábbi hiba üzibe: "The target proceess excited with code .... evaluating  the function Nevterunk.AbstRactOsztalyunkNeve.PropertyNeve.get"

Mit is jelent ez nekünk?

Fejlesztés során gyakran írunk úgynevezett Propertyket, melyek tulajdonságként viselkednek.

Egy Property lehet kizárólag olvasható(get) és olvasható, írható (set).

Célunk egy nem más, mint jelezzzük a külvilág felé, hogy egy tulajdonságról van szó, ezáltal menedzselhetőbb lesz a kódunk.

Ugye a Propertynél kötelezően meg kell adnunk egy mezőt, ami private a külvilág felé, benne fogjuk tárolni a property értékét.

 

class MyClass {

     private int _positive;

     public int Positive
     {
        get
        {
            return _positive;
        }
        set {
                  if (value > -1) _positive = value;
        }

    }

}

A bemutatott propertynk teljesen szabályos, bár kivételkezelés nincs benne és ha negatív számot adunk a poperty értékének, akkor nullával tér vissza. 

Tehát, hogyan generáódhat a fent említett hiba?

A válasz: amikor a porpertynk visszatérése (get) a saját propertynkre mutat!

public int Positive
     {
        get
        {
            return Positive;
        }
        set {
                  if (value > -1) _positive = value;
        }

    }

Nem nehéz belefutni, főleg a kezdő dotneteseknek :) de idegesítőbb a hiba üzenet után kutakodni a fórumokon.

Figyeljunk oda a get és set kódrészek írásakor! 

 

 

 Ha érdekel a programozás és megtanulnád vagy .NET-re váltanál, akkor irány Workginhunter sulija! :)

Programozó tanfolyam

Szoftverfejlesztés

IP cím blokkolása IIS alatt web.config fájlból

Az IP Security segítségével tudunk IP címeket blokkolni az IIS 6 - IIS 10 verziók között!

A szintaktikája a következő:

<location path="Default Web Site">

<system.webServer>

<security>

<ipSecurity>

<add ipAddress="192.168.100.1" />

<add ipAddress="169.254.0.0" subnetMask="255.255.0.0" />

</ipSecurity>

</security>

</system.webServer>

</location> 

Forrás: https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/ipsecurity/

ASP.NET weboldal és webshop fejlesztés 

Cookie kezelése ASP.NET-ben 1. rész

A cookiek kezelésére több módszer is van és a JavaScript segítségével a legtöbb esetben a kliens oldalon vesszük hasznát de előfordul, hogy a back-endben is használjuk.

Mielőtt belevágunk tisztáznunk kell a Response és Request objektumot feladatait (persze csak röviden és elnézést azoktól, akik jól ismerik :) )

A cookiekat az említett két objektummal tudjuk majd elérni és értelemszerűen a Response-al a szerver felől küldünk egy választ a kliens felé, amíg a Request egy kérést fogunk fogadni a kliens felől!

Könnyen kitalálható ezek után, hogy a Response segítségével fogjuk majd létrehozni a sütinket a kliens oldalon és a Request segítségével fogjuk tudni elérni!

Ennek a két objektumnak több függvénye és propertije van, de ezekkel most nem foglalkozunk, talán egy másik bejegyzésben majd. :D

 

A legegyszerűbb mód - ami mindekinek egyértelmű lehet:

Response.Cookies["sütiNeve"].Value = "süti értéke";
Response.Cookies["sütiNeve"].Expires = DateTime.Now.AddDays(1);

A cookiekat minden esetben a Response objektum segítségével fogjuk létrehozni, valamint a sütikből egy gyűjteményt hozunk létre (na ezt írja le valaki egy kezdőnek :D - nem nagyon szeretném vegyíteni a szakmai angolt a magyarral :( ) egy Value és egy Expires tulajdonsággal. A value-ba tároljuk majd a süti értékét, illetve az expires-ban a lejárati dátumot (jelen példában ez 1 nap lesz).

Programozói és ípusosság szempontjából kényelmesebb - legalábbis nekem - ha a System.Web névtér HttpCookie objektumát használjuk. 

HttpCookie aCookie = new HttpCookie("lastVisit"); //készítünk egy példányt, a konstruktor paraméterébe pedig a cookie neve fog kerülni!
aCookie.Value = "süti értéke"; //a cookie értéke
aCookie.Expires = DateTime.Now.AddDays(1); //a cookie lejárati dátuma, ideje 
Response.Cookies.Add(aCookie); //a kliens oldalon létrejön a cookienk

A második eset már szebben néz ki, van típusunk, pédányunk, propertynk. 
A Response hívása is másképp történik de hatás ugyanaz: létrehozni a cookiet a kliens oldalon.

 

 

Kereső barát URL IIS alatt WP-re és OpenCartra

A cikk elsősorban azoknak szól, akik Plesk alatt ill. IIS alatt üzemeltetik CMS alapú oldalaikat.

Egyáltalán nem célom kivesézni a szerver oldalt, valamint a .htaccess és a webconfig fájlok közötti különbségeket. A cél csupán annyi, hogy mindenki hamar eltudja érni célját, tehát Pleskre szép URL-eket varázsolni.

Kezdjük is gyorsan a WordPress-el

Hozzunk létre egy web.config fájlt(ami tulajdonképpen egy XML, és ezt jelezzük is az első sorban!), majd kezdjük az első sorral:

<?xml version=”1.0″ encoding=”UTF-8″?>

Konfigurációs fájl révén, jeleznünk kell, majd megszólítjuk a rewrite modult és létrehozzuk a szabályokat(Rules), tehát a második sortól:

<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=”WordPress Rule” stopProcessing=”true”>
<match url=”.*” />
<conditions>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

Az elkészített fájlt másoljuk a domain alá, és a WordPressben kapcsoljuk be a “Közvetlen hivatkozások” alatt valamelyik formát, vagy készítsünk saját szabályt.

OpenCart 1.5.x és felette

<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=”opencart” stopProcessing=”true”>
<match url=”^([^?]*)” />
<conditions>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true”/>
<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true”/>
<add input=”{REQUEST_URI}” pattern=”.*\.(ico|gif|jpg|jpeg|png|js|css)” negate=”true”/>
</conditions>
<action type=”Rewrite” url=”index.php?_route_={R:1}” appendQueryString=”true”/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

Ha Open Cart alapú webshop indításában gondolkozol keress bátran!

 

Véleltlenszám előállítása C# - alapok

Véletlen számokat a Random osztály Next() függvényével állíthatunk elő. Alap esetben egy nem negatív egész számot generál.

A függvénynek két paraméteres hívása lehet:

Next(int maxValue): 0 és a paraméterben megadott maximum érték között generál egy véletlenszámot. FONTOS: a maximum értékből el kell vennünk 1-et. Tehát, ha 100-ig szeretnénk előállítani számokat akkor 101 kerül a paraméternek!

 

Next(int minValue,int maxValue): ebben az esetben megadhatunk egy alsó- és felső korlátot, melyek között előállít egy véletlen számot. A maximum értéknél itt is érvényes az n+1 szabály!

Példák:

static void Main(string[] args)

      {

            ///Alap példák a függvény használatára!

            Random rnd = new Random();

            int Szam = rnd.Next();

            Console.WriteLine("Az előállított véletlenszám: {0}", Szam);

 

            int Szam2 = rnd.Next(101);

            Console.WriteLine("Az előállított véletlenszám: {0}", Szam2);

 

            int Szam3 = rnd.Next(10, 20);

            Console.WriteLine("Az előállított véletlenszám: {0}", Szam3);

 

            Console.ReadLine();

        }

static void Main(string[] args)

        {

            //Konzolrol beolvasunk egy egesz szamot, ami a felső korlát lesz

            int bekertSzam = int.Parse(Console.ReadLine());

            Random rnd = new Random();

            int generaltSzam = rnd.Next(bekertSzam+1);

 

            Console.WriteLine("Az előállított véletlenszám: {0}", generaltSzam);

 

            Console.ReadLine();

        }

static void Main(string[] args)

        {

            //A konzolrol beolvasunk egy also- és felso korlatot (egesz szamokat)

            Console.WriteLine("Add meg az alsó korlátot: ");

            int alsoKorlat = int.Parse(Console.ReadLine());

 

            Console.WriteLine("Add meg a felső korlátot: ");

            int felsoKorlat = int.Parse(Console.ReadLine());

 

            Random rnd = new Random();

            int generaltSzam = rnd.Next(alsoKorlat, felsoKorlat + 1);

 

            Console.WriteLine("Az előállított véletlenszám: {0}", generaltSzam);

 

            Console.ReadLine(); }

static void Main(string[] args)

        {

            //20db veletlen szam eloallitasa ciklusban

            int counter = 0;

            int count = 20;

            Random rnd = new Random();

            while (counter < count)

            {

                int randomNumber = rnd.Next();

         Console.WriteLine("A(z) {0} eloallitott szam: {1}",counter + 1,randomNumber);

 

                counter++;

 

            }

 

            Console.ReadLine();

        }

 

static void Main(string[] args)

        {

            //20elemu tomb feltoltese egesz szamokkal

            int counter = 0;

            int count = 20;

            int[] arrayRnd = new int[count];

            Random rnd = new Random();

            while (counter < count)

            {

                arrayRnd[counter] = rnd.Next();

                counter++;

            }

 

            foreach (int item in arrayRnd)

            {

                Console.WriteLine("Az előállított véletlenszám: {0}", item);

            }

 

            Console.ReadLine();

        }

 

Ha komolyan neki szeretnél kezdeni a programozásnak és számít neked a tudás és tapasztalat, akkor látogass el a www.workinghunter.com-ra, azon belül pedig az oktatási oldalunkra: programozó, informatikai tanfolyamok. 

süti beállítások módosítása