Autor Zpráva
faksa5
Profil *
Dobrý den,

aktuálně pracuji na zóně pro klienty, kde by si mohli po přihlášení zobrazit projekty, které pro ně dělám a následně si mohli rozkliknout detail projektu, kde by našli doplňující informace včetně informací o stavu projektu. Přihlášení už jsem za pomoci internetu udělal. V podstatě to funguje tak, že uživatel zadá jméno a heslo a pokud se shoduje se zápisem v databázi, pak proběhne přihlášení na stránku, která se nepřihlášeným uživatelům nezobrazí. A právě tuto stránku bych chtěl personalisovat, aby každý uživatel viděl jiný obsah. Pokud se nepletu, bude třeba PHP a MySQL. Pokud bych vytvořil MySQL tabulku s projektem, bude třeba vytvořit jedinečné ID projektu (kvůli interní identifikaci) a do další kolonky přidat ID uživatele, které se bude shodovat s ID uživatele, kterému daný projekt náleží a nakonec vytvoři kolonku s názvem projektu a kolonku s podrobnostmi o daném projektu pro klienta. Do php session uložím id uživatele, pomocí kterého následně odfiltruji data z tabulky SELECT projektid, nazevprojektu from table WHERE iduser = $id (pokud to správně popisuji). Každopádně zobrazit tuto tabulku metoou pokus omyl zvládnu sám. Teď se ale dostávám k otázce, kterou nevím, jak vyřešit - poslední položkou tabulky s přehledem o projektech by mělo být tlačítko "detail projektu" (popřípadě přidání linku k názvu projektu). Jak docílit toho, aby se přidáním do databáze vytvořila stránka s informacemi o projektu, kterou zobrazí jen určitý uživatel a link se automaticky přidá k tlačítku detail?
Mlocik97
Profil
faksa5:
"Pokud se nepletu, bude třeba PHP a MySQL."

Ne nutne, je to jedna z možností, ale může to byť i Ruby v kombinaci s PostgreSQL, nebo klidne i čokoľvek iné.
faksa5
Profil *
Ruby a PostgreSQL neovládám, takže bych volil raději PHP + MySQL. Jak docílím vygenerování stránky a vložení odkazu na stránku k tlačítku detail?
blaaablaaa
Profil
Uděláš si ještě tabulku projekt (nebo více tabulek), ve kterých budou informace o projektu uloženy.
Pak budeš mít třeba odkaz projekt.php?id=ID_PROJEKTU, na stránce projekt.php si ověříš, jestli přihlášený uživatel má k projektu právo a pokud ano, načteš a zobrazíš data z těch tabulek.
faksa5
Profil *
Vytvořil jsem stránku s projektem na adrese projekt.php?id=1. Na stránce s detailem projektu bych chtěl zobrazit název a detail. Jediné, co dokážu zobrazit je id projektu z url adresy přes echo "Project id : ". $_GET['id'] ."<br>";. Jak mohu zařídit, aby se mi zobrazil detail projektu k id, které je uvedeno v URL adrese? Zkoušel jsem
$conn = $db;
    $sql = "SELECT * FROM obsah";
    $result = $conn->query($sql);
    echo "Project id : ". $row["detail"] ."<br>";
, ale zdá se, že tato cesta fungovat nebude, protože se mi nic nezobrazí.
blaaablaaa
Profil
faksa5:
Ten fragment kódu je totální slátanina.
Doporučoval bych pročíst nějaké seriály se základy PHP a SQL (pozor na staré příklady s mysql_ funkcemi, ty nebrat).
faksa5
Profil *
Je to jen část kódu, kterou jsem napsal na stránky. Ale popravdě nerozumím, co je na kódu slátanina. Ukázka napojení na DB, kterou jsem poslal výše je téměř v každé diskusi o propojení PHP a MySQL a funguje. Zbytek už je jen zobrazení dat pro můj konkrétní případ. Uznávám, že se v php a mysql orientuji jen na začátečnické úrovni, ale většina věcí fungovala po odzkoušení a různému nastavení metodou pokus omyl.
$db = mysqli_connect('údaje k DB'); //připojení k DB
$conn = $db; //nastavení proměnné na $conn
    $sql = "SELECT * FROM obsah"; //vyberu požadované tabulky z databáze (na webu mám rozepsané jmenovitě)
    $result = $conn->query($sql); //zjištění počtu záznamů v tabulce
    echo "Project id : ". $row["detail"] ."<br>"; //zobrazení tabulky detail (nevím, proč nefunguje)
Podobný příklad používám i u tabulky se seznamem dat z databáze, kde mi to funguje

echo "<tr><td>" . $row["id"]. "</td><td>" . $row["nazev"] . "</td><td>"
. $row["stav"]. "</td><td><a href='/projekty.php?pid=$row[pid]'>Detail</a></td></tr>";
.
Při tvorbě jsem narazil na jeden tutoriál, kde se tvoří trochu odlišný projekt, ale spoustu věcí je podobných, čehož se snažím využít a kód upravuju tak, aby stránky fungovaly i v mém případě.

Předtím, než jsem se zeptl na svůj dotaz, jsem samozřejmě zkoušel Googlit, ale upřímně řečeno - nevím, co přesně do Googlu zadat, abych našel vysvětlení toho, jak z URL projekt.php?id=1 vzít id a načíst odpovídající data v tabulce do proměnných.


*edit: v ukázkách už je leckde počítáno s konkrétním případem, takže id = pid a projekt.php = projekty.php
Tomášeek
Profil
faksa5:
//nastavení proměnné na $conn
Proč proboha nepracuješ s proměnnou $db? Nebo proč ji nepojmenuješ $conn hned na prvním řádku? Tady je krásně vidět, že vůbec nechápeš, která bije. Jen v jednom tutoriálu bylo $db, v druhém $conn, tak jsi udělal tohle.

//vyberu požadované tabulky z databáze
Vybírají se řádky, nikoliv tabulky. Vybíráš všechny, ne jen ty, které chceš (ke kterým má uživatel práva)

//zjištění počtu záznamů v tabulce
Nikoliv. Pomocí $conn->query se počet řádků nezjišťuje.

//zobrazení tabulky detail (nevím, proč nefunguje)
Protože neexistuje proměnná $row. Navíc detail není tabulka, ale sloupec. Začni od začátku a začni tím, že si povolíš výpis chybových hlášek.
faksa5
Profil *
Proměnné $db a $conn mám z toho důvodu, protože web mám rozdělen na dvě části (veřejnou a neveřejnou) a pokud při úpravách něco pokazím, nemá to vliv na druhou část, která je veřejně dostupná. Ohledně kritérií zobrazení - to, co dávám dohromady je zatím jen web pro administrátora - ten je kompletně oddělen od uživatelského webu (jiná práva pro přístup k db a přístup pouze z intranetu), takže nepotřebuji zatím filtrovat jednotlivé záznamy (poslal jsem jen ukázku toho, co mi zatím fungovalo). Omlouvám se za nepřesnou terminologii - nemohl jsem si vzpomenout na názvy, tak jsem napsal jen slovo tabulka, ze kterého by mělo být zřejmé, že mám na mysli řádek nebo sloupec. Jak jsem psal výše - jsem v podstatě začátečník a uvedený zaznam $conn->query nevím, co dělá - ale používám ho k zobrazení počtu záznamu v tabulce (dle tutoriálu). Výpis chybových hlášek mám povolen, ale nic se mi nezobrazuje, takže beru web jako funkční. Odkazujete mě neustále na návody pro začátečníky atd. Chápu, že je to třeba, abych dal dohromady smysluplný kód. Podle různých tutoriálů se řídím v podstatě od začátku a toto vlákno jsem založil hlavně proto, abych se mohl zkušených programátorů ptát, jak si v rámci webu poradit s konkrétním problémem. A teď se mi při tvorbě vyskytl problém, se kterým nevím, jak si dál poradit. Nevím, jak dostat data z konkrétního záznamu v databázi (myslím tím data z řádku, kde je požadované ID) do proměnných, abych s nimi mohl dále pracovat? Mám na mysli záznam ze sloupce detail uložit jako $detail nebo nazev jako $nazev?


edit: pokud chci tedy načíst sloupec a použiji $column["detail"] , zobrazí se mi obsah?
Ikki
Profil
Proč to neudělat jednoduše?
1. Na stránce využiji podmínku IF, podle které usoudím zda daný člověk má k dané věci přístup - doporučil bych SESSION.
2. Následně k dané věci přidáš SQL select, ten můžeš odvíjet ručně dle kategorie/oprávnění - pokud budeš mít v Session oprávnění = 1/2/3 tak následně do SQL využiješ něco jako =>
SELECT * FROM tabulka WHERE id_opravneni=$_SESSION["opravneni"]
3. Samozřejmě k tomu je potřeba tak mít postavenou tabulku, případně obsah.
Tomášeek
Profil
faksa5:
Proměnné $db a $conn mám z toho důvodu, protože web mám rozdělen na dvě části (veřejnou a neveřejnou) a pokud při úpravách něco pokazím, nemá to vliv na druhou část, která je veřejně dostupná.
... což je nesmysl. Ty proměnné jsou stejné, obsahují totéž připojení k téže databázi. Pokud se něco pokazí, projeví se to všude (protože ta databáze je jen jedna).

$conn->query nevím, co dělá - ale používám ho k zobrazení počtu záznamu v tabulce (dle tutoriálu)
Nebylo by nejprve lépe pochopit, co jednotlivé řádky v tutoriálu znamenají, proč tam jsou a teprve pak s nimi pracovat? Počet záznamů tímto požadavkem fakt nezjisťuješ, to mi věř :-) Na zobrazení počtu záznamů (počtu vrácených řádků) slouží num_rows.

jak si v rámci webu poradit s konkrétním problémem
Když ti tu někdo napíše kód, jak se to dělá, tak jej copypastneš a buď bude fungovat a postavíme tu za tebe celou aplikaci, nebo ho nebudeš schopný rozběhnout, protože tam bude třeba jinak pojmenovaná proměnná a skončíš na tomhle.

edit: pokud chci tedy načíst sloupec a použiji $column["detail"] , zobrazí se mi obsah?
Proč to nezkusíš? Pokud existuje proměnná $column, je to pole a má klíč detail, tak se něco zobrazí. Jinak ne. Pokud se nic nezobrazí, tak bude $column['detail'] existuje, ale je prázdné, nebo neexistuje a vyskočí ti warning na neexistující proměnnou, nebo klíč pole.

SQL dotaz ti napsal Ikki v [#10], je v zásadě správně. Po vykonání dotazu musíš resultset nějak zpracovat (typicky fetch_assoc() ve while cyklu), tam ti vzniká ta zatím neexistující proměnná $row.
faksa5
Profil *
Zkoušel jsem všechno možné včetně procházení různých specializovaných webů (proto tak dlouhá prodleva), ale z nějakého důvodu mi kód nechce fungovat podle mých představ. Myslím si, že systém vlastně vůbec neví, ze kterého řádku v databázi má vybrat sloupec detail (neví, jestli má vybrat data z projektu 1 nebo z projektu 2).

Na stránce s detailem projektu mám následující kód:
$detail = $column['detail']; //zkouším definovat proměnnou detail
echo "<br><br>"; //potřeba odřádkování
echo "Project id : ". $_GET['pid'] ."<br>"; //projekt id, který vezmu z URL adresy
echo "$column['detail']"; //první pokus o vypsání detailu
echo "Detail : ". $detail ."<br>"; //druhý pokus o vypsání detailu
SQL dotaz, který jste mi zaslali chápu (myslím si, že bych ho zvládl sestavit i sám), ale zatím ho nepotřebuji (stále pracuju na webu pro administrátora, kde toto omezení není třeba). Jak už jsem psal výše - dal jsem si celkem práci a procházel různé weby, ale nikde jsem nenašel žádný postup, který by se hodil pro mé potřeby. Jak získám detail projektu z databáze?
Tomášeek
Profil
faksa5:
O jaky projekt se jedna řídí prave to PID v URL. Porad nevis, která bije.

Pracujes s $column. Existuje? Pokud ano, je to pole a obsahuje klíč detail? Asi ne, ze?

PS. Kdybys aspon trochu chápal ten kód, vedel bys, ze oba pokusy o vypsání detailu jsou ekvivalentní. Bud oba vypisou totéž, nebo oba nic.
faksa5
Profil *
Konečně už se ukazují nějaká data, ale bohužel se zobrazuje jen první projekt s nejnižším PID. Použil jsem následující kód:
$sql="SELECT * FROM obsah";
$result=mysqli_query($db,$sql);
$row=mysqli_fetch_assoc($result);
echo "<hr>";
echo $row['pid'];
echo "<hr>";
echo $row['detail'];
Teď bych potřeboval nějak vyřešit problém se zobrazováním zápisu s nejnižším PID. Myslím si, že jej bude třeba přidat do SQL dotazu, ale nejsem si jistý, jak by měl tvar vypadat.Zkusil jsem SELECT * FROM obsah WHERE pid=$_GET['pid'], ale výsledek neúspěšný.


Tomášeek:
PS. Kdybys aspon trochu chápal ten kód, vedel bys, ze oba pokusy o vypsání detailu jsou ekvivalentní. Bud oba vypisou totéž, nebo oba nic
Chápu, že bude výsledek stejný, původně tam nebyl 4. řádek, ale protože se mi nic neukazovalo, zkusil jsem načíst data přímo bez uložení do proměnné.
Tomášeek
Profil
faksa5:
Where mas správně, bez nej to samozřejmě nemůže fungovat (resp. vybere se vse bez ohledu na id).

A důvod, proč jen jeden výsledek? Výsledku se vrátí stejně jako je řádku v tabulce, jen ty vypisujes (pracujes) jen jeden. Přesně to říkáš na řádku 3.

Fakt doporucuju začít nějakým základem, mrkni napr. na pehapko.cz napsané zdejší komunitou. Do začátku ti podobný on-line kurz pomůže.
faksa5
Profil *
Dobrý den,

dlouhou dobu jsem si lámal hlavu s tím, jak to zprovoznit a nemohl na to přijít ani podle návodů na internetu, takže jsem to někdy v říjnu vzdal. V minulém týdnu jsem dělal nějaké úpravy na zahradě a zčistajasna mě napadlo řešení tohoto problému a co mě překvapilo - řešení bylo funční :o. Problém se zobrazováním mám tak vyřešený. Teď se však dostávám k dalšímu problému, který je částečně obsažen v názvu tohoto vlákna. Jak docílím toho, aby každý uživatel viděl ve svém menu jen projekty, které mu já přidělím?

Předpokládám, že základ při řešení tohoto problému musí být přidělení uživatelských ID k projektu. Napadají mě dvě možnosti - první je do tabulky vložit další sloupec s ID uživatelů, kteří by měli mít do projektu přístup. Přidělování uživatelů bych měl nejraději formou checkboxů v administraci projektu, aby mohlo ke stejnému projektu více uživatelů. Bojím se ale jedné věci - když zaškrtám uživatele 1, 2 a 3 a tyto údaje pošlu do tabulky, bude pak v ID uvedeno ID "1, 2, 3", z čehož by pak ale systém nemohl rozpoznat jednotlivé uživatele - domníval by se, že se jedná o uživatele s identifikátorem 1, 2, 3. Další nevýhodou by pak byla editace, u které by se mi taky pravděpodobně nenačetlo zaškrtnutí checkboxů a při každé editaci bych tak musel uživatele zadávat znova (což je nejen obtěžující, ale mohl bych se splést a někomu přidělit jiný projekt).

Druhá možnost se mi jeví jako lepší - vytvořil bych novou tabulku, kterou bych nazval například "opravneni" a v ní by byly dva sloupce - jeden s ID uživatele a druhý s ID projektu. Pokud bych chtěl přidělit projekt ID 4 uživatelům s ID 1 a 2, byly by v tabulce dva záznamy. Zaškrtnuté hodnoty by se pak navíc snadno daly přidělit i ke správným checkboxům s uživateli a nemusel bych tak při každé editaci znovu definovat uživatele.

Je moje úvaha správná a je tak lepší využít druhou možnost? Nebo existuje ještě nějaké lepší řešení?
Ikki
Profil
Druhá varianta je správně.
Keeehi
Profil
faksa5:
Druhá varianta je správná.

Checkboxy by samozřejmě šlo při editaci načíst předvybrat i při použití prvního zpusobu, nic složitého v tom není. Jelikož ho ale používat nebudete tak vás ani nemusí trápit, jak by se to udělalo.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0