ugrás a tartalomhoz

POST Azonosítás

supi007 · 2008. Nov. 12. (Sze), 09.14
Hi,
Általam készülő oldalon van lehetőség hírt küldeni. Szeretném megoldani, hogy a hír küldője: szerkeszthesse és törölhesse a hírt. Sajnos ott akadtam el, hogy nem tudom azonosítani a hírt. Jelenleg úgy működik, hogy bekérem a felhasználótól, hogy mi a cikk azonosítója (ezt kiíratom a kiíratásnál). Elég fapados\gagyi, de most ennyit tudok. Segítséget szeretnék kérni, hogyan kellene ezt csinálni?
supesz
 
1

attól függ

rrd · 2008. Nov. 12. (Sze), 10.25
Attól függ, hogy hogyan működik a rendszered. Ha az embernek be kell lépnie a cikk beküldéséhez akkor az adatbázisban el kellene mentened, hogy melyik cikket melyik user küldte be, és ez alapján vissza tudod a következő belépésnél keresni, hogy melyik tartozik hozzá.

Ha nem kell belépni hozzá akkor nehezebb az ügy, esetleg cookival vagy egy böngésző-oprendszer-monitor vizsgálattal megkísérelheted beazonosítani.
4

most olvastam

supi007 · 2008. Nov. 12. (Sze), 11.16
Mielőtt nyitottam ezt a topicot kicsit böngésztem a régiek között és találtam egy cikket a session-ről. Azért fontos ez, mert azonosításhoz kellene kötni az oldalt\oldalakat. Szóval lehet szó azonosításról. Ezért írtam, hogy minden féle megoldás érdekel, mert igazából én nem vagyok nagyon jártas a programozásban ezért nem biztos, hogy ismerek minden prog.eszközt a cél eléréséhez.
2

nem értem

gex · 2008. Nov. 12. (Sze), 10.27
ott akadtam el, hogy nem tudom azonosítani a hírt [...]a cikk azonosítója

azzal van gond, hogy összepárosítsd a felhasználókat a hírekkel?
3

asszem igen

supi007 · 2008. Nov. 12. (Sze), 11.13
Azzal van a gond, hogy van egy gombom, amire rákattinthat: ez a szerkesztés gomb.
Azonban honnan tudja a program, hogy az illető melyik cikket akarja szerkeszteni? Valahonnan ki kellene olvasnia a cikk azonosítóját, de vajon honnan vagy hogy?
5

küldd el a cikk azonosítóját is

gex · 2008. Nov. 12. (Sze), 11.23
ezt a gombot gondolom a php programod generálja oda. a címből ítélve egy
  1. <form action="edit.php" method="post">  
  2.     <input type="submit" value="szerkeszt" />  
  3. </form>  
kód formájában. ha beleraksz még egy
  1. <input type="hidden" name="id" value="ide írd az azonosítót" />  
elemet is, akkor az edit.php $_POST['id'] alakban meg fogja kapni a cikk azonosítóját.
6

ó nem

supi007 · 2008. Nov. 12. (Sze), 11.45
(mégis csak le kellett volna írnom)
Szóval az adatbázisomban szerepel a cikk_id,datum,ido,user,tartalom oszlop.
Ezzel viszem fel az új cikkeket:
  1. <?php  
  2. echo '  
  3.     <html>  
  4.     <head>  
  5.     <title>Cikk küldő!</title>  
  6.     </head>  
  7. ';  
  8. $akt_datum = DATE("Y-m-d");  
  9. $akt_ido = DATE("H:i:s");  
  10. echo '<table border="1" cellpadding="1" cellspacing="1">  
  11. <tr>  
  12. <td>Ön az alábbi személyes adatokat adta meg:</td>  
  13. <td>';print "$akt_datum "; print " $akt_ido"; echo '</td>  
  14. </tr>  
  15. </table>  
  16. <br /><br />  
  17. ';  
  18.   
  19. $name = $_POST["uname"];  
  20. $pswd = $_POST["pswd"];  
  21. $cikk = $_POST["cikk"];  
  22.   
  23. print "Felhasználónév: <b>$name</b><br />";  
  24. print "Jelszó: <b>$pswd</b><br /><br />";  
  25. print "$cikk<br /><br />";  
  26.   
  27. include ("csatlakozas.php");  
  28.   
  29. mysql_select_db($table$sql_csatlakozas);  
  30. $sql = "select * from moricz1b.azonosit";  
  31. $cikk_feltolt = "insert into moricz1b.cikk (cikk_id, datum, ido, user, tartalom) VALUES ('','$akt_datum','$akt_ido','$name','$_POST[cikk]')";  
  32. $eredmeny = mysql_query($sql$sql_csatlakozasor die(mysql_error());  
  33.   
  34. while ($tomb = mysql_fetch_array($eredmeny))  
  35.     {  
  36.     $nev = $tomb['user_name'];  
  37.     $jelszo = $tomb['user_pswd'];  
  38.     if ($name == $nev && $pswd == $jelszo)  
  39.         {  
  40.         $j++;  
  41.         }  
  42.     }  
  43. if ($j>0)  
  44.     {  
  45.     mysql_query($cikk_feltolt$sql_csatlakozas);  
  46.     print "A cikket sikeresen elküldte!";  
  47.     }  
  48.     else  
  49.     {  
  50.     print "Önnek nincsen joga cikket küldeni!<br />Amennyibe kellene, hogy legyen, kérem forduljon a rendszergazdához!<br />Megértését köszünjük!<br /><br />webmester<br />";  
  51.     }  
  52. echo '<center><form>  
  53. <input type=button value="Bezár" onClick="javascript:window.close()">  
  54. </form></center>';  
  55. echo '</html>';  
  56. ?>  
A szerkeszt gombot pedig csak úgy csináltam mellé, gondolván, hogy majd írok egy scriptet, amivel szerkeszteni is lehet. Csak akkor még nem tudtam, hogy ilyen bonyolult lesz.
7

Hmmm

cSuwwi · 2008. Nov. 12. (Sze), 12.50
Mióta php-zel? Mert van pár - khm - csúnya megoldás. Persze csak azért jelzem, hogy fejlődj belőle.
Pl. formból küldött adatot nem írunk közvetlenül adatbázisba, valami ellenőrzés illik elé, legalább egy mysql_real_escape_string()

Az első echozás a fejléccel felesleges, a php-t ott érdemes kezdeni, ahol tényleg kell, a fejlécet meg tedd ki sima html-ként. Felesleges php használat.

Az insert intonál a cikkid generálás legyen automatikus (sql-ben auto increment arra a mezőre), és majd azt lekéred, és szerkeszted.

A végén a bezár gombnál ha csak egy javascript kódot futtatsz, pl. ablakbezárás, felesleges a form megadása. Az csak akkor kell, ha adatot akarsz küldeni.

Hirtelen ennyi.
8

igaz - köszi

supi007 · 2008. Nov. 12. (Sze), 12.57
1 hónapja.
Amúgy mindenben igazad van (este rá is gyúrok).
Az auto_increment az működik. Azt használom.
9

vázlat

gex · 2008. Nov. 12. (Sze), 13.26
első körben egy felhasználó-kezelést kéne csinálni, hogy amikor megnyitja majd valaki azt az oldalt amin szerkesztheti a cikket, akkor a program tudja azt hogy ki próbálja szerkeszteni.
ezek után már tudsz csinálni egy olyan alap megoldást, hogy a cikkek listázásánál a belépett felhasználó azonosítóját összehasonlítod a az éppen kiírandó cikk user mezőjével és ha egyeznek akkor kirakod a szerkesztés linket, pl szerkesztes.php?id=x ahol x a cikk azonosítója.
a szerkesztes.php-ben pedig az első dolog az ellenőrzés, hogy a felhasználó szerkesztheti-e a $_GET['id'] azonosítójú cikket. ha igen akkor ugyanúgy egy űrlapot kell csinálni mint a felvitelnél, a különbség csak annyi, hogy a textarea elemet ki kell tölteni az azonosító alapján lekért tartalommal. az elküldés után pedig nem insert hanem update sql parancsot kell futtatnod.

nagyjából ennyi a legegyszerűbb megoldás vázlata.

ajánlott cikkek:
http://weblabor.hu/cikkek/munkamenetkezeles1
http://weblabor.hu/cikkek/munkamenetkezeles2
http://weblabor.hu/cikkek/phpkeretrendszer
http://weblabor.hu/cikkek/jogosultsagkezeles
(elsőre sok lehet a terjedelem és az információ is, de biztos tanulsz belőlük valamit)
10

aham

supi007 · 2008. Nov. 12. (Sze), 13.27
Ez jól hangzik. Ezt meg fogom próbálni.
Az a $_GET["id"] bigyula nem világos. Miért $_GET és miért $_POST?
Ez persze most csak teoretikus, mert nem akarom offolni a saját topikomat.
Köszi amúgy.
11

$_GET vs $_POST

gex · 2008. Nov. 12. (Sze), 13.53
a $_GET tömbbe az url-ben szereplő a $_POST tömbbe pedig a method="post" tulajdonságú űrlapokból küldött változók érkeznek.

lehet method="get" tulajdonságú űrlapot is küldeni, az megjelenik az url-ben, és így $_GET lesz belőle.

szerk: a dokumentáció is hasznos
13

oldal

supi007 · 2008. Nov. 22. (Szo), 14.10
Az oldal maga a privatpage-ra hallgat. Ezt szeretném kicsit kipofozni.
12

nem értem

supi007 · 2008. Nov. 22. (Szo), 13.51
Segítséget szeretnék kérni, mert nem értem ezt a Session dolgot.
Hogyan lesz ebből felhasználó azonosítás és hogyan fogja tudni a kiszolgáló, hogy van-e joga megnézni valakinek egy oldalt? Nem értem :(
15

az oldaladon van egy belépő

rrd · 2008. Nov. 22. (Szo), 15.06
az oldaladon van egy belépő box. user belép, adatbázisban ellenőrzöd, hoyg létezik-e, jó-e jelszó, lekérde a jogát. A sessionba elmented, hogy be van lépve, hogy ki ő és mihez van joga.
Ezután minden oldal elején ellenőrzöd, hogy be van-e lépve (a session szerint) és van e joga ott ügyködni.
Nagy vonalakban ennyi
17

Na ezt nem tudom

supi007 · 2008. Nov. 22. (Szo), 15.27
ki ő és mihez van joga.
Ezután minden oldal elején ellenőrzöd, hogy be van-e lépve (a session szerint) és van e joga ott ügyködni.

Ezt nem tudom, hogy kell...
20

a jogosultság kezelést neked

rrd · 2008. Nov. 22. (Szo), 20.43
a jogosultság kezelést neked kell kitalálni elvi szinten. Mondjuk egy egyszerű megközelít esetén vannak sima userek és szerkesztők. Az adatbázisban a következő mezőid lesznek:
id, nev, jelszo, jog

Mondjuk azt mondod, hogy ugy akarod tarolni, hogy ha a jog 'u' akkor user, ha 's' akkor szerzo.

Ebben az esetben a php oldlad eleje igy nez ki: (Csak gyorsan idepötyögtem, lehetnek benne szintaktikai hibák, az elvet nézd)
  1. <?php  
  2. session_start();  
  3. if(!$_SESSION['user']){  
  4.   //nincs belépve a user  
  5.    header('Location:login.pgp');   //átirányítjuk a belépéshez   
  6. }  
  7. else{  
  8.    //szerepel a session-ban tehát be van lépve  
  9.    if($_SESSION['jog'] == 'u'){  
  10.       //sima user. Ide jönnek azok a funkciók amiket ő érhet el pl a bejegyzés megjelenítése  
  11.    }  
  12.    elseif($_SESSION['jog'] == 's'){  
  13.       //ide jönnek azok a funkciók amiket a szerzőknek szánsz  
  14.    }  
  15. }  
  16. ?>  
Más megközelítés szerint azt is mondhatod, hogy a jog pl egy 0-9 terjedő egész szám. Minél nagyobb a szám annál több mindenhez van joga. Pl megtekintéshez elég ha van 1-es joga, módosításhoz legalább 5-ös jog, tölréshez vagy más user létrehozásához 9-es jog. Ilyenkor a php-ban azt vizsgálod., hogy a $_SESSION['jog'] nagyobb egyenlő-e mint a művelethez szükséges.

Ha ennél kifinomultabb dolog kell arra ott az ACL.

Ne haragudj, de számomra még mindig nem derült ki, hogy a dolog elve nem tiszta előtted, vagy az ugyan tiszta de nem tudod lekódolni.
22

köszi

supi007 · 2008. Nov. 22. (Szo), 21.00
Hi,
Köszönöm a segítséget.
Az elv nem tiszta, mert nem bírom elképzelni, miként működik. Amit megtudok csinálni az az, hogy kész a beléptető form.
A magam módján meg tudom vizsgálni, hogy van-e a dbben ilyen user ilyen jelszóval:
$query = "SELECT * FROM azonosit";
$result = mysql_query($query, $sql_csatlakozas) or die(mysql_error());
while ($tomb = mysql_fetch_array($result))
{
if ($_POST['uneved'] == $tomb['user_name'] && $_POST['ujelszo'] == $tomb['user_pswd'])
header("Location: cimlap.php");
}

Most találtam rá a session_is_registered és a session_register fg.-kre.
Azonban a Session elvét vagy használatát még mindíg nem értem. Beírom a kódom elejére, hogy
<?php session_start(); ?>

de nem értem ez mit csinál.
Egyenlőre ennyi

Skypeom: supesz007, akár írhatnánk azon is, mert nem tudok, mindent bepostolni, de ha nem nem.

supesz
21

a beléptetés

rrd · 2008. Nov. 22. (Szo), 20.59
a beléptetés meg:
  1. <?php  
  2. //ez a login.php fájl  
  3. session_start();  
  4. if(!$_SESSION['user']){  
  5.    //még nincs belépve  
  6.    if(!$_POST){  
  7.       //még nem küldte el a formot, vagyis most jött ide bejelentkezni, toljuk ki neki a login formot  
  8.       print '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';  
  9.       //..ide jön a form többi része, azaz két input mező a usernévnek és a jelszónak  
  10.       //és egy submit gomb  
  11.    }  
  12.    else{  
  13.       //vannak adatok a post tömbben nézzük meg, hogy szerepelnek-e az adatbázisban  
  14.       $kapcsolat = mysql_connect ('localhost''user''pass');  
  15.       if (!$kapcsolatdie ("Nem lehet kapcsolódni a MySql kiszolgálóhoz." . mysql_error());  
  16.       mysql_select_db('adatbazis'or die ("Nem lehet megnyitni az adatbázist" . mysql_error());  
  17.         
  18.       //kapcsolódtunk az adatbázishoz keressük meg a usert  
  19.       $parancs = 'SELECT * FROM users WHERE users.nev = ' . mysql_real_escape_string($_POST['nev']) . 'AND users.jelszo = ' . mysql_real_escape_string($_POST['jelszo']);  
  20.       $eredmeny = mysql_query($parancs);  
  21.       $user = mysql_fetch_array($eredmeny);  
  22.       //ha van ilyen user tegyük be az adatait a sessionba  
  23.       if($user){  
  24.          $_SESSION['user'] = $user['nev'];  
  25.          $_SESSION['jog'] = $user['jog'];  
  26.       }  
  27.    }  
  28. }  
  29. ?>  
Nagy vonalakban ennyi. Persze a jelszót valószínűleg titkosítottan tárolod, tehát úgy kell hasonlítani,aztán vannak itt még más biztonsági és egyéb kérdések de magaa beléptetés valahogy így zajlik.
14

UP

supi007 · 2008. Nov. 22. (Szo), 14.54
Csak Uppolnám a Topicot,mert fontos lenne(nekem):)
16

találtam vmit

supi007 · 2008. Nov. 22. (Szo), 15.15
"Az index.php oldal behívásakor elindítunk egy munkamenetet. Sikeres belépéskor a munkamenet számára létrehoztunk a $_SESSION[] globális változóban egy user nevű változót, amelynek a felhasználó neve éréket adtuk. Az egyes oldalakra való belépéskor ennek a változónak a meglétét ellenőrizzük a session_registered() függvény segítségével."

Ez mit jelenthet?
Én idáig jutottam, de ez még nem csinál semmit.
<?php //szamlalo.php  
    session_start();  
    if (!isset($_SESSION[’szamlalo’])) {  
        $_SESSION[’szamlalo’] = 0;  
}  
$_SESSION[’szamlalo’]++;  
echo $_SESSION[’szamlalo’];  
 
// változó törlése  
if ($_SESSION[’szamlalo’] == 20) {  
    unset($_SESSION[’szamlalo’]);  
}  
?>
18

UP

supi007 · 2008. Nov. 22. (Szo), 16.49
Egy kis segítség? Tud valaki?
19

Egész nap

supi007 · 2008. Nov. 22. (Szo), 20.02
Hi,
Egész nap nyúztam ezt az átkozott PHP-t, de csak nem értem ezt a Session dolgot. Csináltam én már mindent, de ha a böngészőbe beírom az oldalt, akkor bizony megjelenik simán. Nem mondja, hogy nincs hozzáférésem az oldalhoz.
Valaki pls. help, mert tényleg érdekel. Elolvastam már a php.net-es bejegyzéseket, a weblaborosokat és még néhány forrást is megvizsgáltam, de nekem nem jön át, hogy mi a lényeg.
Előre is köszi.

supesz
23

Azonosítás

supi007 · 2008. Dec. 2. (K), 13.57
Hello,

Még mindíg ott tartok, ahol elkezdtem. Hogyan tudnám beazanosítani a cikkemet?
Itt a weblaboron ha az egeret a válasz link fölé viszem, akkor megjeleni egy link --> http://weblabor.hu/forumok/temak/18093/hozzaszolas/42970 a végén látszik, hogy ez a cikk sorszáma. Na nekem is ilyen kellene. De vajon, hogy a viharba??
Elképzelésem sincs. Amit kptam választ azt elolvastam, de lehet én nem értem, de nem tudom, mit csináljak vele. Előre is köszi a válaszokat.

supesz
24

???

tgr · 2008. Dec. 2. (K), 15.38
Ha nem tudod beazonosítani a cikkedet, hogyan akarod megjeleníteni (elmenteni, bármi mást csinálni vele)? Valami belső azonosítót csak használsz.
25

A cikkemet be tudom

supi007 · 2008. Dec. 2. (K), 15.44
A cikkemet be tudom azonisítani. A cikk táblámban van cikk_id azonosító, ami auto_increment.
De, amikor kiteszem a linket, hogy szerkeszt, akkor hogyan fogom tudni, hogy melyik cikket kell szerkeszteni? Honnan fogja tudni a nyomorult php kód, hogy a 10-es cikket szerkessze, meg amikor kb így néz ki a kód:
<a href="edit.php">Szekeszt</a>
26

Most ott

supi007 · 2008. Dec. 2. (K), 17.22
Most ott tartok, hogy a kiíratásnál betűztem egy ilyet: <a href="'.$tomb[cikk_id].'">Szerkeszt</a> ez jelenik meg ha fölé viszem az egeret: http://napfutok.uw.hu/1 - a végén a szám az jó most ua. mint a weblaboton. A kérdés, hogy hogyan futtassam akkor scriptet rá? hogyan tudom azt az egyest átadni vizsgálatra?

supesz
27

input

tgr · 2008. Dec. 3. (Sze), 12.42
POST kérésnél input mezővel, ahogy az az 5. kommentben le lett írva. GET kérésnél meg az URL query string részével: url?paraméter1=érték1&paraméter2=érték2 azaz pl. http://napfutok.uw.hu/index.php?action=edit&id=<?php echo $cikk_id ?> vagy http://napfutok.uw.hu/edit.php?id=<?php echo $cikk_id ?> (attól függően, hogy műveletenként külön php fájlt használsz-e).
28

thx

supi007 · 2008. Dec. 3. (Sze), 15.21
Köszi. Megpróbálom.

supesz
29

nem értem akkor sem

supi007 · 2008. Dec. 3. (Sze), 16.51
Ide hogyan szerkesszem be, hogy továbbvigye a cikk azonosítóját. Az előző postoknak semmi értelme nincs. Vagy erre nem értelmezhető.
Én így iratom ki a cikk táblám tartalmát. Ott van a Szerkeszt pont is. Remélem így jobban érthető a helyzetem.
  1. while ($tomb = mysql_fetch_array($eredmeny)) // |  
  2.     {  
  3.     if ($_SESSION['real'] == $tomb['rname'])  
  4.     {  
  5.     echo '  
  6.     <table border="0" cellspacing="0" cellpadding="1" width="590px">  
  7.     <tr>  
  8.     <td align="left" bgcolor="#000000"><font size="2" color="#ffffff">'.$tomb['rname'].' | Szerkeszt</font></td>  
  9.     <td align="right" bgcolor="#000000"><font size="2" color="#ffffff">'.$tomb['datum'].' , '.$tomb['ido'].' | #'.$tomb['cikk_id'].'</font></td>  
  10.     </tr>  
  11.     <tr>  
  12.     <td colspan="2" align="justify"><font face="Tahoma" size="2">'.$tomb['tartalom'].'<br /></font></td>  
  13.     </tr>  
  14.     </table>  
  15.     <br /><br />';  
  16.     }  
30

szerkeszt link?

Poetro · 2008. Dec. 3. (Sze), 22.47
  1. $tomb['rname'].' | <a href="szerkeszt.php?id='$tomb['cikk_id'] .'">Szerkeszt</a>'  
31

Ezt csináltam

supi007 · 2008. Dec. 4. (Cs), 08.10
Ezt már csináltam. Aztán betöltötte a szerkeszt.php fájlt, de az id-t hogyan adja át vizsgálatra? Valami olyasmiben gondolkodom, hogy összehasonlítom a kapott cikk id-t a táblában lévő cikk id-vel és akkor lehet azt szerkeszteni.
Gondolom ezt így is kel csinálni. A baj csak az, hogy nem tudom átadni az értéket vizsgálatra. Ezt hogyan kellene?

supesz
32

írjuk meg helyetted?

gex · 2008. Dec. 4. (Cs), 11.23
mégegyszer utoljára:
  1. a cikkek listájában minden cikk mellé csinálsz egy linket, pl szerkeszt.php?id=x, ahol x az éppen kiírandó cikk azonosítója
  2. a szerkeszt.php-ben a $_GET['id'] változó fogja tartalmazni, hogy milyen azonosítót kaptál
  3. a szerkeszt.php-ben lekéred a kapott azonosító alapján a konkrét cikk adatait, és ezzel kitöltesz egy űrlapot, azaz csinálsz egy cikkfeltöltéshez hasonló dolgot, csak lesznek alapértelmezett értékek a mezőkben
  4. a mentés gomb megnyomása után INSERT parancs helyett UPDATE paranccsal felülírod a cikk adatait az adatbázisodban

mivel ezek nagyjából elhangzottak itt, már csak annyit tudunk segíteni, hogy megírjuk helyetted, ehhez a munka és állás rovatot ajánlom.
33

ne!

supi007 · 2009. Jan. 6. (K), 14.15
ne!