Autor | Zpráva | ||
---|---|---|---|
Yuff.3 Profil |
#1 · Zasláno: 21. 7. 2014, 13:43:23
Ahojte,
chcem sa spýtať ako mám upraviť tento kód, ak mi všetko správne funguje, ibaže do DB zapíše/resp. pripíše $mojeid vždy, aj keď sa už v DB nachádza (čiže " if (1=1) " ) a vypíše mi else {už sa nachádza...}. Predpokladám, že chyba bude v tom cykle, vo funkcii "for", keďže mi vypíše napr. echo - 14x {už sa nachádza..} ale $exp[$i] len 2 - vždy o 2 menej.. Som laik, tak prosím o konkrétnu úpravu kódu alebo po prípade podrobnejšie vysvetlenie, čo a prečo to robí, resp. nerobí ako chcem. :) Moc krát veľmi pekne ďakujem. //PRIATELIA START if (isset($_GET['page']) && $_GET['page'] == "priatelia") { $result = dbquery("SELECT * FROM ".DB_USERS." WHERE user_id='".$_GET['uzivatel']."'"); $rows = dbrows($result); if ($rows != 0) { while ($userdata = dbarray($result)) { //POZADIE START echo "<div class='news-body'>"; echo " " .$userdata['priatelia'] ; echo "<br><br>" ; echo " " .$_GET['uzivatel']; echo "<br><br>" ; $priatelia = $userdata['priatelia']; //Toto odstráni bodku $exp = explode( '.' , $priatelia ); //Toto nahradí xkrát echo "" .$exp; for( $i = 0; $i <= count( $exp ); $i++ ) { // echo " " .$exp[$i]; echo "<br><br>" ; $mojeid = 47; $oddelovac = "."; if ($exp[$i]!=$mojeid) { dbquery("UPDATE ".DB_USERS." SET priatelia='".$userdata['priatelia']."' '".$oddelovac."' '".$mojeid."' WHERE user_id='".$_GET['uzivatel']."'"); } else { echo "Už sa nachádza v zozname priateľov"; } } } } else {"nič";} echo "</div>"; } else {"nič";} //PRIATELIA END |
||
juriad Profil |
Yuff.3:
Neodpovím ti na otázku, proč to nefunguje. Řeknu ti však, že děláš jinou velkou chybu. Nikdy neukládej do jednoho sloupce seznam hodnot. Některé časteji řešené dotazy pro MySQL - FAQ » Více hodnot ve sloupci. Způsobíš si mnohem vážnější problémy do budoucna. Neuvažuj nad buňkami, nemá to s tabulkami z Excelu moc společného. Podle teorie je databázová tabulka množinou řádků, kde každý řádek je uspořádanou n-ticí hodnot. |
||
Yuff.3 Profil |
#3 · Zasláno: 21. 7. 2014, 13:55:52
Netuším aký problém by mi to mohlo spôsobiť, ale príde mi to ako vhodné riešenie mojej situácie. A keby som chcel aby mi niekto neodpovedal na moju otázku - prečo by som sem písal??
Chcem povedať, pokiaľ idem na to zle, prosím navrhnite mi vhodnejšie riešenie , opakujem a zdôrazňujem - pochopiteľné laikovi. |
||
mimochodec Profil |
Yuff.3:
Jestli máš tabulku uživatelů a tam v jednom sloupci seznam přátel, je to špatně. Vyrob si druhou tabulku a tam ukládej jednotlivé vazby. Tzn. ID, IDosoby, IDpritele 1, 1, 3 2, 1, 4 „keby som chcel aby mi niekto neodpovedal na moju otázku“ On je problém v tom, že není vůbec jasné, na co se ptáš. Ta chyba, na kterou reaguje juriad a já, tam pravděpodobně je. |
||
Yuff.3 Profil |
#5 · Zasláno: 21. 7. 2014, 14:07:15
Takéto veci sú na mňa moc zložité. Nedokázal by som potom s tým ďalej pracovať. Resp. zabralo by mi kopec času sa to naučiť, čo je pre mňa zbytočné. Potrebujem spojazdniť aspoň toto čo som poslal. No a načo sa pýtam?? Skúsim teda ináč. Prakticky po riadok 32 toho kódu je všetko OK. s Problém nastáva ďalej. A spočíva v tom, že ak - if (1=1) {vykoná sa toto} else sa ignoruje. No a naopak. Ibaže keď je to naopak, a teda - if (5=1) {toto by sa malo ignorovať ALE nestane sa tak, funkcia sa použije} A zároveň berie do úvahy aj - else {vypíše mi echo nachádzajúce sa v else.}
Snáď som to vysvetlil pochopiteľne. Ak nie môžem skúsiť ešte raz.. :) |
||
juriad Profil |
Yuff.3:
Ty místo for cyklu musíš kontrolovat, zda v poli $exp existuje hodnota $mojeid. Chceš tedy do databáze položit maximálně jeden UPDATE, nikoli tolik UPDATů, kolik je prvků v tom poli. Pro zjištění, zda v poli existuje hondota, použij funkci in_array. Ten cyklus tedy úplně vyhoď. Jde o to, že nebudeš moci snadno položit dotaz na seznam lidí, kteří tě mají v přátelích. Půjde to, ale ten dotaz bude pomalý, nevyužije indexy. A i pak budou existovat dotazy, které nepůjdou realizovat. Třeba seřadit uživatele podle oblíbenosti (kolik lidí je má v přátelích). |
||
Yuff.3 Profil |
#7 · Zasláno: 21. 7. 2014, 14:20:19
juriad A o toto mi ide :)
čiže nahradil som riadok if ($exp[$i]!=$mojeid) {
riadkami $all = array($exp[$i]); if (in_array($mojeid, $all)) { |
||
Marti_n Profil |
#8 · Zasláno: 21. 7. 2014, 14:22:58
juriad a mimochodec ti napísali o 100-krát lepšiu alternatívu ako máš ty. Vidím, že tabuľka sa volá "priatelia", takže očakávaš viac ľudí, preto si ber príklad čo ti napísali. A ešte jedna vec nauč sa oddelovať logiku a HTML.
|
||
mimochodec Profil |
#9 · Zasláno: 21. 7. 2014, 14:24:08
Yuff.3:
„akceptuje mi aj if aj else :(“ Chceš říct, že se provede jak ten update, tak to echo "Už sa .... ? To asi ne. |
||
juriad Profil |
#10 · Zasláno: 21. 7. 2014, 14:26:49
Yuff.3:
Říkám, odstraň celý cyklus for a nahraď jej za: if (in_array($moje_id, $exp)) { # už tam je } else { # ještě není: UPDATE } |
||
Yuff.3 Profil |
#11 · Zasláno: 21. 7. 2014, 14:38:35
mimochodec Prečo by som si to vymýšľal? Rovnako tak mi to príde dosť dobrá nelogická hlúposť, ale naozaj sa to stane. :)
juriad No idem to spraviť ako si napísal - snáď niečo nepopletiem. :) Marti_n Kde som čo neoddelil? Môžeš byť prosím konkrétny?? Neprotestujem, že to nie je lepšia alternatíva, ktorú mi ponúkli, v predošlom príspevku som odôvodnil túto záležitosť. |
||
mimochodec Profil |
#12 · Zasláno: 21. 7. 2014, 14:41:17
Yuff.3:
„mimochodec Prečo by som si to vymýšľal? Rovnako tak mi to príde dosť dobrá nelogická hlúposť, ale naozaj sa to stane. :)“ Možná se ti to tak jeví, ale nestane. Neexistuje možnost, že by se za ifem provedly obě větve - před else i za ním. |
||
Yuff.3 Profil |
#13 · Zasláno: 21. 7. 2014, 14:46:37 · Upravil/a: Yuff.3
mimochodec:
Tak to som zrejme dokázal nemožné :D //PRIATELIA START if (isset($_GET['page']) && $_GET['page'] == "priatelia") { $result = dbquery("SELECT * FROM ".DB_USERS." WHERE user_id='".$_GET['uzivatel']."'"); $rows = dbrows($result); if ($rows != 0) { while ($userdata = dbarray($result)) { //POZADIE START echo "<div class='news-body'>"; echo " " .$userdata['priatelia'] ; echo "<br><br>" ; echo " " .$_GET['uzivatel']; echo "<br><br>" ; $priatelia = $userdata['priatelia']; //Toto odstráni bodku $exp = explode( '.' , $priatelia ); echo "<br><br>" ; $mojeid = 17; $oddelovac = "."; if (in_array($moje_id, $exp)) { echo "Už sa nachádza v zozname priateľov"; } else { dbquery("UPDATE ".DB_USERS." SET priatelia='".$userdata['priatelia']."' '".$oddelovac."' '".$mojeid."' WHERE user_id='".$_GET['uzivatel']."'"); } } } else {"nič";} echo "</div>"; } else {"nič";} //PRIATELIA END Tento spôsob mi vypíše echo "už sa nachadz..." A nezapíše mi do tabuľky nič, aj keď v tabuľke sa ešte $moje_id nenachádza.. Všetko funguje, $moje_id nemalo byť "_" :D Ďakujem všetkým moc krát. :) |
||
Marti_n Profil |
#14 · Zasláno: 21. 7. 2014, 15:06:34
Yuff.3
Kde si to neodelil? echo "<div class='news_body'>" |
||
Yuff.3 Profil |
#15 · Zasláno: 21. 7. 2014, 15:20:56
Marti_n:
?? Čo kde prečo som mal oddeliť? Nerozumiem .. A nastala mi zase jedna menšia komplikácia - možno Vám došlo, že používam Php-Fusion (najnovšia verzia) no a trochu som to upravil a vložil som tam funkciu if (iMEMBER) .. ibaže nejak mi to nefunguje, resp. keď som offline, tak mi nevypíše echo "musíte byť prihlásený". Pridávam celý kód. //PRIATELIA START if (isset($_GET['page']) && $_GET['page'] == "priatelia") { $result = dbquery("SELECT * FROM ".DB_USERS." WHERE user_id='".$_GET['uzivatel']."'"); $rows = dbrows($result); if ($rows != 0) { while ($userdata = dbarray($result)) { //POZADIE START echo "<div class='news-body'>"; echo " " .$userdata['priatelia'] ; echo "<br><br>" ; echo " " .$_GET['uzivatel']; echo "<br><br>" ; $priatelia = $userdata['priatelia']; //Toto odstráni bodku $exp = explode( '.' , $priatelia ); echo "<br><br>" ; if (iMEMBER){ $mojeid = 17; $oddelovac = "."; if (in_array($mojeid, $exp)) { echo "Už sa nachádza v zozname priateľov"; } else { dbquery("UPDATE ".DB_USERS." SET priatelia='".$userdata['priatelia']."' '".$oddelovac."' '".$mojeid."' WHERE user_id='".$_GET['uzivatel']."'"); } } else {"Pre pridanie nového priateľa je nutné sa <a href='http://4funportal.eu/cs/register.php'>registrovať</a> alebo <a href='http://4funportal.eu/cs/login.php'>prihlásiť</a>.";} echo "</div>"; } } else {"nič";} } else {"nič";} //PRIATELIA END |
||
mimochodec Profil |
#16 · Zasláno: 21. 7. 2014, 17:14:33
Yuff.3:
„keď som offline, tak mi nevypíše echo "musíte byť prihlásený"“ Spočítej si závorky, jestli ta hláška je ve správné else větvi ifu. Nebo odsazuj tak, abys je počítat nemusel. |
||
Yuff.3 Profil |
#17 · Zasláno: 21. 7. 2014, 20:49:31
mimochodec:
Niekoľko krát som si to skontroloval, ináč by som sem ani nepísal. Neviem kde je chyba. Kód som priložil, môže mi prosím niekto stým pomôcť? (A nie som si celkom istý, či moja teória bude fungovať, ale chcem namiesto $mojeid dosadiť reálne ID aktuálne prihláseného užívateľa. Myslel som, že by sa to dalo docieliť touto funkciu a selectom z DB kde: $result = dbquery("SELECT * FROM ".DB_USERS." WHERE user_id='".$userdata['user_id']."'"); - ak sa nemýlim toto by malo vypísať ID prihláseného užívateľa - echo "" .$userdata['user_id']; Ďakujem. |
||
mimochodec Profil |
#18 · Zasláno: 21. 7. 2014, 21:16:08
Yuff.3:
"musíte byť prihlásený" je uvnitř if ($rows != 0) {
|
||
Yuff.3 Profil |
#19 · Zasláno: 21. 7. 2014, 21:22:23
mimochodec:
Ďakujem. :) Avšak mám tu nový problém :D //PRIATELIA START if (isset($_GET['page']) && $_GET['page'] == "priatelia") { if (iMEMBER){ $result = dbquery("SELECT * FROM ".DB_USERS." WHERE user_id='".(iMEMBER)."' "); $rows = dbrows($result); if ($rows != 0) { while ($userdata = dbarray($result)) { $mojeid = $userdata['user_id']; }}} $result = dbquery("SELECT * FROM ".DB_USERS." WHERE user_id='".$_GET['uzivatel']."'"); $rows = dbrows($result); if ($rows != 0) { while ($userdata = dbarray($result)) { //POZADIE START echo "<div class='news-body'>"; echo " " .$userdata['priatelia'] ; echo "<br><br>" ; echo " " .$_GET['uzivatel']; echo "<br><br>" ; $priatelia = $userdata['priatelia']; //Toto odstráni bodku $exp = explode( '.' , $priatelia ); echo "<br><br>" ; $oddelovac = "."; if (in_array($mojeid, $exp)) { echo "Už sa nachádza v zozname priateľov"; } else { dbquery("UPDATE ".DB_USERS." SET priatelia='".$userdata['priatelia']."' '".$oddelovac."' '".$mojeid."' WHERE user_id='".$_GET['uzivatel']."'"); echo "Bol pridaný medzi priateľov"; } } //else {"Pre pridanie nového priateľa je nutné sa <a href='http://4funportal.eu/cs/register.php'>registrovať</a> alebo //<a href='http://4funportal.eu/cs/login.php'>prihlásiť</a>.";} echo "</div>"; } else {"nič";} } else {"nič";} //PRIATELIA END Ide o to, že ten prvý select je zlý. Ako to spravím tak aby som docielil to čo chcem? Čo chcem? Aby ten kto je online a klikne na tú stránku tak jeho ID (toho čo je online) vloží do premennej $mojeid. |
||
mimochodec Profil |
#20 · Zasláno: 21. 7. 2014, 21:34:24
Yuff.3:
Uvědomuješ si, že vždycky, když si tohle zobrazí přihlášený uživatel, updatuješ jeho seznam přátel? Proč to děláš? Kromě toho: } else {"nič";} - asi ti tam chybí echo.
„Čo chcem? Aby ten kto je online a klikne na tú stránku tak jeho ID (toho čo je online) vloží do premennej $mojeid.“ A to chceš proč? Máš to přece od začátku v iMEMBER . Předpokládám, že to plníš někde výš. Mám pocit, že to patláš dost chaoticky.
|
||
Yuff.3 Profil |
#21 · Zasláno: 21. 7. 2014, 22:03:38
mimochodec:
No možno je to dosť chaotické, ale neviem to spraviť ináč. Nie som žiadny koder ani programátor. Ak by si mi to mohol celé upraviť tak, aby to nebolo chaotické a splnilo to čo od toho požadujem, bol by som naozaj veľmi, veľmi vďačný. :) (na to echo som zabudol :D) |
||
mimochodec Profil |
#22 · Zasláno: 21. 7. 2014, 22:21:47
Yuff.3:
Já jsem doteď nepochopil, co ta stránka má dělat. Začals něčím, co pčidávalo id do seznamu přátel, pak je nějak vypisuješ a nakonec řešíš, jestli se na to dívá někdo přihlášený nebo nepřihlášený. Kromě toho operuješ s nějakým iMEMBER, ve kterém je hodnota, kterou se potom nějak snažíš odněkud získávat. Nechápu, k čemu to všechno má sloužit. |
||
Yuff.3 Profil |
#23 · Zasláno: 21. 7. 2014, 22:39:42
mimochodec:
Pokúsim sa to vysvetliť. :) Chcem spraviť na web priateľov. Myslím tým možnosť pridať si priateľa do zoznamu priateľov. Prakticky som to chcel zrealizovať nasledovne. Kliknem na adresu stránky, kde mi vyselectuje z mojej tabuľky všetky údaje, ktoré tam zapisujem v tvare .1.4.54.73.89 (kde jednotlivé čísla predstavujú ID ostatných členov, členov, ktorých "mám v priateľoch". Následne obsah tejto tabuľky "rozbijem" pomocou $exp - získam tak jednotlivé čísla samostatne, teda ID jednotlivých "priateľov". Ďalej pomocou funkcie in_array z tohto zoznamu porovnám, či sa tam (v $exp) nachádza ID člena, ktorého profil práve sledujem. Ak áno, vypíše mi "Už sa nachádza v zozname priateľov", ak nie, tak pomocou UPDATE doplním do mojej tabuľky ID užívateľa, ktorého profil práve sledujem a zároveň mi vypíše "Bol pridaný medzi priateľov". To je všetko. Snáď som to vysvetlil jasne, ak nie, pokúsim sa ešte ináč. :) No a samozrejme potom z tabuľky si spravím select zase na nejakú inú stránku (iné URL), kde mi vypíše zoznam mojich priateľov - to už problém nie je. :) |
||
mimochodec Profil |
#24 · Zasláno: 21. 7. 2014, 23:06:12
Yuff.3:
K tomu už jsme ti psali, že to děláš špatně. Řekněme, že jsem A a přidám si do přátel B. Jak se to B dozví? Budeš procházet všechny "priatelia" v tabulce a hledat, jestli tam B není? Nebo jiná situace: admin se rozhodne, že se mu B nelíbí a smaže ho. Zase to projdeš u všech, explode, smazat, implode, update? Ta logika je prostě špatně. Máš tady nad sebou dvakrát SELECT. Jestli v iMEMBER je session přihlášeného uživatele, jak to chápu, je v pořádku ten provní if if (iMEMBER){ |
||
Yuff.3 Profil |
mimochodec:
Nepotrebujem, aby B vedel o tom, že A si ho pridal do priateľov. A nevidím dôvod, prečo by sa mal užívateľ zmazať. Prinajhoršom sa mu udelí BAN a keby sa aj zmazal - nemyslím, že by to bol problém. Pri selecte "priateľov" by proste nevypísalo jeho "user_name" a príslušné užívateľove riadky. Inými slovami, takýto primitívny systém mi postačí - nemám schopnosti na tej úrovni, aby som sa s tým hral do detailov a vytvoril prepracovaný systém priateľov.. Už som to myslím poopravoval, stále to však akosi nefunguje podľa mojich predstáv. Aktuálne mi vypíše len "echo " " .$_GET['uzivatel'];" a " echo "Už sa nachádza v zozname priateľov";" . Prikladám code: //PRIATELIA START if (isset($_GET['page']) && $_GET['page'] == "priatelia") { if (iMEMBER){ echo "" .$userdata['user_name']; //POZADIE START echo "<div class='news-body'>"; echo " " .$userdata['priatelia'] ; echo "<br><br>" ; echo " " .$_GET['uzivatel']; echo "<br><br>" ; $priatelia = $userdata['priatelia']; //Toto odstráni bodku $exp = explode( '.' , $priatelia ); echo "<br><br>" ; $oddelovac = "."; if (in_array($_GET['uzivatel'], $exp)) { echo "Už sa nachádza v zozname priateľov"; } else { dbquery("UPDATE ".DB_USERS." SET priatelia='".$userdata['priatelia']."' '".$oddelovac."' '".$_GET['uzivatel']."' WHERE user_id='".$userdata['priatelia']."'"); echo "Bol pridaný medzi priateľov"; } echo "</div>"; } else {"Pre pridanie nového priateľa je nutné sa <a href='http://4funportal.eu/cs/register.php'>registrovať</a> alebo <a href='http://4funportal.eu/cs/login.php'>prihlásiť</a>.";} } //PRIATELIA END Inými slovami iMEMBER mi neplní funkciu, ktorú by som potreboval. Nejaký nápad na alternatívne riešenie? |
||
Virtus Profil |
#26 · Zasláno: 22. 7. 2014, 21:59:18
Zdravím,
přiznám se že sem nečet celý topic ale podle přízpěvku [#25] Yuff.3 a jestli je ten kód originálkně okopírovaný tak tam je chyba: } else {"Pre pridanie nového priateľa je nutné sa <a href='http://4funportal.eu/cs/register.php'>registrovať</a> alebo <a href='http://4funportal.eu/cs/login.php'>prihlásiť</a>.";} } } else { echo "Pre pridanie nového priateľa je nutné sa <a href='http://4funportal.eu/cs/register.php'>registrovať</a> alebo <a href='http://4funportal.eu/cs/login.php'>prihlásiť</a>.";} } |
||
Yuff.3 Profil |
#27 · Zasláno: 22. 7. 2014, 22:06:04
Virtus, Bubák:
Veľmi pekne ďakujem, toto však nie je problém, s ktorým sem píšem. :) Ide o to, že mi nechce zobraziť echo na riadkoch 6 a 11 a teda zobraziť "moje" ID - ID užívateľa, ktorý je prihlásený pod svojim menom a svojim ID a aktuálne sa pozerá na profil stránky užívateľa napr. ID=5 - kde toto ID, iD užívateľa, ktorého profil sledujem zobrazí. Ten je zapísaný na riadku 13.. |
||
Virtus Profil |
#28 · Zasláno: 22. 7. 2014, 22:38:06
No v takovém případě bych vyzkoušel php funkci
var_dump($userdata); , která vám zobrazí hodnotu dané proměnné a vypíše i její strukturu.
|
||
Yuff.3 Profil |
#29 · Zasláno: 22. 7. 2014, 22:42:07
Dal som to hneď za imember (riadok 4) a vypísalo "bool(false)" čo stým? čo to znamená?
|
||
Virtus Profil |
to znamená že proměnná
$userdata obsahuje boolean (logickou) hodnotu FALSE a tudíž to není asociativní pole s klíči: user_name, priatelia, tj. do proměnná $userdata se přiřazuje něco jiného než požadujete, proč se tak děje vám neřeknu, protože v [#25] Yuff.3 není kód kde se do této proměnné přiřazuje.
|
||
Téma pokračuje na další straně.
|
0