Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Struktura pyramidy se zaznačením ID toho, který pozval v DB u nově registrovaného

kulisek926
verified
rating uzivatele
3. 5. 2014 14:19:21
Dobrý den.
Potřeboval bych poradit jak něco napsat. Mám udělanou registraci i zdrojový kód na vytvoření odkazu pro registraci přátel, že když mu dám ten unikátní odkaz tak se zaregistruje pode mě.
Když se zaregistruji tak ten, který mě pozval dostane odměnu (přičtou se mu dny). Potřebuji k tomu všemu přidat, aby se stalo toto:
Já se zaregistruji a v DB budu mít ID 1 a ve sloupci id_parent bude 0, protože jsem první.
Pozvu pana Nováka, ten bude mít třeba ID 5 a ve sloupci id_parent bude mít 1, protože jsem ho pozval já.
Pan Novák pozve pana Vomáčku, ten bude mít třeba ID 8 a ve sloupci id_parent bude mít číslo 5, protože ho pozval pan Novák.
Toto vše bude fungovat až do páté úrovně. Tedy např. Já, pan Novák, pan Vomáčka, paní Nováková, paní Vomáčková a pan Chytrý. Když se ovšem následně někdo zaregistruje pod pana Chytrého tak se mu u jména objeví ID parenta tedy ID pana Chytrého, ale vše bude fungovat do páté úrovně tedy já došáhnu jenom na pana Chytrého, protože ten je ve struktuře na 5 úrovni a tedy za toho pana pod panem Chytrým již nic nedostanu.
A zase to musí fungovat i tak, že pan Novák pozval pana Vomáčku a tedy pan Vomáčka je pro něj jako první úrověň atd až do páté úrovně. V každé úrovni může být nespočet lidí.
Odměna se bude přičítat ručně, jenom toto potřebuji, abych se pak vyznal v tom kdo ke komu patří.
registrace.php
include ("./config2.php");
function sendRegistrationMail($sUsername, $sJmeno, $sPrijmeni, $sPassword, $sEmail,
$sDatumRegistrace, $sParent) {
// echo ">" . $sParent . "<"; die;
$aPathInfo = pathinfo($_SERVER);
$sConfirmUrl =
($aPathInfo != "/") ?
"http://{$_SERVER}{$aPathInfo}/RegistrationConfirm.php?kod=" .
sha1($sEmail . $sDatumRegistrace) :
"http://{$_SERVER}/RegistrationConfirm.php?kod=" .
sha1($sEmail . $sDatumRegistrace);
if ($sParent != "") {
$sConfirmUrl .= "&parent={$sParent}";
}
$sMessage = str_replace("@username", $sUsername, REGISTRATION_MAIL_BODY);
$sMessage = str_replace("@jmeno", "$sJmeno", $sMessage);
$sMessage = str_replace("@prijmeni", "$sPrijmeni", $sMessage);
$sMessage = str_replace("@password", $sPassword, $sMessage);
$sMessage = str_replace("@email", "$sEmail", $sMessage);
$sMessage = str_replace("@url", $sConfirmUrl, $sMessage);
if (!mail($sEmail, REGISTRATION_MAIL_SUBJECT, $sMessage, REGISTRATION_MAIL_HEADERS)) {
throw new Exception("Nepodařilo se odeslat mail");
}
}
$kontrola_odeslani = isset($_POST) ?
$_POST : 0;
if($kontrola_odeslani){
$prihlasovaci_jmeno = $_POST;
$prihlasovaci_heslo = $_POST;
$potvrzeni_prihlasovaciho_hesla = $_POST;
$email = $_POST;
$jmeno = $_POST;
$prijmeni = $_POST;
if($prihlasovaci_heslo == $potvrzeni_prihlasovaciho_hesla){
if($prihlasovaci_jmeno AND $email AND $jmeno AND $prijmeni){
$prihlasovaci_heslo = md5($prihlasovaci_heslo);
mysql_connect(SERVER, USERNAME, PASSWORD);
mysql_select_db(DB_NAME);
mysql_query("set character set utf8");
$sSql = "SELECT COUNT(1) AS pocet
FROM uzivatele
WHERE `prihlasovaci_jmeno` = '" . mysql_real_escape_string($prihlasovaci_jmeno) . "'";
$oResult = mysql_query($sSql);
$vystup = mysql_fetch_object($oResult);
if ($vystup->pocet > 0) { ?>
unset($_POST);
die;
}
$sSql = "SELECT COUNT(1) AS pocet
FROM uzivatele
WHERE `email` = '" . mysql_real_escape_string($email) . "'";
$oResult = mysql_query($sSql);
$vystup = mysql_fetch_object($oResult);
if ($vystup->pocet > 0) { ?>
unset($_POST);
die;
}
$sSql = "INSERT INTO uzivatele
(prihlasovaci_jmeno, jmeno, prijmeni, prihlasovaci_heslo, email,
zacatek_predplatneho, konec_predplatneho, zakladni_kapital, modul)
VALUES('" . $prihlasovaci_jmeno . "', '" . $jmeno . "',
'" . $prijmeni . "', '" . $prihlasovaci_heslo . "',
'" . $email . "', '" . date('Y-m-d') . "', '" .
date('Y-m-d', strtotime(date('Y-m-d')) + 8 * 24 * 60 * 60) . "',
800, 50.50)";
// echo $sSql; die;
$zapis = mysql_query($sSql);
//$zapis = mysql_query("INSERT INTO uzivatele SET id='', prihlasovaci_jmeno='$prihlasovaci_jmeno', jmeno='$jmeno', prijmeni='$prijmeni', prihlasovaci_heslo='$prihlasovaci_heslo', email='$email'");
if ($zapis) {
$sSql = "SELECT datum_registrace
FROM uzivatele
WHERE prihlasovaci_jmeno = '" .
mysql_real_escape_string($prihlasovaci_jmeno) . "'";
/* $sSql2 = "UPDATE uzivatele
SET konec_predplatneho= DATE_ADD(konec_predplatneho,INTERVAL 8 DAY)"; */
// echo $sSql; die;
$oResult = mysql_query($sSql);
$oKlient = mysql_fetch_object($oResult);
// mysql_query($sSql2);
sendRegistrationMail($prihlasovaci_jmeno, $_POST, $_POST, $_POST,
$email,$oKlient->datum_registrace,
$_POST);
echo "
Registrace proběhla v pořádku. Na emailu Vám přišel aktivační email, ve kterém pomocí odkazu aktivujete účet.
";
}
else {
echo "
Došlo k chybě při registraci
";
}
} else {
echo "
Nezadal jste přihlašovací jméno, jméno, příjmení, heslo nebo email.
";
}
} else {
echo "
Hesla nejsou shodná!
";
}
}
else {
if (isset($_GET) && $_GET == "1") {
echo "
Vámi zadané přihlašovací jméno je již obsazeno!
";
}
if (isset($_GET) && $_GET == "2") {
echo "
Vámi zadaná e-mailová adresa je již použita!
";
}
}
?>

$_GET : ""; ?>
value="" />
RegistrationConfirm.php
include ("./config2.php");
mysql_connect(SERVER, USERNAME, PASSWORD);
mysql_select_db(DB_NAME);
$aPathInfo = pathinfo($_SERVER);
$sConfirmUrl = "http://{$_SERVER}{$aPathInfo}/hlavni_strana.php";
$sSql = "UPDATE uzivatele
SET stav_uctu = 1
WHERE SHA1(CONCAT(email, datum_registrace)) = '{$_GET}'";
if (!mysql_query($sSql)) {
echo "Došlo k chybě při aktivaci účtu.
";
}
else {
// a ještě připočtí parentovi odměnu
if (isset($_GET) && $_GET != "") {
$sSql = "UPDATE uzivatele
SET konec_predplatneho= DATE_ADD(konec_predplatneho,INTERVAL 0 DAY)
WHERE SHA1(CONCAT(email, datum_registrace)) = '{$_GET}'";
//echo $sSql; die;
mysql_query($sSql);
}
echo "Účet byl úspěšně aktivován. Nyní se můžete přihlásit do aplikace.
";
}
?>
Děkuji všem, kteří mi pomůžou. Vím, že se tam musí někde dát funkce for cyklus, ale s tímto jsem nikdy nepracoval a proto je topro mě španělská vesnice.
Děkuji
3. 5. 2014 14:19:21
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020282
je to osklive derave a pri registraci te prece nic takoveho jako kolikata uroven to je nezajima?
3. 5. 2014 14:40:30
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020281
kulisek926
verified
rating uzivatele
3. 5. 2014 14:47:03
Ano zajímá kdyby ně tak bych se tu vůbec ani neptal. Jde mi o to, protože když ten v páté úrovni si zakoupí produkt tak potom dostanou provizi všichni nad ním z té částky. Takže je to důležité pro následné rozdělení provizí. Děkuij za rady
---------- Příspěvek doplněn 03.05.2014 v 14:49 ----------
Jestli vám něco říká pyramida tak se jedná o takový systém s rozdílem, že toto bude legální, protože jsou pyramidy, které jsou nelegální. Pyramida nebo ponzi se tomu říká, je to postavené na více úrovní a potřebuji je znát z důvodu rozdělování provizí.
3. 5. 2014 14:47:03
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020280
Existují 4 hlavní metody jak zachytit hierarchii v relační databázi jako MySQL.
  • Adjacency list, kdy u dítěte uložíte rodiče - to je ta první, která napadne většinu lidí, a kterou také používáte vy
  • Path enumeration, kdy u každého prvku uložíte kompletní cestu v textovém formátu
  • Nested set model, kdy u každého prvku uložíte levou (X) a pravou pozici (Y) ve stromu tak, aby všichni potomci dodržovali pravidlo X < potomek > Y
  • Closure table, kdy v pomocné tabulce uložíte pro každý prvek všechny jeho potomky a vzdálenost mezi prvky
Jejich vysvětlení naleznete v této vynikající prezentaci.
Models for hierarchical data
Vyzkoušel jsem všechny a closure table je podle mě nejpraktičtější.
Adjacency list, tedy metoda, kterou používáte vy, je vhodná pouze v případech, kdy je v hierarchii nízký počet prvků a pevný počet úrovní.
3. 5. 2014 16:05:44
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020279
kulisek926
verified
rating uzivatele
3. 5. 2014 16:12:08
Tak já myslel že to jde udělat přes ten for cyklus to nejde? Já nechtěl z toho dělat nic obrovského jen, aby u každého jména v DB bylo ve sloupci id_parent číslo toho parenta opravdu to nejde jinak jednodušším způsobem, protože to co jste napsal tak já nejsem zase odborník na takové věci? Děkuji
3. 5. 2014 16:12:08
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020278
kulisek926
verified
rating uzivatele
6. 5. 2014 11:55:33
Tak čekal jsem, že mi někdo poradí, ale jak vidím tak poradil jen jeden a to ještě složitě. Netušil jsem, že to tak lidé budou přehlížet. Bohužel to musím zjistit někde jinde a tento web mě opravdu tímto zklamal. Děkuji a můžete smazat a je to škoda, již tady žádat o pomoc nebudu.
6. 5. 2014 11:55:33
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020277
papa. netusim co más furt s nejakym cykle, for. nechces vedet jak, ale chces to naprogramovat. naval prachy a hned ti to nekdo udela.
6. 5. 2014 12:07:19
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020276
kulisek926
verified
rating uzivatele
6. 5. 2014 12:25:49
Slyšel jsem, že by to šlo jedině a snadně udělat pomocí toho cyklu nic jiného. Chtěl jsem poradit a místo toho vy jste napsal: je to osklive derave a pri registraci te prece nic takoveho jako kolikata uroven to je nezajima? Opravdu jsem chtěl pomoci a nehledal jsem někoho chytrého, tkerý mě bude přesvědčovat, že to nepotřebuji vědět atd.
Jestli to uděláte za finannčí odměnu pro vás tak se můžeme domluvit. Domluvil bych se s vámi, ale vaše chování se mi nelíbí. Kontaktujte mě na maresluk@seznam.cz a domluvíme se. Napište mi cenu a jak dlouho by to trvalo. Děkuji a prosím trochu slušnosti nejsem váš sourozenec nebo kamarád. Děkuji
6. 5. 2014 12:25:49
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020275
Fido123
verified
rating uzivatele
(13 hodnocení)
6. 5. 2014 12:28:37
Radili ti, ale tys to nepochopil. Re4DeR ti říkal, že při registraci žádnou pátou úroveň nepotřebuješ. To je fakt. Při registraci tě bude zajímat jenom nadřazená osoba, tedy rodič.
Pokud chceš odpověď, tak se musíš (správně) zeptat. Ze tvých příspěvků nejde ani jen vytušit, na co se ptáš.
6. 5. 2014 12:28:37
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020274
kulisek926
verified
rating uzivatele
6. 5. 2014 12:51:52
Zajímá mě to, kdo ho pozval. Kdo je tedy ten rodič a nevím jak to napsat. Budu rád když mi někdo pomůže. Chci když se já registruji a někdo mě pozve tak chci, aby u mého jména v DB objevilo ID toho kdo mě pozval. To vše půjde až do páté úrovně. Takže já někoho pozvu atd. až do páté úrovně dál ne a bude se to opakovat, proto ten for cyklus. Děkuji těm, kteří mi pomůžou.
6. 5. 2014 12:51:52
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020273
Petr Homoky
verified
rating uzivatele
(7 hodnocení)
6. 5. 2014 12:53:44
Jak tu již zaznělo, tebe při registraci u konkrétního uživatele zajímá pouze, kdo pozval toho uživatele. Ne několik úrovní. To se řeší pak uvnitř aplikace, jinde, kde je to potřeba.
6. 5. 2014 12:53:44
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020272
kulisek926
verified
rating uzivatele
6. 5. 2014 12:55:48
Takže ano máte pravdu. Zajímá mě kdo ho pozval, ale zároveň tento systém může fungovat max do páté úrovně. Pomůžete mi tedy to nějak dát dohromady? Děkuji
6. 5. 2014 12:55:48
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020271
nemuze te zajimat jen pata uroven. proste pri registraci si jen ulozis id nadrazeneho (pozvavajiciho) uzivatele - nic vic.
potom v nejakym prehledu uzivatelu si projedes uzivatele a ke kazdemu najdes podrazeneho (tady vyuzijes svoje cykly konecne).
Jak pise martin tak je dobry se zamyslet jestli tenhle system (Adjacency list) je to pravy pro tvoje potreby.
A to ze je to deravy jak emental by te asi zajimat melo.
6. 5. 2014 13:01:14
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020270
Fido123
verified
rating uzivatele
(13 hodnocení)
6. 5. 2014 13:02:33
Napsal kulisek;1085349
Takže ano máte pravdu. Zajímá mě kdo ho pozval, ale zároveň tento systém může fungovat max do páté úrovně. Pomůžete mi tedy to nějak dát dohromady? Děkuji
Co znamená „může fungovat max do páté úrovně“? Přece úrovní může být nekonečně mnoho. Jestli jde o nějaké vyplácení provizí do páté úrovně, tak to se pak ošéfuje jinde, ne při registraci.
6. 5. 2014 13:02:33
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020269
kulisek926
verified
rating uzivatele
6. 5. 2014 13:04:45
Tak ano potřebuji prvně při registraci uložit ID parenta a nakonec to pojistit, aby se to opakovalo až do páté úrovně. Ano jde o provize. Poradíte mi někdo jak to sepsat u té registrace popřípadě přes sdílenou obrazovku a nebo kdo by mi to komplet napsal, aby to fungovalo? Moc vás prosím. Děkuji
6. 5. 2014 13:04:45
https://webtrh.cz/diskuse/struktura-pyramidy-se-zaznacenim-id-toho-ktery-pozval-v-db-u-nove-registrovaneho/#reply1020268
Pro odpověď se přihlašte.
Přihlásit