Datenbank wird nicht gelöscht

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
  • Moin ^^


    Ich hab hier ein Problem mit diesem Befehle ich erkläre es euch dann wieder an einem Beispiel^^


    CMD:copcarloeschen(playerid, params[])
    {
    new vid;
    if(!IsNumeric(params) || !strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nutze: /copcardelete [Vehicle ID]");
    vid = strval(params);
    handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
    if(vid <= 0) return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
    for(new i=0; i<MAX_cop_VEHICLES; i++)
    {
    if(copVehicle[i][e_vID] == vid)
    {
    copVehicle[i][e_modelID] = 0;
    copVehicle[i][e_x] = 0.0;
    copVehicle[i][e_y] = 0.0;
    copVehicle[i][e_z] = 0.0;
    copVehicle[i][e_a] = 0.0;
    copVehicle[i][e_color1] = 0;
    copVehicle[i][e_color2] = 0;
    new query[128];
    format(query, sizeof(query), "DELETE FROM copVehicles WHERE ID = '%d'", i);
    mysql_tquery(handle, query);
    DestroyVehicle(copVehicle[i][e_vID]);
    copVehicle[i][e_vID] = 0;
    return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gelöscht.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
    }


    Beispiel:


    Ich will ein Auto löschen gebe den befehl ein
    Auto wird gelöscht aber nur ingame
    Datenbank bleibt weiterhin bestehen im MySQL log keine error


    ich will das er die ganze zeile löscht

  • Hat die Variable den gleichen Wert/Inhalt wie i?

    am besten ich schreibe den Command neu denn sonst komm ich durcheinander kann mir da jemand helfen wie Fang ich an? Und ich lerne besser^^
    Ist es möglich das man durch die Car ID die Datenbank ID herausfindet und das man praktisch nur /copcarloeschen [carid] machen muss und dann verschwindet er ingame und in der Datenbank

  • Mit "herausfinden" ist nichts. Beim Laden von einem Vehicle musst du die id des Datenbankeintrags vom Fahrzeug schön brav mit laden^^ Dann funktioniert das, sonst auf keinen Fall.


    Sende mal die Load Function wo du diese Fahrzeuge lädst.

    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.

  • Mit "herausfinden" ist nichts. Beim Laden von einem Vehicle musst du die id des Datenbankeintrags vom Fahrzeug schön brav mit laden^^ Dann funktioniert das, sonst auf keinen Fall.


    Sende mal die Load Function wo du diese Fahrzeuge lädst.

    public LoadcopVehicles_Data()
    {
    new rows, id, createdVehs;
    rows = cache_num_rows();
    for(new i=0; i<rows; i++)
    {
    cache_get_value_int(i, "ID",copVehicle[id][e_vID]);
    if(id < 0 || id >= MAX_cop_VEHICLES) continue;
    cache_get_value_int(i, "ModelID",copVehicle[id][e_modelID]);
    cache_get_value_float(i, "PosX",copVehicle[id][e_x]);
    cache_get_value_float(i, "PosY",copVehicle[id][e_y]);
    cache_get_value_float(i, "PosZ",copVehicle[id][e_z]);
    cache_get_value_float(i, "PosA",copVehicle[id][e_a]);
    cache_get_value_int(i, "Color1",copVehicle[id][e_color1]);
    cache_get_value_int(i, "Color2",copVehicle[id][e_color2]);
    if(copVehicle[id][e_modelID] >= 400 && copVehicle[id][e_modelID] <= 611)
    {
    copVehicle[id][e_vID] = CreateVehicle(copVehicle[id][e_modelID], copVehicle[id][e_x], copVehicle[id][e_y], copVehicle[id][e_z], copVehicle[id][e_a], copVehicle[id][e_color1], copVehicle[id][e_color2], -1);
    }
    else
    {
    printf("[Error] Model-ID %d existiert nicht (ID: %d).", copVehicle[id][e_modelID], id);
    }


    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
    createdVehs++;
    if(createdVehs == MAX_cop_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_cop_VEHICLES) erreicht.");
    }
    return 1;
    }

  • copVehicle[id][e_vID]

    Die Datenbank-ID vom Fahrzeug wird in diese Variable gespeichert.


    Demnach ersetze mal


    format(query, sizeof(query), "DELETE FROM copVehicles WHERE ID = '%d'", i);


    zu so


    format(query, sizeof(query), "DELETE FROM copVehicles WHERE ID = '%d'",copVehicle[i][e_vID]);

    Und sage ob es funktioniert.

    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.

  • Fahrzeug ist immer noch in der Datenbank

  • e_vID weist du zwar anfangs der DatenbankID zu, aber überschreibst sie dann wieder mit der vehicleID vom server.


    Ansatz wäre du erweiterst dein ENUM um eine variable und speicherst darin die DatenbankID. Dann brauchst du nur deine Query wieder anpassen und es sollte funktionieren.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • e_vID weist du zwar anfangs der DatenbankID zu, aber überschreibst sie dann wieder mit der vehicleID vom server.


    Ansatz wäre du erweiterst dein ENUM um eine variable und speicherst darin die DatenbankID. Dann brauchst du nur deine Query wieder anpassen und es sollte funktionieren.

    Also ich hab jetzt eine variable im ENUM hinzugefügt "e_DatabaseID" und jetzt soll ich die in der Query einfach einfügen und was damit machen?

  • Es ist eine Qual am Handy zu zitieren..


    Du ersetzt bei deiner lade Funktion die Zeile
    cache_get_value_int(i, "ID",copVehicle[id][e_vID]);
    zu
    cache_get_value_int(i, "ID",copVehicle[id][e_DatabaseID]);
    Deine Query sähe so aus
    format(query, sizeof(query), "DELETE FROM copVehicles WHERE ID = '%i'",copVehicl][e_DatabaseID]);


    Wenn du jetzt überlegst, müsstest du wissen wo der Fehler war. :)

  • Dann Debug das Script.
    mach bitte unter :

    format(query, sizeof(query), "DELETE FROM copVehicles WHERE ID = '%d'", i);

    das rein:
    printf("%s", query);


    Dann löschst du Ingame das Fahrzeug. Der SQL-Befehl wird in der Server-Log gespeichert.
    Den SQL-Befehl kopierst du und führst ihn direkt in deine Datenbank (phpMyAdmin) aus....erstens siehst du ob eine gültige ID in dem SQL Befehl ist zum Löschen eines Fahrzeuges oder du hast ein Fehler in der Datenbank...das ist einfacher für dich.

    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.

  • Gerade nochmal deine LoadcopVehicles_Data() angesehen.


    du hast die Variable id die immer den Wert 0 hat,


    erstelle bitte eine neue Function:


    Code
    getFreeCarID() {
         for(new i=0; i < MAX_VEHICLES; i++) {
              if(copVehicle[i][e_vID] == 0) return i;
         }
         return -255;
    }

    und in deine Load Function machst du bitte IN DER FOR - SCHLEIFE:
    id = getFreeCarID();


    Ich denke das sollte dein Fehler beheben

    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.

  • Also bei mir geht alles wunderbar nur jetzt noch die letzte finale frage dann ist alles perfekt


    wie gleiche ich die MySQL ID mit der ingame id ab? https://pic-upload.pw/img/0cd

  • copVehicle[id][e_vID] = CreateVehicle(copVehicle[id][e_modelID], copVehicle[id][e_x], copVehicle[id][e_y], copVehicle[id][e_z], copVehicle[id][e_a], copVehicle[id][e_color1], copVehicle[id][e_color2], -1);

    Neuen Enum erstellen und statt e_vID bei CreateVehicle zu verwenden, verwendest du eine neue......


    Sonst überschreibst du die DatenbankID mit der VehicleID :p

    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.

  • Neuen Enum erstellen und statt e_vID bei CreateVehicle zu verwenden, verwendest du eine neue......
    Sonst überschreibst du die DatenbankID mit der VehicleID :P

    Schade wollte mir gerade mal angucken wie ein /carsell command funktioniert aber der funktioniert ja mit dem Spielernamen das ist hier ja schlecht möglich