Beiträge von Akino Kiritani

    Top, bis auf die kleinen Rechtschreibfehler, aber ich schätze bei soviel Text kommt man einfach durcheinander


    Das stimmt, ich das ist auch sehr viel Arbeit gewesen, aber es fehlen nur kleine Wörter, das passiert auch mir :D


    ich bewerte dich nicht, da du es nicht Wert bist von einem Punktesystem bewertet zu werden, welches eh nichts aussagekräftiges erläutert :D


    Das ist nett :love:


    dass wenn man sich ein UCP basteln möchte, dass man da lieber MySQL benutzt


    Ich habe nie behauptet das man lieber SQLite nutzen sollte. ;)

    Dudalus


    Ich wüsste nicht warum das nicht funktionieren sollte.
    MySQL ist nur eine mit ein paar Funktionen aufgepushte Version von SQLite,
    von daher sollte das Problem los funktionieren.


    Ich weiß aber nicht wie das bei SAMP mit den SQL Injections funktioniert,
    es gibt keine real_escape_string funktion.
    Es kann natürlich sein, das der Server das selbstständig schützt ;)

    ich wollte morgen mal auf meinem Laptop Ubuntu installieren


    Es gibt ja nicht nur Ubuntu es gibt ja auch auf Ubuntu bassierende Betriebssysteme wie z.B. Linux Mint.


    Ich selber nutze Mint und die Treiber wurden alle direkt installiert.
    Sprich, probieren über studieren, eigentlich ist Ubuntu so schlau und hat die passenden Treiber irgendwo parat.
    Sonst nutze einfach Mint :D
    Da sollte das gehen

    Es heißt dynamisch und nicht Dynamik.


    Ich kann dir nicht sagen was es nicht nur ist.
    Es ist nicht nur Ingame erstellen, verändern, löschen, laden, speichern.


    Aber viele Glauben das.
    Ich lass euch damit mal alleine ;)

    Du weißt aber schon das gpci nur einen verschlüsselten Code des Windowsbenutzers zurückgibt, oder?


    Das hatten wir schonmal.
    Nutzer wird gebannt auf dem Server holt sich eine neue IP legt einen neuen Benutzer an wählt einen anderen Nickname und kann wieder spielen.
    Also so doll ist das nicht :D

    Dein Problem ist beim texturennamen, der exestiert nicht :D


    SetObjectMaterial(myobject1, 0, 6322, "law2_roadsb", "stormdrain3_nt",0); // stormdrain3_nt stimmt nicht
    Probier mal


    ws_nicepave


    Das sollte dann richtig sein.
    BTW: Die 0 kannst du weglassen ;)

    Wenn ihr immer noch wissens hungrig nach den Funktionsweisen der restlichen SQLite Funktionen seid,
    dann gratuliere ich euch :) Nicht jeder würde soweit lesen.


    Gut als nächstes beschäftigen wir uns mit folgenden Funktionen:

    FunktionenKurz Beschreibung
    db_num_rows();Gibt die Anzahl der ausgelesenen Zeilen zurück.
    db_next_row(); Springt in die nächste Zeile, sofern es mehr als eine ausgelesene Zeile gibt.
    db_num_fields(); Gibt die Anzahl der ausgelesenen Spalten zurück die in einer Zeile sind.
    db_field_name(); Gibt den Namen des Feldes zurück.




    Sie mögen nicht unbedingt immer so nützlich sein bzw. klingen,
    aber man ist froh darüber wenn man sie braucht, vertraut mir ;)
    Ich werde im Verlauf nur noch auf die Funktionen eingehen mit denen wir uns noch nicht beschäftigt haben.
    Das heißt ich werde z.B. die einzelnen Querys nicht mehr erklären oder die Funktionen die von mir schon einmal erklärt worden sind.


    db_num_rows


    Diese Funktion funktioniert wie mysql_num_rows.
    Sie gibt die Anzahl der ausgelesen Spalten zurück.


    Das wäre meist dann nützlich, wenn man z.B. feststellen möchte ob ein User regestiert ist.
    Ein kleines Beispiel dazu:



    db_next_row


    Diese Funktion arbeitet wie mysql_retriew_row,
    sie kann benutzt werden, wenn man mehrere Einträge hat.
    z.B. wenn man 2x den gleichen Wert in einer Tabelle hat.
    (Eine kleine Anspielung auf die Abfrage im Beispiel von db_num_rows)


    Dieses Beispiel hat nur entfernt was mit dem vorherigen zu tun:



    db_num_fields


    Diese Funktion ist vergleichbar mit der mysql Funktion mysql_num_fields und bewirkt exakt das gleiche.
    Sie kann z.B. in Verbindung mit db_get_field genutzt werden.
    Hier ein Beispiel zur Verdeutlichung in der Anwendung:



    db_field_name


    Diese Funktion hat in MySQL kein Gegenstück.
    Sie speichert den Feldnamen in der angegebenen Variable und kann in Verbindung mit db_get_field_assoc genutzt werden.


    Aber im folgenden Beispiel wäre das unpraktisch, aber es soll ja nur als Verdeutlichung dienen. ;)



    Gut das war es auch schon.
    Vielen Dank fürs Lesen :)
    Ich hoffe ich konnte euch die Welt von SQLite ein wenig näher bringen.
    Falls Fragen - Fehler - Vorschläge zur Hand sind, postet sie doch bitte unten im Thread :)


    Bewertungen sind natürlich nicht verboten ;)

    Hallo,
    ich möchte euch einmal die Alternative zu MySQL vorstellen, nämlich SQLite.


    Im Forum kusieren bisher 2 Werke damit einmal die DT_SaveBox und einmal gPM.
    Ich finde es relativ traurig, das viele glauben man müsse unbedingt MySQL als Datenverwaltung haben, weil es mega super toll und total schnell sei, das ist aber nicht so.
    SQLite weist gewisse Vorzüge in der Geschwindigkeit bei kleineren Datenbanken im gegen Satz zu MySQL auf.
    Erst wenn die Datenbank, verdammt groß wird weist es Geschwindigtkeitseinbußen auf.



    Viele von euch sind ja der Meinung das man UCPs nur mit Hilfe von MySQL erstellen kann,
    dies stimmt aber nicht.
    SQLite weist in PHP den gleichen Funktionsumfang wie wie MySQL auf.
    Eine Übersicht über die Funktionen von PHP in Verbindung mit SQLite findet ihr hier


    Für normale User gibt es keinen wirklichen Unterschied,
    aber es gibt wesentliche Unterschiede zum Funktionsumfang, wie der Name "Lite" schon vermuten lässt.


    Sie sind nicht für den normalen Gebrauch wirklich wichtig, also keine Sorge ;)


    Fangen wir mit dem wesentlichen an.


    Warum SQLite?


    Warum SQLite?
    Die Frage ist nicht so schwer zu beantworten.
    Wie oben schon beschrieben ist es in vielen Fällen überhaupt nicht nötig MySQL zu nutzen.


    Es gibt natürlich einen Nachteil in punkto Sicherheit.
    Die Datenbank liegt nur im Scriptfiles Ordner und kann von jedem der darauf Zugriff hat ausgelesen werden.


    Es gibt natürlich auch gewisse Vorzüge von SQLite.
    z.B. die Datenbank besteht nur aus einer Datei und ist nur einige (hundert) Kilobyte groß, also kein wirklicher Speicherplatzverlust.
    Dazu passt sich die Datenbank während der Laufzeit immer auf das System an, das gerade die Datenbank benutzt.
    Das vereinfacht den Austausch zwischen verschiedenen Systemen, sogar zwischen Systemen mit unterschiedlichen Byte-Reihenfolgen.
    Jede Spalte kann also Daten beliebiger Typen enthalten, die erst zur Laufzeit wird nötigenfalls konvertiert werden.


    Diese Vorzüge sind natürlich nicht für jeden relevant, deshalb muss jeder selbst entscheiden, ob er lieber SQLite, MySQL oder gleich beim klassischen Filesystem bleibt.



    Also gut fangen wir mit dem eigentlichen Coding-/Scriptteil an.



    Erstellen bzw. öffnen einer Datenbank:


    Falls eine Datenbank noch nicht existiert, man sie aber trotzdem öffnen möchte,
    ist es in SA:MP nicht relevant diese per Hand zu erstellen,
    wenn man die Datenbank trotzdem per Hand erstellen möchte, kann dies gerne tun.
    Anleitung dazu findet ihr weiter unten.


    Damit müssen wir uns aber nicht abgeben, da dies der SA:MP Server für uns übernimmt. ;)


    Die Funktion dafür lautet db_open();
    hier ein kleines Beispiel:



    OK, wir haben jetzt eine Datenbank erstellt, aber wir wollen jetzt ja damit arbeiten.



    Erstellen von Tabellen in der SQLite Datenbank:


    Das erstellen von Tabellen in der Datenbank, läuft nicht unbedingt so einfach ab, wie bei MySQL, sofern man immer mit PhpMyAdmin gearbeitet hat.
    Ich nehme jetzt als Beispiel Navicat, weil es eigentlich dafür am einfachsten ist.


    Sofern ihr Navicat noch nicht installiert habt, hier ein Downloadlink: http://www.computerbild.de/dow…Navicat-Lite-1298757.html


    Zuerst müssen wir eine Verbindung zur Datenbank herstellen, das geht aber nur wenn sie auch existiert^^
    Gut zum erstellen der Verbindung gehen wir zuerst auf den "Button" Connection und wählen SQLite aus


    Tut1.jpg


    Dann legen wir den Verbindungsnamen und die Datenbank Datei fest.
    Dabei ist zu beachten das "Existierende Datenbank Datei" ausgewählt ist.


    Tut2.jpg


    Als nächstes gilt es die Tabelle zu erstellen, dies geht über "New Table",
    dort ist alles wie gehabt.
    Felder erstellen und den Feldtypen festlegen.


    Meistens braucht man hier allerdings nur Integer und Text.
    Bei Text ist grundsätzlich die Länge anzugeben und bei den Integer nicht, diese passen sich selbstständig an.


    Als nächstes wenn die Tabelle erstellt ist, speichern wir sie und geben ihr einen Namen.
    Die Tabelle mit der wir arbeiten werden ist unten.


    Tut3.jpg


    Nach dem wir die Tabelle erstellt haben, schließen wir Navicat und kümmern und uns wieder um den Scriptteil.


    Einfügen von Daten in die Datenbank:


    Das einfügen von Daten ist eigentlich das einfachste,
    ich vollführe das einmal an einem Beispiel, da dies eigentlich selbsterklärend ist,
    wenn man schon mal mit MySQL bzw. SQL gearbeitet hat.



    Die Tabelle sollte danach so aussehen.
    Tut4.jpg


    Wenn nicht, beginnt von vorne oder lasst es,
    wer es bis hier hin zum 2. mal nicht geschafft hat, sollte es lassen ;)



    Updaten von Werten:


    Nun zum 2. einfachsten, das Updaten von Werten.
    Es ist nicht viel anders als das einfügen, der Aufbau des Querys sind nur komplett anders.



    Wenn der Code ausgeführt wurde sollte eure Tabelle wie folgt aussehen
    Bild 4:


    Wenn nicht, alles auf Anfang oder lasst es :D



    Auslesen von Daten:


    Nun zum schwierigsten Teil, das Auslesen von Daten.
    Eigentlich ist es ganz einfach, wenn man es verstanden hat.
    Problem hier allerdings, es gibt hier zwei verschiedene Möglichkeiten an die Daten zu kommen.
    Ich arbeite sie von oben bis unten einmal ab.


    Möglichkeit 1:


    Das ist die schwierigste Möglichkeit.
    Hier arbeiten wir direkt mit mehreren Feldern,
    da es ziemlich blöd und umständlich ist alle Felder die man braucht einzeln aus zu lesen.



    Wenn alles richtig gemacht wurde steht nun 7 und eure Namen in der Serverlog bzw. in der Serverkonsole.
    Herzlichen Glückwunsch ihr könnt nun mehrere Daten auf einmal auslesen :)



    Möglichkeit 2:


    Nun zu der einfachsten Methode, das Auslesen von nur einem Feld.
    Zur Verdeutlichung nutze ich hier das vorherige Beispiel ein abgeänderter Form.



    So nun habt ihr es fast überstanden.
    Im 2. Post Folgen ein paar weitere Funktionen mit Anwendungsbeispielen.
    Viel Spaß beim Lesen :)

    Nicht umbedingt, aber dies ist jedem selbst überlassen.


    Nur weil es von etwas "Playermäßiges" gibt, heißt es nicht das es besser ist,
    prinzipiell ist es sogar schlechter, weil der Server und der Client mehr arbeiten müssen