« 1 2 »
Autor Zpráva
Yuff.3
Profil
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
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
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
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)) { 
Ale robí mi to isté, akceptuje mi aj if aj else :(
Marti_n
Profil
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
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
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
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
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
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
Yuff.3

Kde si to neodelil?
echo "<div class='news_body'>"
Yuff.3
Profil
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
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
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
Yuff.3:
"musíte byť prihlásený" je uvnitř if ($rows != 0) {
Yuff.3
Profil
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
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
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
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
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
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){
. V té větvi zařiď, ať se provede všechno, co se má provést přihlášenému. Do příslušné else větve dej všechno, co se má provést, když přihlášen nejsem.
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
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
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
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
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.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0