Autor Zpráva
zero0x
Profil
zdravim. chcel by som si vytvorit system, ktory by sluzil ako auto_increment v mysql, ibaze chcem retazce..

ale nie hocijake, v takomto tvare (spoluhlaska)(samohlaska)(spoluhlaska)(samohlaska)(spoluhlaska), aby vzniklo celkom lahko zapametovatelne slovo.

dalo by sa to generovat nahodne, ale tie retazce sa nesmu opakovat? take ze kontrolovat v db ci tam uz take je sa mi velmi nechce

akoby ste to vyriesili nejak podobne ako auto increment?
souki
Profil
jedině taky přičítat.... začít na BABAB a další dát BABAC, další BABAD
Bildr
Profil
<?

function strgen($delka) {

$samohlasky = array("a","e","i","o"); // to si doplň
$souhlasky = array("b","f","l","m","z");
$ret = "";

for($i = 0; $i < $delka; ++$i):

if($i%2):
$ret = $souhlasky[rand(0,count($souhlasky)-1)]."".$ret;
else:
$ret = $samohlasky[rand(0,count($samohlasky)-1)]."".$ret;
endif;

endfor;

return $ret;

}

echo(strgen(8));

?>

Obávám se ale, že uložení do databáze se stejně nevyhneš. Ukládej hash a pak porovnávej hash vystupu tyhle funkce.
Alphard
Profil
Bildr
jednodušší je array_rand();
Bildr
Profil
co není v hlavě je v rukách :) btw. tohle ti ale pojede i na php3
loyza
Profil
Řetězce se nesmí opakovat? Budou se generovat náhodně? Tak v tom případě se obávám, že pokud si to někam neuložíš tak tyhle dvě podmínky nesplníš. Předpokládám, že ty vygenerované řetězce budeš někde používat ne? Asi budou někde uložené ne? Tak se tam budeš muset podívat jestli vygenerovaný řetězec již existuje nebo ne.
zero0x
Profil
to ano, ale nechcem sa zbytocne spajat s databazou..

skor by som chcel nieco ako pocitadlo vygenerovanych cisel, a aby sa to negenerovalo nahodne ale zaradom. pocitadlo sa ulozi do suboru, a pokracujeme tam, kde sme skoncili.

nesmu sa opakovat v ziadnom pripade..
krteczek
Profil
zerox, dojdeš dostavu kdy zjistíš že ti někdo smaže již všechny předešlé generace, co potom? každý přístup na stránku kde se mění obsah v souborech může být kritický, a čím více lidí stránku navštěvuje tím větší je riziko. Jistější je db
zero0x
Profil
no este lepsie by bolo generovat tieto nazvy z hocijakeho cisla.. teda iba cisla 1 - (3x pocet variacii zo spoluhlasok + 2x pocet variacii zo samohlasok)..
zero0x
Profil
malo by to byt nieco ako ked prevadzas cislo z desiatkovej sustavy do sestnastkovej.. ale zlozitejsie
zero0x
Profil
myslite ze algorytmus ktory bude generovat vsetky moznosti a pri kazdej zistovat ci cislo v poradi sedi je optimalny?
zero0x
Profil
tak som to nakoniec zriesil cez databazu, mozno niekoho bude zaujimat kod


<?php 

class pristup{
static public $slovo;
static function existuje(){
include('db_.php');
$e = mysql_fetch_array(mysql_query(sprintf("select kod from pristup where kod='%s'", self::$slovo)));
if($e){
return true;
}else{
return false;
}
}
static function generuj(){
$spoluhlasky = array('b','c','d','f','g','h','j','k','l','m','n','p','r','s','t','v', 'z');
$samohlasky = array('a','e','i','o','u');
$slovo = $spoluhlasky[array_rand($spoluhlasky)].$samohlasky[array_rand($samohla sky)].$spoluhlasky[array_rand($spoluhlasky)].$samohlasky[array_rand($s amohlasky)].$spoluhlasky[array_rand($spoluhlasky)];
self::$slovo = $slovo;
return self::$slovo;
}
static function ziskajKod(){
while(true){
$slovo = self::generuj();
if(!self::existuje($slovo)){
break;
}
}
return $slovo;
}
}

echo pristup::ziskajKod();
?>
tiso
Profil
zero0x - takto? au...
zero0x
Profil
no, zase moze tam byt max jedno-dve pripojenie na databazu.. az take zle?
tiso
Profil
zero0x - nikde neukladáš kód do DB, ale problém je inde - v logike takejto funkcie - keď budeš mať veľa záznamov v DB, tak Ti funkcia bude stále viac kolidovať a čas na jej spracovanie sa bude predlžovať. Lineárne sa zvyšujúci počet záznamov bude generovať exponenciálne rastúcu záťaž servera a to nie je v poriadku.
zero0x
Profil
to je sice pravda v teorii, ale v praxi je to uplne inak, ved spolu tam bude 17*5*17*5*17=122825 moznosti, pri 1000 zaznamoch je pravdepodobnost, ze sa vykonaju 2 dotazy na DB 1:100, to cislo ma upokojuje.

prezradim o co ide, ide o nieco ako del.icio.us, teda mas svoje zalozky. a tento system je urceny na generaciu "odkazov pre kamarata" teda zadas iba /kolac.url a otvori sa dana stranka..

tieto kody sa budu generovat iba v pripade, ze pouzivatel klikne na tlacitko posli, teda ziadne zbytocne zaznamy..

inac zabavne slova generuje ten skript :D

fujuk
golos
kujih
vupat
kateh
duben
jijug
kanem
rocim
kodim
vozeh
cudim
juzum
dehet
sekes
ranon
bisaf
bibep
mucat
losas
jatoj

LOL :D, sa mi velmi paci, ze su lahko zapametatelne, to je trosku zjednodusenie pouzivania internetu, a keby sa tato funkcia ludom zapacila, bolo by to super =)
Toto téma je uzamčeno. Odpověď nelze zaslat.