Beiträge von PoTTii

    Hallo und willkommen zu meinem zweiten Tutorial nachdem mein erstes ([ SCRIPTING ] Simples Premiumsystem mit Sternen) doch relativ gut ankamen.
    Diesmal vieleicht nicht so schön bebildert, und auch ein wenig kürzer aber was solls ;)


    Und zwar geht es heute darum wie ihr euren Code Verkleinern/Optimieren verschönern könnt.
    Ich werde dabei einige Methoden zusammenfassen.


    Fangen wir doch mal an...



    Abfragen ob eine Variable auf 0 oder höher als 0 ist
    Wir haben eine Variable/PVar oder wir fragen ganz einfach was aus ner Datenbank ab.
    Wollen wir nun überprüfen ob diese Variable auf 0 ist würden wir das ganze so abfragen:


    if(Variable[Blubb] == 0)


    Doch das geht auch kürzer:


    if(!Variable[Blubb])
    Dies bedeutet ganz einfach: Wenn die variable nicht (Dafür das Ausrufezeichen) höher als 0 ist.
    Doch wie wenn wir abfragen wollen ob sie 1 oder höher ist?
    Normalerweise würden wir das so tun:


    if(Variable[Blubb] == 1)


    Doch auch das geht kürzer, einfach das Ausrufezeichen weglassen:
    if(Variable[Blubb])
    {
    }
    Und schon weiss das Script -> Ist die variable 1 oder höher, soll ich das ausführen was in den Klammern steht.
    Wait... Klammern? Wer brauch die schon! Wobei wir beim nächsten Thema wären.


    Keine Klammern bei if benötigt wenns nur eine Anweisung gibt


    Selbst wenn nur eine Anweisung nach einem if kommt würden einige das so schreiben:
    if(Health => 50.0)
    {
    SendClientMessage(playerid, color, "Du hast mehr als 50 Hp!");
    }


    Da wir aber wie gesagt nur eine Anweisung haben gehts auch wesentlich einfacher...
    Nämlich:
    if(Health => 50.0)
    SendClientMessage(playerid, color, "Du hast mehr als 50 Hp!");
    Einrücken ist natürlich von Vorteil!


    Da es aber nur für eine Anweisung gilt, klappt das ganz gut, mit mehreren allerdings nicht (Danke nochmal an den lieben BlackAce für die Erläuterung!)



    sizeof Blubb statt sizeof(blubb)
    Zwar was ganz kleines aber, meiner Meinung nach trotzdem übersichtlicheres.


    Anstatt beispielsweise
    format(str, sizeof(str), "%s", GetPlayerArmour(playerid));
    können wir auch ganz einfach folgendes schreiben:
    format(str, sizeof str, "%s", GetPlayerArmour(playerid));
    Meiner Meinung nach übersichtlicher (Besonders bei Stellen an denen ihr ne Menge Klammern benutzt).



    Ein Clear Befehl? 100x mit Messages zuspammen? nene!


    Was bei vielen Anfängern ein Fehler ist (Wars auch bei mir), ist dass ihr Script relativ viel Leistung auf nem Server zieht.
    Dies kann unter anderem an solch unsauberen Codes liegen.
    Angenommen ihr wollt einen Clear Befehl um den Chat zu "reinigen".
    Man denkt jetzt man sollte einfach 100x SendClientMessageToAll's reinballern.
    Doch erstens zieht das ne Menge Leistung, und auch Platz in eurem Script.


    Man würde jetzt so schreiben:
    ocmd:clear(playerid, params[])
    {
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");


    //und immer so weiter


    return 1;
    }


    Auch das geht einfacher und übersichtlicher.
    Ihr erstellt innerhalb einer For Schleife eine Variable die auf 0 ist. Mit jedes Mal Befehl ausführen, ändert sich die variable um 1.
    Wenn die Variable eure maximale Zahl erreicht hat hört die Schleife auf.


    Das sähe dann so aus:
    for(new i=0; //eine Variable wird erstellt die auf 0 ist
    for(new i=0; i < 100; //wird wiederholen den befehl der anschliessend noch kommt sooft bis variable i auf 100 ist (also 100 mal)
    for(new i=0; i < 100; i++) //ii wird jedes mal erhöht bis i auf 100 ist


    //Das hier wäre dann unsere Grundschleife:
    for(new i=0; i < 100; i++)


    //doch nun kommt hintendran bzw untendrunter der Befehl der 100x ausgeführt werden soll bspw:


    for(new i=0; i < 100; i++)
    SendClientMessageToAll(farbe, "");


    Auch hier gilt: Nur eine Anweisung = Keine Klammern benötigt.


    Nun wird SendClientMessageToAll(farbe, ""); 100 mal ausgeführt.
    Eine immense Platzeinsparung, und einen Freudengrund für euren Server.



    Ich hoffe ich konnte euch ein bisschen helfen, und wenn ihr noch weitere Möglichkeiten kennt das Script zu verkleinern/optimieren, immer her damit.


    Mit freundlichen Grüssen.
    PoTTii



    Besteh ruhig weiterhin auf deine Schlichtweg Falsche Meinung. du hättest mich rausgeworfen.


    Achja, gemeldet, Rufmord unso.

    Ich habe mit Büchern aufm lokalen server gelernt und getestet. So bücher für Kinder ab 10 Jahren, ich war da 13 oder 14 :D
    Hat gut geklappt, auf mögliche Sicherheitslücken und wie man diese umgeht wurde immer direkt erklärt, sehr schön verständlich.
    Würde ich empfehlen. :)


    Teil uns doch mal mit welche es waren ;)

    Scheiss egal ob ein Script Lücken hat oder nicht, wie kann man so ein kleines Ego und Minderwertigkeitskomplexe haben, dass man so was wie ein kleines Kind ausnutzen muss und Scheisse baut?!


    Reife Personen würden den Webmaster einfach kontaktieren und über die Lücken informieren, aber nein, hier muss ständig irgendwer irgendwem was kaputt machen... einfach nur peinlich so was... :thumbdown:


    Mein kleines Alert'chen hat ja nich wirklich geschadet ^^


    Imemrhin haben wir ihm auch gesagt wie ers fixxt ;)

    Was ist mit der Seite los?


    Cross Scripting Injection, nennt sich das...


    Waren ein paar Kiddys die meinten, JavaScript einschleusen zu müssen.


    @olberto: löscht einfach alle sachen aus der datenbank wo sowas steht:


    PHP
    <script>alert('XXXX');</script>


    Zitat

    Wie kann ich mich davor schützen?
    Eigentlich ist es ganz einfach: Man sollte niemals Benutzereingaben vertrauen beziehungsweise diese direkt auf die Webseite rausschreiben. Am besten ist es, wenn man sowieso nur eine gewisse Menge “erlaubte” Zeichen zulässt oder Sonderzeichen in ihre HTML-Entities umwandelt. Was daran manchmal ein bisschen schwierig ist, ist zu erkennen, wann überhaupt eine Benutzereingabe möglich ist. Bei Formularen auf der Seite ist das noch relativ einfach zu erkennen. Komplizierter wird es dann, wenn URL-Parameter verwendet werden, die nicht direkt auf Eingaben durch den Benutzer basieren. Diese könnten trotzdem manipuliert worden sein.

    hi


    N Bisserl Erfahrungen mit PHP hab ich ja. Ich möchte nacher ein Formular erstellen, dessen Variablen dann per E-Mail verschickt werden. Zusätzlich dazu will ich aber noch sie in ne Datenbank saven.


    Dann wollte ich noch abfragen ob das formular-feld $gamertag bereits in der datenbank ist, wenn ja, => es dem user sagen und nicht versenden und nicht in der db speichern, wenn doch, speichern und senden.



    danke schonmal für erklärungen


    Variablen wären


    $name
    $e-mail