Fahrzeuge werden nicht in der Datenbank gespeichert

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
  • Hey ich weiß echt nicht was ich falsch mache hier ist alles was ich habe:


    saveCarToDB(playerid,carid)
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f,'%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_query(handle,query);
    return 1;
    }


    createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    GetPlayerName(playerid,cInfo[i][besitzer],MAX_PLAYER_NAME);
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][model]=modelid;
    cInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    new string[128];
    format(string,sizeof(string),"[ADMINLOG]Das Fahrzeug [%i] wurde erstellt!",i);
    SendClientMessage(playerid,DUNKELROT,string);
    saveCarToDB(playerid,i);
    return 1;
    }
    return 1;
    }


    ocmd:veh(playerid,params[])
    {
    if(!isAdmin(playerid, 3))return SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    new mID, pID;
    if(sscanf(params,"ui",pID,mID))return SendClientMessage(playerid,DUNKELROT,"[INFO] /veh [modelid]");
    if(mID<=400 ||mID>611)return SendClientMessage(playerid,DUNKELROT,"Ungültige Model ID!");
    new Float:xc,Float:yc,Float:zc,Float:rc;
    GetPlayerPos(playerid,xc,yc,zc);
    GetPlayerFacingAngle(playerid,rc);
    createPlayerCar(pID,mID,xc,yc,zc,rc);
    return 1;
    }


    enum carEnum{
    id_x,
    model,
    besitzer[MAX_PLAYER_NAME],
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r
    }


    Und nach einem gmx stehen die Fahrzeuge nicht mehr dort und in der Datenbank sieht es einfach nur so aus: http://prntscr.com/gd6583



    MfG. ^^

  • Vielleicht ist die Zeichenlänge von 128 für den Query zu kurz? Das schon überprüft? Ändere es doch testweise mal zu 512.
    Könntest du den MySQL Error schicken falls einer vorhanden ist?



    Edit: Ich glaube ich sehe den Fehler, dir fehlt wohl einfach noch ein '%f' bei den Parametern.


    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f,'%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);

    Einmal editiert, zuletzt von Stahlos ()

  • Also an dem %f lag es nicht hab jetzt mal den string auf 512 gemacht mal schauen ob es jetzt klappt bekomme aber auch wenn ich /veh nicht das hier:


    new string[128]format(string,sizeof(string),"[ADMINLOG]Das Fahrzeug [%i] wurde erstellt!",i);



    Edit.
    Doch die nachricht kam jetzt aber in der DB ist das Fahrzeug immer noch nicht vorhanden.


  • stock GetSpielerName(playerid)
    {
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, SpielerName, sizeof(SpielerName));
    return SpielerName;
    }




    Wenn du den carEnum anschaust, dann siehst du, dass die Variabel 'besitzer[MAX_PLAYER_NAME]' als String deklariert ist. Unter deiner saveCarToDB wird aktuell der Variabel 'besitzer' die Datenbank-ID des Spielers zugewiesen. (Besitzer, %i, PlayerInfo[playerid][p_id]). .
    Deswegen musst du das einmal ändern.


    Die Funktion 'createPlayerCar' kann man so lassen.


    Schau dir die Zeile 5 beim '/veh'-Befehl an. Da musst du noch die Info anpassen... Du erstellst ja für bestimmte Spieler Autos und nicht wahllos. SendClientMessage(playerid, DUNKELROT, "[INFO] /veh [playerid] [modelid]");

  • Sieht jetzt so aus:


    saveCarToDB(playerid,carid){new query[512];format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%s','%i','%f,'%f','%f','%f')",GetSpielerName(playerid),cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);mysql_query(handle,query);return 1;}


    und der Befehl:


    ocmd:veh(playerid,params[])
    {
    if(!isAdmin(playerid, 3))return SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    new mID, pID;
    if(sscanf(params,"ui",pID,mID))return SendClientMessage(playerid,DUNKELROT,"[INFO] /veh [playerid] [modelid]");
    if(mID<=400 ||mID>611)return SendClientMessage(playerid,DUNKELROT,"Ungültige Model ID!");
    new Float:xc,Float:yc,Float:zc,Float:rc;
    GetPlayerPos(playerid,xc,yc,zc);
    GetPlayerFacingAngle(playerid,rc);
    createPlayerCar(pID,mID,xc,yc,zc,rc);
    return 1;
    }


    Und trotzdem wird nichts in der DB gespeichert...
    http://prntscr.com/gdddqw

  • Ja das habe ich am Anfang schon vermutet.. Bearbeite 'besitzer' und stelle den Typ auf varchar und als länge nimmst du 24 (ist die maximale länge von MAX_PLAYER_NAME)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Vergiss sämtliche Änderungen, die dir vorgeschlagen worden, folgendes ist dein Problem:


    1.


    Code
    VALUES ('%i','%i','%f('),'%f','%f')


    Siehst du den Fehler? Du hast ein Hochkomma vergessen (habe es durch die Klammer ersetzt) Das muss hinzugefügt werden.


    2.


    Code
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f,'%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);

    Du möchtest 6 Spalten einem Wert zu weisen beim neuen Datensatz, übergibst aber nur 5 Werte? Innerhalb der Klammer VALUES() befinden sich nämlich nur 5 Werte statt 6.


    Auch würde ich die Länge von 127+1 vom Query erhöhen, da kannst du schnell an dein Limit kommen.

  • @Manuel benutze R41


    @Douq Also ich hab es jetzt so geändert:


    saveCarToDB(playerid,carid)
    {
    new query[256];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f,'%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_query(handle,query);
    cInfo[carid][cardb] = cache_insert_id();
    return 1;
    }


    Und trotzdem wird es nicht in der DB gespeichert :(

  • @Douq


    Sry hab das falsche eingefügt so sieht es aus:


    saveCarToDB(playerid,carid)
    {
    new query[256];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f,'%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_query(handle,query);
    cInfo[carid][cardb] = cache_insert_id();
    return 1;
    }


    Aber es wird echt nicht gespeichert ...

  • Möchtest du es speichern oder in die Datenbank einpflegen? Weil durch den Query wird kein Datensatz aktualisiert, sondern ein neuer erstellt. Sonst nutze einfach mal den debug Modus und schau, welche Fehlermeldung dir zurückgegeben wird. Zusätzlich kannst du dir mal den Query per printf() ausgeben lassen und diesen manuell ausführen (bspw per phpMyAdmin).


  • saveCarToDB(playerid,carid)
    {
    new query[256];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);mysql_query(handle,query);
    cInfo[carid][cardb] = cache_insert_id();
    return 1;
    }


    Nochmal hier damit du den fehler jetzt auch siehst:


    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);


    Der Fehler liegt bei der Rot Markierten stelle, dort hast du genau das ' vergessen, daher gab es auch keinen Datenbankeintrag.

    05eb03de-9fda-461c-9dfc-834ae5b64e65.png << Server | Home >> 13462590508.png

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen