[Problem] Mitn dynamisches Navigationssystem & Ausgabe des Charakternamen!

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
  • Guten Mitternacht liebe Breadfish Gemeinschaft,

    bin gerade dabei ein dynamisches Navigationssystem zur entwickeln, darunter darf man sich

    vorstellen, dass man Kategorien erstellen, bearbeiten und löschen kann, nicht nur das sondern

    auch Routen erstellen, bearbeiten und löschen kann, allerdings hab ich das Problem, dass sich

    die Datensätze von der Navigationspunkte Tabelle mit der dazugehörige Kategorie die in der Db

    als Datensatz gespeichert ist nicht im Spiel angezeigt wird, natürlich braucht man auch die

    Navigationskategorie Tabelle, aber da liegt kein Fehler vor, da alles perfekt ausgegeben wird.

    Mein Vorhaben wäre, wenn ich z.b. die Kategorie "Behörden" auswähle, dann in einem neuen Dialog

    alle Navigationspunkte angezeigt werden die der Kategorie "Behörden" entsprechen. Ein Anliegen

    wäre da noch und zwar wird auf mysteriöse Art und Weise den Namen des jeweiligen Charakters

    nicht ausgegeben, was seltsam ist.




    Der Code vom Navigationssystem:


    Die Funktion der Charakternamen Ausgabe & der Befehl dazu:


    Ps: Falls die Codeabschnitte nicht ausreichen sollten, um den Fehler zur finden, dann schreibt drunter.

    Ich hab bisher noch nie mit ner doppelten Auslesung und das mergen gearbeitet, deshalb in dieser Sache unerfahren.


    Mit freundlichem Gruß,

    Szertockz

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

  • Sprich: die Datensätze werden nicht gefunden? Dann gib die Syntax mal bei phpmyadmin bei SQL ein schaue, was dir angezeigt wird.


    Zum anderen wenn ich es richtig sehe, wird bei der foreachschleife (Z. 41) mehrmals die String Variable beschrieben, je nach dem wie viele Datensätze vorhanden sind, in diesen Fall solltest du innerhalb der schleife 2 Variablen verwenden Bspw. mainstring und String wo du mit strcat den String bei Mainstring anfängst. Sonst wird string immer überschrieben und immer nur einmal angezeigt.


    Zwecks der Charakternamen, printe mal die MySQL Anweisung. Vllt liegt da der Fehler.


    Und für was den Stock CharakterName, wenn dieser bereits in eine globale Variable gespeichert wurde?

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Sprich: die Datensätze werden nicht gefunden? Dann gib die Syntax mal bei phpmyadmin bei SQL ein schaue, was dir angezeigt wird.

    Ich hab es mal in PHPMyAdmin eingetragen sowie ausführen lassen, sehe das es an "ORDER BY" liegt und gibt mir den Fehler "Unerwartete Datensatzanforderung. (near "ORDER BY" at position 24)" aus.

    SQL
    SELECT * FROM navipoint ORDER BY `NID` DESC WHERE GenId = '1'


    Zum anderen wenn ich es richtig sehe, wird bei der foreachschleife (Z. 41) mehrmals die String Variable beschrieben, je nach dem wie viele Datensätze vorhanden sind, in diesen Fall solltest du innerhalb der schleife 2 Variablen verwenden Bspw. mainstring und String wo du mit strcat den String bei Mainstring anfängst. Sonst wird string immer überschrieben und immer nur einmal angezeigt.

    Ganz genau, eben nicht, da ich einen Listen-Umbruch mittels "\n" am Ende des strings drin stehen habe und beim Anfang des strings dann der derzeitige mit den anderen kombiniert/zusammengeführt wird, somit füllt sich der string und überschreibt nicht den derzeitigen wo was drinsteht.


    Zwecks der Charakternamen, printe mal die MySQL Anweisung. Vllt liegt da der Fehler.

    Bei Charaktername steht dann dieses Zeichen "[?]".

    Code
    [11.10.2020 - 02:37:39] [connection] 127.0.0.1:59845 requests connection cookie.
    [11.10.2020 - 02:37:40] [connection] incoming connection: 127.0.0.1:59845 id: 0
    [11.10.2020 - 02:37:41] [join] Szertockz has joined the server (0:127.0.0.1)
    [11.10.2020 - 02:37:56] Charaktername:

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

  • mach where Anweisung vor Order by

    Mit dem Statement SELECT * FROM navipoint WHERE GenId = '1' ORDER BY `NID` DESC funktioniert das ganze, Problem mit Listdialog das alle Navipunkte die in der Db sind in allen Rubriken angezeigt wird, hab ich mit einer IF-Bedingung unterbunden, jz besteht nur noch das Probem mit den Charakternamen! Zum Thema Navi nochmal, irgendwie wird im Spiel die Umlaute im Dialog nicht richtig dargestellt, es lädt die aus der Db raus, der Screen ist im Anhang sowie unter dem Satz, damit ihr euch ein besseres Bild davon machen könnt!

    sa-mp-000.png.


    Bei /stats sehe ich nicht, das c_name mitgeladen wird oder wird es beim Login geladen?

    Die Variable wird bei dem Callback SpawnCharakter(playerid) aus der Datenbank gelesen und in die Variable gespeichert, aber anscheinend speichert er die nicht richtig in die Variable.

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

  • Hilfreich wäre hier die Struktur deiner Tabelle, in welcher Kodierung du die Spalten hast.

    Die Datenbank Kodierung (Tabellen sowie Spalten) ist auf utf8mb4_general_ci, also auf der Standard Kodierung.

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

  • also auf der Standard Kodierung

    Das wäre mir neu, die Standard Kollation ist eig latin1_swedish_ci 😅


    Ändere das mal darauf und dann erstell mal ein neues, und schau, ob es funzt :)


    //Edit:

    Natürlich kannst du auch utf8 lassen.

    Dann musst du aber halt das charset anpassen.

    Unter mysql_connect kannst du:


    mysql_set_charset("utf8mb4_general_ci", dbhandle);


    verwenden.

    ast2ufdyxkb1.png


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

    Einmal editiert, zuletzt von Kaliber ()

  • Ändere das mal darauf und dann erstell mal ein neues, und schau, ob es funzt :)

    Ich hab die komplette Datenbank Kollation auf latin1_swedish_ci geändert, dazu die Optionen das alle Tabellen sowie Spalten auf latin1_swedish_ci geändert werden, aber ohne Erfolg, dass Problem besteht weiterhin mit dem Charaktername und das die Umlaute im Navi Dialog nicht richtig dargestellt werden. :)

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

  • Hast du mein Edit gesehen?


    Ändere das Charset zurück und pass das Charset für die MySQL Querys an (wie oben gezeigt mit der Funktion).


    Oder verwendest du evtl schon so eine Funktion im Skript?

    ast2ufdyxkb1.png


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

  • Ändere das Charset zurück und pass das Charset für die MySQL Querys an (wie oben gezeigt mit der Funktion).

    Sobald ich die Funktion mysql_set_charset("utf8mb4_general_ci", handle); einfüge, kann der sich nicht mehr zur Datenbank bzw. zum MySQL-Server verbinden und gibt mir aus, dass keine Verbindung aufgebaut werden kann.

    Code
    [11.10.2020 - 18:59:30] [MySQL] Verbindungsaufbau...
    [11.10.2020 - 18:59:30] [MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.
    [11.10.2020 - 18:59:30] [MySQL] Starte neuen Verbindungsversuch (TTL: 2).
    [11.10.2020 - 18:59:30] [MySQL] Verbindungsaufbau...
    [11.10.2020 - 18:59:30] [MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.
    [11.10.2020 - 18:59:30] [MySQL] Starte neuen Verbindungsversuch (TTL: 1).
    [11.10.2020 - 18:59:30] [MySQL] Verbindungsaufbau...
    [11.10.2020 - 18:59:30] [MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.
    [11.10.2020 - 18:59:30] [MySQL] Bitte prüfen Sie die Verbindungsdaten.
    [11.10.2020 - 18:59:30] [MySQL] Der Server wird heruntergefahren.

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

  • Hast du die Funktion nach mysql_connect verwenden, bzw, dann, wenn du schon mit der Datenbank verbunden bist?


    dass Problem besteht weiterhin

    Nur zur Klarstellung, hattest du dann neue Daten gespeichert und das damit getestet? :D

    Denn dass die alten immer noch nicht funzen ist klar, es sei denn du änderst die manuell über phpmyadmin oder so.

    ast2ufdyxkb1.png


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

  • Hast du die Funktion nach mysql_connect verwenden, bzw, dann, wenn du schon mit der Datenbank verbunden bist?

    Ich hab es unter mysql_connect geschrieben, währenddessen er sich mit der Datenbank verbindet. Ich füge es mal unter printf, da wo der Server mit der Datenbank dann verbunden ist.


    Nur zur Klarstellung, hattest du dann neue Daten gespeichert und das damit getestet? :D

    Denn dass die alten immer noch nicht funzen ist klar, es sei denn du änderst die manuell über phpmyadmin oder so.

    Ich hab tatsächlicher Weise es mit den alten Datensätze/Einträge getestet, werde eben die Einträge manuell per PHPMyAdmin temporär eine andere Bezeichnung geben und es dann wieder zur die originalen Bezeichnung ändern.


    //edit

    Es hat sich nichts geändert, Charaktername wird immer noch nicht ausgegeben und im Dialog werden die Umlaute immer noch nicht richtig dargestellt, heißt in dem Sinne, dass beide Probleme weiterhin bestehen.

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

    Einmal editiert, zuletzt von Settings ()

  • Kaliber hat dir den richtigen Weg genannt. In der Webentwicklung ist es genauso wie in SAMP, wobei bei SAMP auch die Tabellen oder Spalten den Wert bspw. der Unicode-codierung haben muss.


    Um Fehler bei Umlauten zu beseitigen, muss es auf utf8 eingestellt sein. Zwecks der Charsetsetzung in deinen Script, schaue dir die Dokumentation deiner MySQL Version mal an.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Kaliber hat dir den richtigen Weg genannt. In der Webentwicklung ist es genauso wie in SAMP, wobei bei SAMP auch die Tabellen oder Spalten den Wert bspw. der Unicode-codierung haben muss.

    Es liegt ein Fehler meinerseits vor, was den Charakternamen betrifft, muss es ja, der Charaktername kann aus unerklärlichen Gründen irgendwie nicht in die String Variable cInfo[playerid][c_Name] gespeichert werden. Ich hab Mal eine ältere Version des Gamemodes verwendet was ich immer als sogenannter Backup mache, da wird der Charaktername korrekt ausgegeben, wobei ich beim aktuellen Gamemode nichts an der Auslesung verändert habe.


    Hier Mal der Callback wo der Charaktername aus der Datenbank geladen wird:

    Wie man sehen kann, sollte der Charaktername korrekt aus der Datenbank gelesen werden, was der ja allerdings nicht tut, bei der alten Version ist es 1:1 derselbe Callback, nichts verändert, aber allerdings möchte es nicht in die Variable speichern lassen.



    Um Fehler bei Umlauten zu beseitigen, muss es auf utf8 eingestellt sein. Zwecks der Charsetsetzung in deinen Script, schaue dir die Dokumentation deiner MySQL Version mal an.

    Die Kollation ist in der Datenbank als auch im Gamemode mithilfe der Charset-Setzung bereits auf utf8mb4_general_ci eingestellt, hab nämlich Mal ein Befehl erstellt wodurch die Rubrik Behörden in die Tabelle erstellt wird, der Umlaut Ö wird durch ein ? ersetzt. Ich denke Mal das es auf der Kollation utf8_general_ci sein muss, korrigiert mich wenn ich falsch liege.

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-

  • Hast du mal beim Callback geprintent?

    Oben im Code-Tag steht in der Zeile 69 printf, der String wird nicht geprintet bzw. ist „leer“.

    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-
    ~> S Z E R T O C K Z — I S — B A C K <~
    -—-—-—-—-—-—-—-—-—-—-—-—-—-—-