Random Zahl nicht wiederholen

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
  • Hallo Leute..


    ich möchte beim Register, das der Spieler eine Handynummer durch ein Random bekommt,
    wie kann ich verhindern, das diese doppelt auftritt, hab da bis jetzt noch keine venünftige Lösung gefunden..


    Wenns geht könnt ihr mir auch kleine Schnipsel geben ;)


    Mfg

  • Dann ists doch einfach...


    Machste einfach ein MySQL Query ob es die Nummer gibt, (SELECT * FROM whatever WHERE Nummer = *Numm0r*)
    Und dann

    new rows = mysql_num_rows(query) // ((Syntax kann abweichen))
    if(rows > 0)
    {
    //Nummer gibt es bereits

    Feddig, kannst dann ja dort eine neue generieren und dann nochmal suchen z.B.

  • stock GiveHandyNummer(playerid)
    {
    new nummer = random(999999);
    new query[130];
    format(query, sizeof(query), "SELECT `HandyNummer` FROM `accounts` WHERE `HandyNummer` = '%d'", nummer);
    mysql_query(query);
    new rows = mysql_num_rows(query);// Diese Zeile ist der Error
    if(rows > 0)
    {
    GiveHandyNummer(playerid);
    return 1;
    }
    SetPVarInt(playerid, "HandyNummer", nummer);
    return 1;
    }


    Hab es jetzt so gemacht..


    Kenn mich mit mysql noch nicht so gut aus von daher weiss ich nicht ob das richtig ist ;)
    aber laut dem Error nicht: Zeile ist oben markiert..
    bekomme auch diesen Error: error 035: argument type mismatch (argument 1)

    Einmal editiert, zuletzt von Niko1561 () aus folgendem Grund: Fehler entdeckt ;)

  • ich würde die nummer in einen string umwandelt der 6 stellen lang ist damit du keine nummer 334 hast obwohl mann 6 stellige braucht.



    new nummerstr[7];
    format(nummerstr, 7, "%06d", nummer);


    /e
    bei mysql_num_rows brauchst du keinen string (glaube) also einfach mysql_num_rows();


    MFG Piet

  • Danke, aber sonst müsste das funktionieren?


    Tut es leider nicht..
    Hab eine 6 Stellige Nummer bekommen, die Variable "nummer" auf genau diesen Wert gesetzt und bekomme diesselbe nummer wieder ohne das er das neu ausführt, was er eigentlich machen sollte.
    Ich hab das mysql_query auch rausgenommen ;)



    stock GiveHandyNummer(playerid)
    {
    new nummer = random(999999);
    new query[130];
    format(query, sizeof(query), "SELECT `HandyNummer` FROM `accounts` WHERE `HandyNummer` = '%d'", nummer);
    new rows = mysql_num_rows();
    if(rows > 0)
    {
    print("Wird ausgeführt");
    GiveHandyNummer(playerid);
    return 1;
    }
    SetPVarInt(playerid, "HandyNummer", nummer);
    mysql_SetInt("accounts", "HandyNummer", nummer, "Name",SpielerName(playerid));
    return 1;
    }


    das ist mein aktueller Code (versuch)

    3 Mal editiert, zuletzt von Niko1561 () aus folgendem Grund: added

  • new rows = mysql_num_rows();
    if (rows > 0)


    ist unnötig.
    if (mysql_num_rows()) reicht da völlig aus.


    ansonsten siehts so weit richtig aus.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Habe ich doch, selbst wenn die nummer gleich ist, wird sie als "Nummer" eingetragen.
    Heißt:
    if(rows > 0) {
    print("Wird ausgeführt");
    GiveHandyNummer(playerid);
    return 1; }


    das wird nicht ausgeführt
    Fehler behoben^^ danke

    Einmal editiert, zuletzt von Niko1561 ()

  • wiso du fragst erst ab ob sie da ist wenn nein speichern wenn ja neu generieren dann neu abfragen


    naya, so wie ich das jetzt verstanden habe, wird jede verwendete kto nochmal in einer datenbank gespeichert ?
    und zusätzlich wird die kto warscheinlich noch in der spielerdatei gespeichert ?
    Klar, das macht nicht so viel aus..., trotzdem nicht besonders schön/sauber


    oder hab ich das jetzt falsch verstanden ?

  • Du musst es in eine else setzen oder den Wert für rows ändern


    Code
    if(rows > 0)	{
     print("Wird ausgeführt");
     GiveHandyNummer(playerid);
     return 1;  }


    Bedeutet ja: Wenn mehrere Ergebnisse gefunden wurden in der Datenbank, dann gib ihm die Handynummer trotzdem.


    Musst also sein:


    Code
    if(rows == 0)	{
     print("Wird ausgeführt");
     GiveHandyNummer(playerid);
     return 1;  
    } 
    else 
    {
    new nummer = random(999999);
    // Und wieder von vorne anfangen
    }


    Oder du setzt es in eine for-Schleife. Sollte einfacher sein, als mit if :P


    MfG

    LA-CNR.com


    9c4d85d1ba1a8c0b181e0694ba4532fb.png