MySQL R38 - Simples Anmeldung´s System

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • So, MrPawn: hat mir gerade einen riesigen gefallen getahen, wusste wenig doch er hat mir alles genau erklärt und jetzt finde ich mich auch schon viel besser durch.
    Und noch am Rande, das Tutorial ist mMn. sehr gut gelungen konnte alles verstehen außer ein paar Kleinigkeiten.
    Hast du gut gehmacht.


  • if(mysql_errno() < 1)print("MySQL: Die Verbindung wurde erfolgreich hergestellt."),mysql_log(LOG_ALL); else print("MySQL: Die Verbindung zur MySQL Datenbank konnte nicht hergestellt werden | Der Server wird nun heruntergefahren."), SendRconCommand("exit");


    Die mysql_errno-Abfrage ist so nicht ganz korrekt. mysql_errno() returnt 0, wenn kein Fehler vorhanden ist, du überprüfst hier jedoch nur ob die Error-ID kleiner als 1 ist. mysql_errno() kann auch -1 (ungültige Verbindung) returnen.
    Über den Coding-Stil kann man sich ja streiten, aber ich glaub für Anfänger ist es wesentlich einfacher, strukturierten Code zu lesen (anstelle von Code, das einfach in eine Zeile geklatscht ist).
    Also so sollte es die Code-Zeile meiner Meinung nach aussehen:

    mysql_log(LOG_ALL);
    if(mysql_errno() == 0)
    {
    print("MySQL: Die Verbindung wurde erfolgreich hergestellt.");
    }
    else
    {
    print("MySQL: Die Verbindung zur MySQL Datenbank konnte nicht hergestellt werden | Der Server wird nun heruntergefahren.");
    SendRconCommand("exit");
    }


    Ansonsten könntest du noch näher auf den 2. Parameter von mysql_log() eingehen (der überhaupt nicht auf der Wiki-Seite erwähnt wird, werde das sofort korrigieren). Hier die Faustregel, wann man welchen Log-Typ benutzen soll:
    - Text-Logging ('LOG_TYPE_TEXT'): wenn man Debug-Nachrichten loggt oder auf seinem Home-Server loggt
    - HTML-Logging ('LOG_TYPE_HTML'): wenn man nur Errors und Warnings loggt und auf dem Hauptserver loggt
    Text-Logging ist in Kombination mit Debug-Nachrichten sehr langsam und kann wirklich große Verzögerungen auslösen. Jedoch ist das Text-Logging die zuverlässigste Logging-Methode, um Crashes oder Bugs im Plugin ausfindig zu machen.
    HTML-Logging ist entsprechend die schnellste Logging-Methode (soweit ichs im Kopf hab ist es 900x schneller als das Text-Logging), jedoch loggt es nicht alles, wenn das Plugin abstürzt. Die HTML-Datei verträgt auch nicht allzu viele Log-Nachrichten, deshalb sollte man nicht Debug-Nachrichten loggen, wenn man diesen Logging-Typ benutzen will.




    Ich finde es gut das du solch ein Tutorial machst zwar ist es noch ausbaufähig.


    Jedoch mach ich noch paar Anmerkungen/Informationen:


    • Manche haben das Problem mit gewissen .dll`s (msvcp110.dll, msvcr110.dll etc...), diese muss kann man downloaden und in den Samp-Server-Ordner verschieben oder ganz einfach microsoft visual c++ redistributable updaten.
    • Ebenso kannst du noch ein Beispiel hinzunehmen wie man einen String ausließt das wissen auch nicht die meisten.
    • cache_get_data(num_rows, num_fields); kann man nutzen jedoch gibt es schon lange cache_get_field_count(); was um einiges effizenter ist.#
    • Nutze mysql_pquery anstelle von mysql_tquery da dieses um einiges schneller ist.
    • Zusätzlich kannst du bei mysql_connect die Anzahl der maximalen Verbindungen als Threads einstellen.


    NIE irgendwelche losen .dll's runterladen und einfach in nen Ordner reinklatschen!!! Falls ihr mit dem Plugin irgendwelche Errors bekommt, dass irgendne .dll fehlt, schaut hier im F.A.Q. nach. Dort sind alle C++ Redistributables (Programme von verifizierten Herstellern, die .dll's installieren) aufgelistet, die ihr installiert haben solltet.
    mysql_pquery ist auch nur in bestimmten Szenarios schneller als mysql_tquery. mysql_pquery ist nie immer schneller als mysql_tquery.




    Abgesehen von den hier und von anderen erwähnten Sachen ist das Tutorial relativ okay.

  • Ja natürlich könnte ich, das & das machen ..
    Aber wenn man die Überschrift liest, dann merkt man ganz schnell das es ein Simples Anmelduns System darstellen soll.
    Dazu habe auch noch geschrieben, ob es sich für anfänger lohnt, wird man dann ja sehen ;)
    Aber trotzdem Danke, das du hier deine Kritik oder Meinung rauslässt, je wie mans nimmst :rolleyes:

  • Ich habe dir nur geschrieben, dass du einen Fehler bei der mysql_errno() Abfrage hast, der Code ein bisschen unordentlich eingerückt ist und dir den 2. Parameter bei mysql_log() erklärt (damit DU es verstehst und damit DU entscheiden kannst ob du Anfängern empfiehlst, das etwas übersichtlichere Logging anzubieten oder nicht). Das Code-Einrücken ist meine Meinung, mysql_errno() begründete Kritik und der Log-Typ ein Tipp.

  • Guten Abend,


    Mein Name lautet MrPawn.
    Ich habe ja gesagt, ich finde es gut das du deine Meinung/Kritik ausstrahlst.
    Sonst wären deine Beiträge in diesem Thema ja unnütz.
    Ich werde es die Woche Vielleicht mal bearbeiten ..


    Mit freundlichen Grüßen,


    MrPawn

  • Beitrag von John Wayne ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Da es bisher noch keiner gepostest hat:

    Zitat

    mysql_escape_string(Spielername(playerid), Spielername(playerid));
    format(query, sizeof(query), "SELECT * FROM user WHERE username='%s'", Spielername(playerid) /* In dieser Zeile nur das Spielername() */ );


    Das funktioniert nicht so wie du es möchtest. Spielername ist eine Get Funktion, nicht Set.

  • Hallo.


    obwohl ich genau nach diesem Tutorial gegangen bin bekomme ich Haufenweise Errors.



    Ich weiß nicht was ich jetzt machen muss, da ich noch ein Anfänger bin.


    Mfg


  • Benutzt du auch die MySQL version? Laut den Errors nicht.
    Weil wie man sieht findet er zum bsp: mysql_connect nicht.

  • Ach ich Idiot habe vergessen das Include oben reinzuschreiben *Facepalm*


    Nun bekomme ich nur noch diese Errors:


    Code
    (268) : warning 213: tag mismatch
    (278) : error 055: start of function body without function header
    (279) : error 010: invalid function or declaration
    (281) : error 010: invalid function or declaration
    (283) : error 010: invalid function or declaration
    (286) : error 021: symbol already defined: "Spielername"
    (286) : error 029: invalid expression, assumed zero
    (286) : error 021: symbol already defined: "Spielername"
    (286) : fatal error 107: too many error messages on one line
  • Beitrag von Pascal. ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • Augenscheinlich hast du MySQL nicht Includiert.


    Dies machst du mit #include <a_mysql>, bitte befolge aber genau die Installationsschritte!


    mfg :thumbup:

  • mysql_escape_string(Spielername(playerid), Spielername(playerid));


    Ich wollte mal kurz etwas dazu sagen, dass ist absoluter Schwachsinn.


    Das wäre wie wenn man folgendes versucht:


    func() = "Hey";
    /*
    In Pawn kann man func() = "Hallo"; zwar wirklich ohne Fehler compilen, aber das macht keinen Sinn. Denn man kann einer Funktion keine neuen Werte zuweisen, da diese durch das return festgelegt werden.
    */
    printf("%s",func()); //Ich hoffe jedem ist klar, dass hier 'hallo' rauskommt...und nicht Hey


    stock func() {
    new var[] = "'hallo'";
    return var;
    }


    mfg. :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S