[Hilfe]bei random MySQL

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 morgen zusammen.



    ich bin gerade dabei ein handysystem zu schreiben. soweit klappt es
    auch bis auf ein paar bugs die aber kein problem darstellen. wo ich aber nicht
    weiter komme ist-


    ich möchte jeden spieler eine generiete nummer zuweisen. dabei soll er aber in der datenbank
    durchschaun ob die schon vergeben ist. nur funtzt das bei nicht.


    ich hatte erst überlegt so zu machen.

    stock mysql_CheckHandyNummer(playerid)
    {
    new Query[128],count;
    new rand = random(999999)+111111;
    mysql_real_escape_string(SpielerName(playerid), SpielerName(playerid));
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `HandyNummer` = '%s'",rand);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }

    und genau da hänge ich jetzt fest. egal was ich mache oder änder es klappt einfach nicht. das ist nur ein versuch von vielen.


    ich hoffe mir kann da jemand weiterhelfen und ein fettes danke im vorraus


    mfg nicki

    Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher.
    "Albert Einstein"

  • Du fragst ab ob die Hanynummer die generierte Zahl ist...
    WHERE `HandyNummer` = '%s'

    Lösungsvorschlag:

    SQL
    mysql_query("UPDATE accounts SET HandyNummer='%s' WHERE Username='%s'",rand,playerid);


    nicki85:

    5 Mal editiert, zuletzt von [NRL] TraXters () aus folgendem Grund: Syntax

  • hi TraXters


    erstmal danke für deine antwort :thumbup:


    soweit kann ich dir folgen. nur wie verfahre ich dann weiter
    wenn er die zahlen vergliechen hat und sie nicht übereinstimmen?
    das er dann die generierte zahl gespeichert oder falls es sie schon gibt ne neue erstellt?


    ich werd noch bekloppt damit

    Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher.
    "Albert Einstein"

  • Du fragst ab ob die Hanynummer die generierte Zahl ist...
    WHERE `HandyNummer` = '%s'

    Lösungsvorschlag:

    SQL
    mysql_query("UPDATE accounts SET HandyNummer='%s' WHERE=Username='%s'",playerid,rand);


    nicki85:

    Das ist doch kompletter Schwachsinn. Wenn Du keine Ahnung hast, lass es! Er will es erstens nicht Updaten, sondern prüfen ob ein Eintrag mit dieser Bedingung schon vorhanden ist und zweitens ist die Variable "rand" ein Integer und kein String!


    @Threadersteller:
    Du hast soweit eigentlich alles richtig gemacht.
    Ändere aber bitte Deinen Query in folgendes:


    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `HandyNummer` = %d",rand);



    Da Random ein Integer ist und kein String, sollte der Query erfolgreicht ausgeführt werden können.
    Du könntest Deine Stock aber noch wie folgt abändern:


    stock mysql_CheckHandyNummer(playerid)
    {
    new Query[128],count;
    new rand = random(999999)+111111;
    mysql_real_escape_string(SpielerName(playerid), SpielerName(playerid));
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `HandyNummer` = %d",rand);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows(); if(mysql_num_rows() > 0) { mysql_free_result(); return true; } else { mysql_free_result(); return false; }

    }


    //edit:
    Hab Dir das nochmal in Pastebin.com gemacht. Leider ist der MAC auf meiner Arbeit nicht so gut^^
    http://pastebin.com/AXfdaZVA

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • Hi, nicki85,


    Ganz easy mein Freund :)


    SQL
    UPDATE `accounts` SET `HandyNummer` = '%i' WHERE `HandyNummer` = '' AND `Username` = '%s'


    Aufruf:

    mysql_query("UPDATE `accounts` SET `HandyNummer` = '%i' WHERE `HandyNummer` = '' AND `Username` = '%s'", rand, SpielerName);


    Wenn du die Query einmal für jeden Benutzer durchjagst, erstellt er die Handy-Nummer falls nicht vorhanden.


    Edit: Daten-Typen angepasst
    Edit2: Nur Ich würde aufpassen, Random für eine HandyNummer ist nicht gut. Könnten ja Duplikate entstehen

    Benutze hauptsächlich folgende Technologien: Hyper-V, KVM, OpenVZ, Xen, PHP, C++, Exchange 2010, Citrix, KDTOP

    Einmal editiert, zuletzt von Silver.Star ()

  • Jony und Silver.Star danke


    dann sollte es doch eig klappen wenn ich das direct mache

    stock mysql_CheckHandyNummer(playerid)
    {
    new Query[128],count;
    new rand = random(999999)+111111;
    mysql_real_escape_string(SpielerName(playerid), SpielerName(playerid));
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `HandyNummer` = %d",rand);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    if(mysql_num_rows() > 0)
    {
    mysql_free_result();
    mysql_query("UPDATE accounts SET HandyNummer='%i' WHERE Username='%s'", rand, SpielerName);
    return true;
    }
    else
    {
    mysql_free_result();
    return false;
    }
    }

    ist jetzt nur n beispiel hab es noch nicht probiert

    Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher.
    "Albert Einstein"

  • Nein, wenn Du jetzt einen Eintrag mit dieser Nummer schon vorhanden hast trägt er diese nochmal ein. Bitte in das "else-Statemen" den Query verschieben.

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • sorry für die späte antwort


    @ jony


    ja hab den fehler auch gesehn. bekomme jetzt aber 3 warnings (warning 213: tag mismatch)
    dabei geht es um das



    stock boolean: mysql_CheckHandyNummer(playerid)
    {
    new Query[128];
    new rand = random(999999)+111111;
    mysql_real_escape_string(SpielerName(playerid), SpielerName(playerid));
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `HandyNummer` = %d",rand);
    mysql_query(Query);
    mysql_store_result();
    if(mysql_num_rows() > 0)
    {
    mysql_free_result();
    return true; //warning 1
    }
    else
    {
    mysql_free_result();
    return false; //warning 2
    }
    }

    //Verwendung

    if(mysql_CheckHandyNummer(playerid) == true) //warning 3
    {
    // Brich ab, wenn ein Eintrag vorhanden ist
    } else {
    //Kein Eintrag vorhanden
    }


    ich bekomme die warnings auch nicht weg



    edit: rechtschreibung

    Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher.
    "Albert Einstein"

  • das ist jetzt peinlich :D ich seh mir das seit 2 stunden an und hab es nicht gesehn


    @ Necktrox: danke

    Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher.
    "Albert Einstein"