Autor Zpráva
martin5504
Profil
Dobry den, prosim vas potrebujem poradit, mam nejake veci vytiahnute z DB mam ich v tvare test.php?id=CISLO avsak chcem aby sa to vyselectovane zobrazilo len clovekovi ktory je prave prihlaseny, je to vlatne mozne? Vopred dakujem.
Taps
Profil
martin5504:
je to vlatne mozne?
Ano, je to možné. Do souboru test.php umisti skript, který bude kontrolovat zda je uživatel přihlášen či nikoliv.
Praktická ukázka: http://pecan.cz/index.php?id=39&n=registrace-prakticky-priklad
martin5504
Profil
Díki, ale nejde mi to aby to videl len registrovaný, ale aby to videl len človek ktorý je prihlasený, nie len registrovaný, tým pádom si to môže pozrieť aj niekto iný registrovaný.
ts_istudio
Profil
martin5504:
Na té stránce hledej text "Pomocí jednoduché kontroly se přesvědčíme, zda je uživatel přihlášen.".
martin5504
Profil
Ja chápem čo myslíte, ale vy asi nechápete mňa, ja mam podmienku pre prihláseného uživ. , ale ja potrebujem to aby ten text ktorý mam napr. na test.php?id=55 videl len ten uživ. ktorému ten obsah patrí pretože v DB je vlastník=ID. Ja vám to asi píšem zle moja chyba prepáčte.
Taps
Profil
martin5504:
kontroluj přímo tedy id článku a id vlastníka článku
Magnus123
Profil
martin5504:

Předpokládám, že "id=CISLO" je ID nějakého článku v databázi (nebo prostě nějaký klíč, podle kterého se vytáhnou data).
Přihlašování uživatelů máš, tudíž bys měl mít v sessions uložené ID uživatele. Postup by mohl být např. takový:

<?php
$id = (int) $_GET["id"];
$dotaz = $pdo->prepare("SELECT * FROM tabulka WHERE id = ? AND vlastnik = ?");
$dotaz->execute(array($id, $_SESSION["uzivatel_id"]));
$data = $dotaz->fetch();

if ($data !== FALSE) {
    // zobrazíme data
} else {
    // neexistují data podle klíče $id nebo daný uživatel není vlastníkem
}
martin5504
Profil
Ďakujem, len sa chcem spýtať, vyznie to asi blbo, ale $dotaz = $pdo->prepare("SELECT * FROM tabulka WHERE id = ? AND vlastnik = ?");. Tieto "?" otázniky má byť miesto nich niečo alebo...? Nie som profík v PHP to vidíte sami.
Magnus123
Profil
martin5504:
Zkus si něco přečíst o parametrizovaných dotazech (prepared statements). Nevím, jak pracuješ s databází, proto jsem uvedl příklad s PDO.

Edit: Pro objasnění - místo těch otazníků se dosadí hodnoty z metody execute(), které jsem předal jako pole. Tzn. místo prvního otazníku se dosadí hodnota proměnné $id a místo druhého $_SESSION["uzivatel_id"]. Výhoda parametrizovaných dotazů je ta, že se hodnoty automaticky ošetřují vůči SQL injection.
martin5504
Profil
Díki čítal som, len som teraz celý z toho zmätený, ja to momentálne využívam takto, lenže mám jednu chybu.

<?php
     
     require("./include/include.php");
    mysql_con();                   

    {            
        if(isset($_GET["id"]))
        {
            if(!is_numeric($_GET["id"])) return Error("Zle zadané ID.");
            $kto = $_GET["id"];

      $test = $pdo->prepare("SELECT * FROM tabulka WHERE id = ? AND user = ?");
      $test->execute(array($kto, $_SESSION["id"]))
      $data = $test->fetch();
    
      while($lnk = mysql_fetch_array($data)) echo '<p>'.$lnk["test"].'</p>';
          return 0;
        }      
      
?>

Chyba je to PHP Parse error: syntax error, unexpected T_VARIABLE in. Je to v " $data = $test->fetch();"


Vyriešené, ďakujem moc za pomoc veľmi mi to pomohlo.
ts_istudio
Profil
martin5504:

BV tom článku, na který odkazuješ, je několik věcí, které bych nedoporučil, třeba velká písmena v proměnných nebo (nevysvětlené a často zbytečné) použití ob_start, Magnus123 ti tady dává ukázku v pdo místo klasické syntaxe, takže se tím odkázaným článkem míjí. Nedivím se, že tomu nerozumíš.

Ten příklad, ze kterého vycházíš, nejspíš funguje. Odpíchni se od něj. Veškerá data, spojená s uživatelem, musí být v databázi. Když je chceš vypsat, použij k tomu SELECT (jak, to v tom příkladu někde je) a vyber údaje podle ID aktuálně přihlášeného. To je v jedné z těch session. Nic víc za tím není.
Luky
Profil
martin5504:
$test->execute(array($kto, $_SESSION["id"]));
Na 13. řádku ti chybí středník
Magnus123
Profil
Omlouvám se, nevěděl jsem, jak pracuješ s databází, proto jsem zvolil pro příklad PDO.

V tvém případě by to mohlo vypadat třeba takto:
<?php

require("./include/include.php");
mysql_connect("údaje k DB");                     

if(isset($_GET["id"]))
{
    if(!is_numeric($_GET["id"])) return Error("Zle zadané ID.");
    $kto = $_GET["id"];
 
    $test = mysql_query("SELECT * FROM tabulka WHERE id = " . $kto . " AND user = " . $_SESSION["id"]);
    if (mysql_num_rows($test) > 0) {
        while ($lnk = mysql_fetch_array($test)) echo '<p>'.$lnk["test"].'</p>';
    }

   return 0;    
}
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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