Szerző Téma: Random telefonszám generálás mysql  (Megtekintve 3408 alkalommal)

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Random telefonszám generálás mysql
« Dátum: 2014. május 17. - 17:04:30 »
0 Show voters
Sziasztok!
Az alábbi kódom,melynek az lenne a célja,hogy megakadályozza a telefonszámok duplázódását,nem mûködik.
 
   new string[256];
            new Szam = random(8999) + 1000;
            new mysql_line[256];
            format(string, sizeof(string), \"SELECT Telefon FROM Jatekosok\");
            mysql_query(string);
            mysql_store_result();
            while(mysql_fetch_row(mysql_line))
            {
                    if(Szam == strval(mysql_line))
                    {
                            new i,Joszam;
                            for(i = 0; Joszam != 1; i++)
                            {
                                    Szam = random(8999) + 1000;
                                    if(Szam != strval(mysql_line))
                                    {
                                            Joszam = 1;
                                    }
                            }
                    }
            }
            mysql_free_result();
            format(string, sizeof(string), \"UPDATE Jatekosok SET Telefon = \'%d\' WHERE Nev=\'%s\'\", Szam, nev);
            mysql_query(string);
            JatekosInfo[playerid][Telefon]= Szam;[/code;

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #1 Dátum: 2014. május 17. - 17:11:55 »
0 Show voters
Lekérdezed hogy van-e már, és kész.
 
SELECT Nev,Telefonszam FROM Felhasznalok WHERE Telefonszam = 123

 
[mod]Code tag kihelyezve.[/mod]
« Utoljára szerkesztve: 2014. május 17. - 20:41:30 írta Dfoglalo »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #2 Dátum: 2014. május 17. - 17:40:47 »
0 Show voters
Így jó?
De miért nem jó  másik megoldás?
 
   new string[256];
            new JoSzam;
            new Szam = random(8999) + 1000;
            format(string, sizeof(string), \"SELECT * FROM Jatekosok WHERE Telefon=\'%d\'\",Szam);
            mysql_query(string);
            mysql_store_result();
            new value = mysql_num_rows();
            mysql_free_result();
            if(value == 1)
            {
                for(new x=0;JoSzam!=1;x++)
                {
                   Szam = random(8999) + 1000;
                         format(string, sizeof(string), \"SELECT * FROM Jatekosok WHERE Telefon=\'%d\'\",Szam);
                  mysql_query(string);
                  mysql_store_result();
                  value = mysql_num_rows();
                  mysql_free_result();
                  if(value == 0)
                  {
                     JoSzam=1;
                     break;
                  }
                }
            }

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #3 Dátum: 2014. május 17. - 19:06:01 »
0 Show voters
Most nem tudok konkrét kódot írni, bocsi.
Generálj random számot.
Válaszd ki az azonos számo(ka)t, de írd a query végére, hogy LIMIT 1, így nem fog továbbfutni, ha talált egyet.
Tárold az eredményeket, kérd le a talált sorok számát mondjuk a sorok változóba.
while(sorok)
{
amíg vannak sorok (1db), random szám, megint kérjen le, megint store_result, megint mysql_num_rows, és kész. Addig fogja lekérdezgetni, amíg nem lesz nulla azonos sor
}
Már lehet dolgozni ezzel a számmal.
Remélem nincs benne nagy hülyeség.
« Utoljára szerkesztve: 2014. május 22. - 15:48:43 írta KovaNovik »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #4 Dátum: 2014. május 23. - 18:02:13 »
0 Show voters
Ezt a kódot még én írtam anno, más segítségére sietve.
Azonban eredetileg nem ez volt a célja, hanem ez:
 
$Szam1 = rand(1, 4);
$Szam2 = rand(1, 4);
if($Szam1 == $Szam2)
{
        for($i= 0; $Joszam != 1; $i++)
        {
                $Szam2 = rand(1, 4);
                if($Szam2 != $Szam1)
                {
                        $Joszam = 1;
                }
        }
        $Joszam = 0;
        echo \'Amennyiben ezt az üzenetet látod, eleinte ugyanaz a két szám lett legenerálva.<br>
        Ezek után persze nem lenne szabad a szöveg alatt ugyanazt a két számot látnod.<br><br>\';
}
echo $Szam1;
echo \'<br>\';
echo $Szam2;

 
Az eredeti PHP kód teljesen jól mûködik, annak feladatát végezve. Aztán ezt átalakítottam a telefonszámos témához, de nem teljesen jól, csak a lényeget magyarázva, tehát nem 100%-osan mûködõ képesen, ugyanis amikor megegyezik a generált szám a meglévõvel, ugyan újat generál, de lehet, hogy megegyezik az az elõtti számok egyikével, szóval bukta kicsit a dolog. Azonban ezt most javítom, sokkal egyszerûbb módszerrel:
 
new mysql_string[64]; // A lekérdezést ebben a string típusú változóban tároljuk
new bool:Joszam = false; // Mondjuk azt a programnak, hogy a szám megfelelõ
new bool:MegfeleltEMar = false; // Ez arra fog kelleni, hogy megtudjuk, az új számot is ellenõriznünk kell e
new bool:EloszorKerdezunkE = true; // Ha az elsõ generált szám megfelelõ, ne fusson le ismét a ciklusmag
new Szam = random(8999) + 1000; // Generálunk egy random számot
while(Joszam == false) // Elindul ez a while ciklus. Addig ismétlõdik, ameddig a Joszam értéke true nem lesz
{
        format(mysql_string, sizeof(mysql_string), \"SELECT Teloszam FROM Jatekosok WHERE Teloszam = \'%d\'\", Szam); // Lekérdezés formázása, melyben a feltétel a generált szám lesz
        mysql_query(mysql_string); // Lekérdezés
        mysql_store_result(); // Eltároljuk az eredményt
        new Sorok = mysql_num_rows(); // Megnézzük, hogy hány sor felelt meg a feltételnek
        if(Sorok != 0) // Ha van találat, tehát a szám már szerepel az adatbázisban, akkor...
        {
                Szam = random(8999) + 1000; // ...generálunk egy másik random számot.
                MegfeleltEMar = false; // Ha esetleg az elõzõ próbálkozásnál már generáltunk volna a létezõ szám helyett egy újat, de az is létezne, visszaállítjuk az értéket falsera, amely azt jelzi, hogy a most generált számot is ellenõrznünk kell
                if(EloszorKerdezunkE == true) // Ez az elágazás nem lényegre törõ, viszont megakadályozza, hogy az EloszorKerdezunkE változó értéke feleslegesen falsera állítódgatjon minden nem megfelelõ szám esetében. Ugyanis ha az elsõ szám rossz volt - már pedig rossz volt, ha ez az elágazás lefut -, akkor...
                {
                        EloszorKerdezunkE = false; // ...beállítjuk, hogy nem elõször kérdezünk rá, hogy a szám megfelelõ e - elvégre rossz volt a szám, ami miatt ismét generálni fogunk egy random számot.
                }
        }
        else if(MegfeleltEMar == false) // De ha nem szerepel, viszont most generálunk elõször új számot a leutóbbi létezõ szám helyére, akkor még nem állítjuk megfelelõre a számot, de közeledünk ennek megtételéhez.
        {
                if(EloszorKerdezunkE == true) // Ha elõször generáltunk számot, akkor kiléphetünk a ciklusból, elvégre biztosan megfelelõ a szám
                {
                        Joszam = true; // A szám megfelelõvé tétele
                }
                else // Különben az újonnan generált számot is meg kell néznünk az adatbázisban, hogy szerepel e már
                {
                        MegfeleltEMar = true; // Beállítjuk, hogy ha az újonnan generált szám is megfelelõ, a ciklusból kilépjünk.
                }
        }
        else if(MegfeleltEMar == true)) // Ha az újonnan generált szám is megfelelõ volt, akkor...
        {
                Joszam = ture; // ...kiléphetünk a ciklusból, mert a számot megfelelõvé tesszük.
        }
}
mysql_free_result(); // Felszabadítod az erõforrást
// Itt már a Szam értékbe biztosan nem fog megegyezni más telefonszámok értékével. Ha egyszerre több játékos használja a dolgot, érdemes rá tenni egy playerid-s tömböt.
// Frissíted az adatbázist, vagy amit akarsz csinálni, például:
format(mysql_string, sizeof(mysql_string), \"UPDATE Jatekosok SET Teloszam = \'%d\' WHERE Nev = \'%s\'\", Szam, Nev(playerid));
mysql_query(mysql_string);

 
Ha nem mûködne a sorok megszámlálása, azért elnézést kérek, de nem igazán vágom már az R6-ot, ugyanis egy jó ideje már R38-at használok. Maga a kód pedig mûködik, ha nem írtam el semmit.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #5 Dátum: 2014. május 24. - 19:26:42 »
0 Show voters
Így le fog futni pár query (rossz esetben, vagy ha már sok telefonszám van), viszont (remélhetõleg) mûködik.
 
JatekosInfo[playerid][Telefon] = random(8999) + 1000; new kveri[256];
format(kveri, sizeof(kveri), \"SELECT Telefon FROM Jatekosok WHERE Telefon = \'%d\'\", JatekosInfo[playerid][Telefon]);
mysql_query(kveri);
mysql_store_result();
while(0 < mysql_num_rows()) { //Amíg van ilyen telefonszám, generálunk újat, és megint lekérjük, hogy megint megnézhesse.
mysql_free_result();
JatekosInfo[playerid][Telefon] = random(8999) + 1000;
format(kveri, sizeof(kveri), \"SELECT Telefon FROM Jatekosok WHERE Telefon = \'%d\'\", JatekosInfo[playerid][Telefon]);
mysql_query(kveri);
mysql_store_result();
}
format(kveri, sizeof(kveri), \"UPDATE Jatekosok SET Telefon = \'%d\' WHERE Nev = \'%s\'\", JatekosInfo[playerid][Telefon], nev);
mysql_query(kveri);

 
Sok szerencsét, további jó scriptelést! :thumbsup:
Spoiler for Pár számítás:
Szerk. & u.i.: gyenge matematikai tudással rendelkezõ egyénem megkísérelt egy kis számítást. Az eredmény: 1000 regisztrált játékos esetében, minden 9-10. vásárlásnál kell 3 helyett 4-szer queryt futtatni. Ez nem fogja kinyírni a szerveredet.  ;D
Ha pedig az ezzel a rendszerrel regisztrálható játékosok maximumát vesszük, 8-ból 5-ször (az esetek 62,5%-ában) kell dupla queryt futtatni.
« Utoljára szerkesztve: 2014. május 25. - 13:23:11 írta KovaNovik »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #6 Dátum: 2014. május 17. - 17:04:30 »
0 Show voters
Sziasztok!
Az alábbi kódom,melynek az lenne a célja,hogy megakadályozza a telefonszámok duplázódását,nem mûködik.
 
   new string[256];
            new Szam = random(8999) + 1000;
            new mysql_line[256];
            format(string, sizeof(string), \"SELECT Telefon FROM Jatekosok\");
            mysql_query(string);
            mysql_store_result();
            while(mysql_fetch_row(mysql_line))
            {
                    if(Szam == strval(mysql_line))
                    {
                            new i,Joszam;
                            for(i = 0; Joszam != 1; i++)
                            {
                                    Szam = random(8999) + 1000;
                                    if(Szam != strval(mysql_line))
                                    {
                                            Joszam = 1;
                                    }
                            }
                    }
            }
            mysql_free_result();
            format(string, sizeof(string), \"UPDATE Jatekosok SET Telefon = \'%d\' WHERE Nev=\'%s\'\", Szam, nev);
            mysql_query(string);
            JatekosInfo[playerid][Telefon]= Szam;[/code;

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #7 Dátum: 2014. május 17. - 17:11:55 »
0 Show voters
Lekérdezed hogy van-e már, és kész.
 
SELECT Nev,Telefonszam FROM Felhasznalok WHERE Telefonszam = 123

 
[mod]Code tag kihelyezve.[/mod]
« Utoljára szerkesztve: 2014. május 17. - 20:41:30 írta Dfoglalo »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #8 Dátum: 2014. május 17. - 17:40:47 »
0 Show voters
Így jó?
De miért nem jó  másik megoldás?
 
   new string[256];
            new JoSzam;
            new Szam = random(8999) + 1000;
            format(string, sizeof(string), \"SELECT * FROM Jatekosok WHERE Telefon=\'%d\'\",Szam);
            mysql_query(string);
            mysql_store_result();
            new value = mysql_num_rows();
            mysql_free_result();
            if(value == 1)
            {
                for(new x=0;JoSzam!=1;x++)
                {
                   Szam = random(8999) + 1000;
                         format(string, sizeof(string), \"SELECT * FROM Jatekosok WHERE Telefon=\'%d\'\",Szam);
                  mysql_query(string);
                  mysql_store_result();
                  value = mysql_num_rows();
                  mysql_free_result();
                  if(value == 0)
                  {
                     JoSzam=1;
                     break;
                  }
                }
            }

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #9 Dátum: 2014. május 17. - 19:06:01 »
0 Show voters
Most nem tudok konkrét kódot írni, bocsi.
Generálj random számot.
Válaszd ki az azonos számo(ka)t, de írd a query végére, hogy LIMIT 1, így nem fog továbbfutni, ha talált egyet.
Tárold az eredményeket, kérd le a talált sorok számát mondjuk a sorok változóba.
while(sorok)
{
amíg vannak sorok (1db), random szám, megint kérjen le, megint store_result, megint mysql_num_rows, és kész. Addig fogja lekérdezgetni, amíg nem lesz nulla azonos sor
}
Már lehet dolgozni ezzel a számmal.
Remélem nincs benne nagy hülyeség.
« Utoljára szerkesztve: 2014. május 22. - 15:48:43 írta KovaNovik »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #10 Dátum: 2014. május 23. - 18:02:13 »
0 Show voters
Ezt a kódot még én írtam anno, más segítségére sietve.
Azonban eredetileg nem ez volt a célja, hanem ez:
 
$Szam1 = rand(1, 4);
$Szam2 = rand(1, 4);
if($Szam1 == $Szam2)
{
        for($i= 0; $Joszam != 1; $i++)
        {
                $Szam2 = rand(1, 4);
                if($Szam2 != $Szam1)
                {
                        $Joszam = 1;
                }
        }
        $Joszam = 0;
        echo \'Amennyiben ezt az üzenetet látod, eleinte ugyanaz a két szám lett legenerálva.<br>
        Ezek után persze nem lenne szabad a szöveg alatt ugyanazt a két számot látnod.<br><br>\';
}
echo $Szam1;
echo \'<br>\';
echo $Szam2;

 
Az eredeti PHP kód teljesen jól mûködik, annak feladatát végezve. Aztán ezt átalakítottam a telefonszámos témához, de nem teljesen jól, csak a lényeget magyarázva, tehát nem 100%-osan mûködõ képesen, ugyanis amikor megegyezik a generált szám a meglévõvel, ugyan újat generál, de lehet, hogy megegyezik az az elõtti számok egyikével, szóval bukta kicsit a dolog. Azonban ezt most javítom, sokkal egyszerûbb módszerrel:
 
new mysql_string[64]; // A lekérdezést ebben a string típusú változóban tároljuk
new bool:Joszam = false; // Mondjuk azt a programnak, hogy a szám megfelelõ
new bool:MegfeleltEMar = false; // Ez arra fog kelleni, hogy megtudjuk, az új számot is ellenõriznünk kell e
new bool:EloszorKerdezunkE = true; // Ha az elsõ generált szám megfelelõ, ne fusson le ismét a ciklusmag
new Szam = random(8999) + 1000; // Generálunk egy random számot
while(Joszam == false) // Elindul ez a while ciklus. Addig ismétlõdik, ameddig a Joszam értéke true nem lesz
{
        format(mysql_string, sizeof(mysql_string), \"SELECT Teloszam FROM Jatekosok WHERE Teloszam = \'%d\'\", Szam); // Lekérdezés formázása, melyben a feltétel a generált szám lesz
        mysql_query(mysql_string); // Lekérdezés
        mysql_store_result(); // Eltároljuk az eredményt
        new Sorok = mysql_num_rows(); // Megnézzük, hogy hány sor felelt meg a feltételnek
        if(Sorok != 0) // Ha van találat, tehát a szám már szerepel az adatbázisban, akkor...
        {
                Szam = random(8999) + 1000; // ...generálunk egy másik random számot.
                MegfeleltEMar = false; // Ha esetleg az elõzõ próbálkozásnál már generáltunk volna a létezõ szám helyett egy újat, de az is létezne, visszaállítjuk az értéket falsera, amely azt jelzi, hogy a most generált számot is ellenõrznünk kell
                if(EloszorKerdezunkE == true) // Ez az elágazás nem lényegre törõ, viszont megakadályozza, hogy az EloszorKerdezunkE változó értéke feleslegesen falsera állítódgatjon minden nem megfelelõ szám esetében. Ugyanis ha az elsõ szám rossz volt - már pedig rossz volt, ha ez az elágazás lefut -, akkor...
                {
                        EloszorKerdezunkE = false; // ...beállítjuk, hogy nem elõször kérdezünk rá, hogy a szám megfelelõ e - elvégre rossz volt a szám, ami miatt ismét generálni fogunk egy random számot.
                }
        }
        else if(MegfeleltEMar == false) // De ha nem szerepel, viszont most generálunk elõször új számot a leutóbbi létezõ szám helyére, akkor még nem állítjuk megfelelõre a számot, de közeledünk ennek megtételéhez.
        {
                if(EloszorKerdezunkE == true) // Ha elõször generáltunk számot, akkor kiléphetünk a ciklusból, elvégre biztosan megfelelõ a szám
                {
                        Joszam = true; // A szám megfelelõvé tétele
                }
                else // Különben az újonnan generált számot is meg kell néznünk az adatbázisban, hogy szerepel e már
                {
                        MegfeleltEMar = true; // Beállítjuk, hogy ha az újonnan generált szám is megfelelõ, a ciklusból kilépjünk.
                }
        }
        else if(MegfeleltEMar == true)) // Ha az újonnan generált szám is megfelelõ volt, akkor...
        {
                Joszam = ture; // ...kiléphetünk a ciklusból, mert a számot megfelelõvé tesszük.
        }
}
mysql_free_result(); // Felszabadítod az erõforrást
// Itt már a Szam értékbe biztosan nem fog megegyezni más telefonszámok értékével. Ha egyszerre több játékos használja a dolgot, érdemes rá tenni egy playerid-s tömböt.
// Frissíted az adatbázist, vagy amit akarsz csinálni, például:
format(mysql_string, sizeof(mysql_string), \"UPDATE Jatekosok SET Teloszam = \'%d\' WHERE Nev = \'%s\'\", Szam, Nev(playerid));
mysql_query(mysql_string);

 
Ha nem mûködne a sorok megszámlálása, azért elnézést kérek, de nem igazán vágom már az R6-ot, ugyanis egy jó ideje már R38-at használok. Maga a kód pedig mûködik, ha nem írtam el semmit.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Random telefonszám generálás mysql
« Válasz #11 Dátum: 2014. május 24. - 19:26:42 »
0 Show voters
Így le fog futni pár query (rossz esetben, vagy ha már sok telefonszám van), viszont (remélhetõleg) mûködik.
 
JatekosInfo[playerid][Telefon] = random(8999) + 1000; new kveri[256];
format(kveri, sizeof(kveri), \"SELECT Telefon FROM Jatekosok WHERE Telefon = \'%d\'\", JatekosInfo[playerid][Telefon]);
mysql_query(kveri);
mysql_store_result();
while(0 < mysql_num_rows()) { //Amíg van ilyen telefonszám, generálunk újat, és megint lekérjük, hogy megint megnézhesse.
mysql_free_result();
JatekosInfo[playerid][Telefon] = random(8999) + 1000;
format(kveri, sizeof(kveri), \"SELECT Telefon FROM Jatekosok WHERE Telefon = \'%d\'\", JatekosInfo[playerid][Telefon]);
mysql_query(kveri);
mysql_store_result();
}
format(kveri, sizeof(kveri), \"UPDATE Jatekosok SET Telefon = \'%d\' WHERE Nev = \'%s\'\", JatekosInfo[playerid][Telefon], nev);
mysql_query(kveri);

 
Sok szerencsét, további jó scriptelést! :thumbsup:
Spoiler for Pár számítás:
Szerk. & u.i.: gyenge matematikai tudással rendelkezõ egyénem megkísérelt egy kis számítást. Az eredmény: 1000 regisztrált játékos esetében, minden 9-10. vásárlásnál kell 3 helyett 4-szer queryt futtatni. Ez nem fogja kinyírni a szerveredet.  ;D
Ha pedig az ezzel a rendszerrel regisztrálható játékosok maximumát vesszük, 8-ból 5-ször (az esetek 62,5%-ában) kell dupla queryt futtatni.
« Utoljára szerkesztve: 2014. május 25. - 13:23:11 írta KovaNovik »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal