![]() ![]() |
2011. Feb 9., 15:25
Post
#571
|
|
|
tag ![]() ![]() Group: tag Posts: 167 Joined: 08. February 1. From: bp Member No.: 4836 |
gyakorolgatok php-mysql témában. egy cms telepítőjét próbálom elkészíteni, de szükségem lenne néhány tapasztalt/hozzáértő tanácsra:
a telepítés menete pl a wordpress telepítéshez hasonló lenne: felmásolja a tárhelytulajdonos a fájlokat a tárhelyére. aztán böngészőben meglátogatja ezt a publikus lapot, megadja az adatbázis-kapcsolathoz szükséges adatokat, ha ez működő kapcsolatot eredményez, létrejönnek az üres táblák, és (többek közt) létrehoz egy admin felhasználót. ezt követően a telepítő gyakorlatilag nem is használható. a megvalósítás annyi lenne, hogy: elsőként ellenőrzi, hogy létezik-e egy settings.php fájl (ebben lesznek tárolva a db kapcsolódás adatai, és egyéb dolgok, tehát a connect előtt ez lesz include-olva). ha létezik a fájl, az azt jelenti, hogy a telepítés már megtörtént, tehát teendő nincs, használható az oldal... a fájl nem léte esetén van az, hogy feltételezzük, ez egy új telepítés lesz, ergo egy formon bekérjük a kapcsolódáshoz szükséges hosztnevet, db felhasználónevet, jelszót, db nevet (valamint egy tábla előtagot is). ha mindezek rendben meg lettek adva, még nem mentjük el settings.php-be, mivel úgy a lap újratöltődésekor a feltétel (hogy létezik-e a fájl) másik ága futna, nekünk viszont szükségünk van még ezelőtt arra a bizonyos admin felhasználóra. ezért egy újabb form-on kérünk nevet és jelszót, ezt elmentjük adatbázisba, ezzel a telepítés be is fejeződik (esetleg még egy-két lépés jöhet az admin felhasználó létrehozása után, pl. oldal címének megadása, stb...). az ellenőrzési műveletek most mellékesek, a kérdés csak annyi, hogy milyen módon érdemes a kapcs. adatokat továbbvinni (a formra történő beírás és a fájlba mentés között)? - session-ben tárolni... - hidden input field-ekben görgetni post adatként (mivel elvileg csak egyetlen lépés van közbeiktatva - az admin felhasználó létrehozása)... - esetleg rejtett mezők nélkül a post tömb továbbvitelével (gondolom ez lesz a megoldás, de erről tudok legkevesebbet :D szóval olvasok egy kis manualt...) - vagy már rögtön az elején fájlba menteni, más fájlnévvel persze, majd amikor már készen van az admin felhasználónk, átnevezni a fájlt settings.php-re... gondolom triviális a kérdés, de kezdőként nehéz választ találni ilyenekre, hogy több lehetséges eljárás közül melyik a leghatékonyabb, mit szoktak használni hasonló esetekben... nyilvánvalóan a későbbiekben is lesznek ugyanezt a megoldást igénylő esetek, tehát a kérdés általános használatra is irányul. köszi a választ! :) This post has been edited by zoleytaylor: 2011. Feb 9., 15:37 |
|
|
|
2011. Feb 9., 20:29
Post
#572
|
|
![]() Commander 1337 ![]() ![]() ![]() ![]() ![]() Group: törzstag Posts: 5506 Joined: 03. May 25. From: Szeged Member No.: 38 |
Én alapvetően a másik fájlba mentést választanám, többek közt egyik előnye, hogy útközben tudod ellenőrizni, hogy nem próbálja-e két ember ugyanazt a telepítést végrehajtani.
Amúgy: a session itt azért nem jó, mert az egy munkamenet adatait tárolja, ezek meg globális beállítások. Éppen ezért inkább egy file_put_contents('settings.php.step1', serialize($adatok)) módszert ajánlanék. Esetleg - mert ez így biztonsági rés - session-be letárolni a fájlnevet, amibe mented (véletlen generált) és a globális állapotot (mármint hogy már egy telepítést elindítottak) egy lock.txt vagy ilyesmi fájl létrehozásával és meglétének ellenőrzésével csinálok (ekkor ugye: nincs lock.txt -> most induló telepítés, van lock.txt és a session-ben ott van a véletlen fájlnév -> az a user telepít, egy telepítés fut, van lock.txt és nincs a sessionben fájlnév -> valaki más is próbál telepíteni) BlackY -------------------- BlackY
Blog Új téma vagy tutorial Szerkesztő | Törzstag -- Hogyan kérdezzünk? Üvöltsük meg együtt a holdat: Wuff :D |
|
|
|
2011. Feb 10., 11:56
Post
#573
|
|
|
tag ![]() ![]() Group: tag Posts: 167 Joined: 08. February 1. From: bp Member No.: 4836 |
köszi
ebben a konkrét esetben a biztonsági rést lehet meghagyom, végülis a hozzáférést eléggé lekorlátozza az, hogy a telepítést végző személyen kívül valószínűleg senki más nem tudja melyik az a (remélhetőleg) néhány másodperc (a felmásolás és a telepítés vége között), amikor egy próbálkozással be lehetne kavarni... de a bekavarás sem tud annál nagyobb kellemetlenséget okozni, minthogy a rendszer egy másik működő db szerverhez lesz csatolva. ezt meg a settings fájl törlésével meg lehet szüntetni. na meg ezesetben a "betörőnk" megadja a saját szerverének adatait. mivel hibás adatokkal eleve szóba sem jöhet a fájl mentése... |
|
|
|
2011. Feb 16., 18:05
Post
#574
|
|
|
új tag ![]() Group: tag Posts: 64 Joined: 07. June 30. From: Hell street 666 Member No.: 4028 |
Hali!
MYSQL karakterkódolással lenne némi problémám: A mysql adattábla (a CREATE queryben) utf8-ra van állítva, ileltve a php, és maga a HTML kimenet is utf8. Ezzel nem lenne gond, a php felől szerkesztővel jól működik, és a böngésző is megleleníyti probléma nélkül. Ellenben a probléma az adatbázisba van, a szöveges mezőbe mind rosszul kerülnek be az értékek, nem tudom olvasni, és szerkesztéskor is visszadobja hogy invalid charset (konzolos mysql, linux) Ennek backupnál lenne nagy haszna ha működne, és eddig nem találtam megoldást rá - vagy csak részben. Annyit sikerült kideríteni, hogy valamilyen környezeti változót kell még utf8-ra átállítani, és megy. De melyiket, és hogyan? Szerk: megtaláltam a környezeti változókat, mik vannak beállítva, így remélem a hibát is megtaláltam: CODE character set client utf8 (Global value) latin1 character set connection utf8 (Global value) latin1 character set database latin1 character set filesystem binary character set results utf8 (Global value) latin1 character set server latin1 character set system utf8 character sets dir D:\program files\xampplite\mysql\share\charsets\ collation connection utf8_general_ci (Global value) latin1_swedish_ci collation database latin1_swedish_ci collation server latin1_swedish_ci Előre is köszi This post has been edited by Cr3ativ3: 2011. Feb 16., 18:09 |
|
|
|
2011. Mar 31., 21:25
Post
#575
|
|
|
új tag ![]() Group: tag Posts: 1 Joined: 07. February 19. Member No.: 3704 |
Hello!
Egy fórumot csináltam amit csak regisztrált felhasználók használhatnának. Nem tudom megoldani, hogy a belépett felhasználó automatikusan legyen (beírás nélkül) a hozzászólás beküldője. Ebben kérek segítséget! |
|
|
|
2011. Apr 9., 21:51
Post
#576
|
|
![]() Commander 1337 ![]() ![]() ![]() ![]() ![]() Group: törzstag Posts: 5506 Joined: 03. May 25. From: Szeged Member No.: 38 |
Hogyan tartod számon, hogy az éppen kiszolgált oldalnál épp ki van bejelentkezve? Onnan kiolvasod a felhasználót, és azt tárolod el.
BlackY -------------------- BlackY
Blog Új téma vagy tutorial Szerkesztő | Törzstag -- Hogyan kérdezzünk? Üvöltsük meg együtt a holdat: Wuff :D |
|
|
|
2011. Jun 24., 12:56
Post
#577
|
|
|
tag ![]() ![]() Group: tag Posts: 184 Joined: 05. October 26. Member No.: 1501 |
Sziasztok, ha létrehozok Mysql-ben egy adatbázis táblát , és két táblát szeretnék összekötni egy mezővel, szóval az a mező lenne a külső kulcs, akkor azt hogyan lehet megadni?
Itt vannak a példák: CREATE TABLE topic ( topic_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, topic_title VARCHAR(100), topic_date TIMESTAMP(8), topic_parent tinyint(0) null dafault 0 ); CREATE TABLE post ( post_id INT NOT NULL AUTO_INCREMENT PRIMARY_KEY, post_title VARCHAR(100), post_date TIMESTAMP(8), post_text VARCHAR(100), post_topic ..... ) ahol a post_topic ugyanaz lenne, mint a topic_parent köszi Monique |
|
|
|
2011. Jun 25., 12:15
Post
#578
|
|
![]() Commander 1337 ![]() ![]() ![]() ![]() ![]() Group: törzstag Posts: 5506 Joined: 03. May 25. From: Szeged Member No.: 38 |
Tinyint(0)?
Amúgy ha jól veszem ki (vannak témák, egy témához tartozhatnak "altémák" (gyerek témák) és hozzászólások (postok)): CODE CREATE TABLE topic ( topic_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, topic_title VARCHAR(100), topic_date TIMESTAMP(8), topic_parent INT REFERENCES topic (topic_id) ON UPDATE CASCADE ON DELETE SET NULL /* Ha átirjuk a szülő rovat azonosítóját, akkor itt is frissítjük, ha töröljük a szülő rovatot, akkor null-ra állítjuk */ ); CREATE TABLE post ( post_id INT NOT NULL AUTO_INCREMENT PRIMARY_KEY, post_title VARCHAR(100), post_date TIMESTAMP(8), post_text VARCHAR(100), post_topic INT NOT NULL REFERENCES topic (topic_id) ON UPDATE CASCADE ON DELETE DELETE /* Ha átírjuk a téma azonosítóját, a hozzá kapcsolódó postok frissülnek, ha töröljük a témát a postok is törlődnek */ ); Amire még figyelni kell az az, hogy a külső kulcs hivatkozások csak InnoDB alatt mennek (*), a MySQL akárhánytól ez a default, korábbi verzióknál a MyISAM, azoknál a create table után kell egy ENGINE = InnoDB (emlékezetből írom, lehet nem ez az opció neve / értéke). (*): Cserébe MyISAM egy szót se szól, ha létrehozol egy foreign kulcsot, csak "elfelejti" betartatni Szerk: elütés (új billentyűzet BlackY This post has been edited by BlackY: 2011. Jun 25., 12:16 -------------------- BlackY
Blog Új téma vagy tutorial Szerkesztő | Törzstag -- Hogyan kérdezzünk? Üvöltsük meg együtt a holdat: Wuff :D |
|
|
|
2011. Jun 25., 21:54
Post
#579
|
|
|
tag ![]() ![]() Group: tag Posts: 184 Joined: 05. October 26. Member No.: 1501 |
Amúgy ha jól veszem ki (vannak témák, egy témához tartozhatnak "altémák" (gyerek témák) és hozzászólások (postok)):
Igen jól vetted ki, viszont nem értettem, hogy ezzel mit akarsz mondani? Amire még figyelni kell az az, hogy a külső kulcs hivatkozások csak InnoDB alatt mennek (*), a MySQL akárhánytól ez a default, korábbi verzióknál a MyISAM, azoknál a create table után kell egy ENGINE = InnoDB (emlékezetből írom, lehet nem ez az opció neve / értéke). Bocs és köszi |
|
|
|
2011. Jun 26., 18:22
Post
#580
|
|
![]() Commander 1337 ![]() ![]() ![]() ![]() ![]() Group: törzstag Posts: 5506 Joined: 03. May 25. From: Szeged Member No.: 38 |
A MySQL több ún. tároló motort használ (MyISAM, InnoDB, Memory stb.). Alapvetően abban térnek el, hogy hogyan tárolják az adatokat, úgyhogy mindegyiknek vannak előnyei és hátrányai. A MySQL 5.2-ig amikor létrehozol egy táblát az alapból MyISAM tárolót kap. Ilyenkor ahelyett, hogy szólna, hogy "te figyu már, nem szoktam figyelni a külső kulcsokat, úgyhogy óvatosan" simán létrehozza a táblát. InnoDB-nél már van külső kulcs támogatás, vagyis az nem enged felvinni sort úgy, hogy a külső kulcsként jelölt mezőkben olyan értékek vannak, amik nem szerepelnek a másik táblában.
Pl.: CODE foo --- foo_id INT AUTO_INC foo_desc VARCHAR(128) bar --- bar_id INT AUTO_INC foo_id INT NOT NULL REFERENCES foo (foo_id) ON UPDATE CASCADE ON DELETE DELETE bar_desc VARCHAR(128) Ennél a szerkezetnél ha MyISAM-ot használsz a progiból kell kezelned azt, hogy ha megváltoztatod egy foo-beli rekord-ban a foo_id-et, akkor a lefutass egy update bar set foo_id=<új foo_id érték> where foo_id=<régi foo_id érték>, ill. ha törölsz egy rekordot a foo-ból, akkor lefutass egy delete from bar where foo_id=<a törölt rekord-beli foo_id>. InnoDB ezeket megteszi helyetted. BlackY -------------------- BlackY
Blog Új téma vagy tutorial Szerkesztő | Törzstag -- Hogyan kérdezzünk? Üvöltsük meg együtt a holdat: Wuff :D |
|
|
|
2011. Dec 17., 19:33
Post
#581
|
|
|
tag ![]() ![]() Group: tag Posts: 184 Joined: 05. October 26. Member No.: 1501 |
Sziasztok, van egy feladat, amit csak 3/4-ig tudok megcsinálni.
A feladat: Adott egy tömb ami tömböket tartalmaz (elég pl.: 3). Minden belső tömb 3-3 számot tartalmaz. Ezek egy-egy háromszög három oldala. A program írja ki egy-egy új sorba a háromszögek területét! odáig jutottam, hogy soronként kiírja az oldalak értékét, de nem tudom, hogy hogy lehetne összeszoroztatni, adott tömb értékeit. Szóval eddig jutotta: CODE $oldalak= array ( array('a' => 15,
'b' => 7, 'c' => 3 ), array( 'a' => 10, 'b' => 8, 'c' => 11 ), array( 'a' => 10, 'b' => 8, 'c' => 11 ), ); foreach ($oldalak as $oldal) { while (list($key, $ertek) = each ($oldal)) { echo $key .''. $ertek; } print "<br />"; } This post has been edited by Monique: 2011. Dec 17., 19:34 |
|
|
|
2011. Dec 23., 07:31
Post
#582
|
|
![]() Commander 1337 ![]() ![]() ![]() ![]() ![]() Group: törzstag Posts: 5506 Joined: 03. May 25. From: Szeged Member No.: 38 |
CODE foreach ($haromszogek as $sorszam => $haromszog) { $s = array_sum($haromszog) / 2; /* Hérón képlet, http://hu.wikipedia.org/wiki/H%C3%A1romsz%C3%B6g */ $teruletNegyzet = $s * ($s - $haromszog['a']) * ($s - $haromszog['b']) * ($s - $haromszog['c']); if($teruletNegyzet <= 0) { echo 'T', $sorszam, ' nem háromszög', PHP_EOL; } else { $terulet = sqrt($s * ($s - $haromszog['a']) * ($s - $haromszog['b']) * ($s - $haromszog['c'])); echo 'T', $sorszam, '=', $terulet, PHP_EOL; } } Amúgy a kérdésedre válaszolva: $oldalak[0]['a'] * $oldalak[1]['b'] stb. BlackY -------------------- BlackY
Blog Új téma vagy tutorial Szerkesztő | Törzstag -- Hogyan kérdezzünk? Üvöltsük meg együtt a holdat: Wuff :D |
|
|
|
2012. Mar 8., 22:37
Post
#583
|
|
|
tag ![]() ![]() Group: tag Posts: 184 Joined: 05. October 26. Member No.: 1501 |
Sziasztok, egy újabb kérdésem lenne:
most készítem életem első lapozóját, szerintem valameddig szépen is dolgozik, de van 2 hiba benne, de nem tudok rájönni, hogy mi az. Szóvalszeretném, ha nyilakkat rakna ki előre és hátrafele, azt ki is rakja és az müzik is. Viszont egy for ciklussal kiíratom az oldalak számát, ami az db-m szerint 4 lenne, de csak az elsőt írja ki.Aztán amikor a nyilakkal lapozok csak a 2. oldal tartalmáig írja ki a sorokat, és a tovább nyíl sem aktív többé. Beilleztem a kódot is: CODE $aktualis_oldal = isset($_GET['page']) ? $_GET['page'] : 1;
$oszto = 5; $ugras = (($aktualis_oldal - 1) * $oszto); $dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); mysql_query("SET NAMES UTF8",$dbc); $query= "SELECT * FROM lapozo.lapozo LIMIT ".$ugras.", ".$oszto.""; $result = mysql_query($query, $dbc); $ossz_sor = mysql_num_rows($result); while ($row = mysql_fetch_array($result)) { echo $row['name'].'<br />'; } $oldalak_szama = ceil($ossz_sor/$oszto); //pl. 16 sornál 4 oldal van echo $oldalak_szama.'<br />'; echo $ossz_sor.'<br />'; $page_links = ''; if ($aktualis_oldal >= 1) { $page_links .= '<a href="'.$_SERVER['PHP_SELF'].'?page='.($aktualis_oldal - 1).'"><<-</a>'; } else { $page_links .= '<-'; } for ($i = 1; $i <= $oldalak_szama; $i++) { if ($i == $aktualis_oldal) { $page_links .= '<b><a href="'. $_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a></b>'; } else { $page_links .= '<a href="'. $_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>'; } } if ($aktualis_oldal <= 1 ) //1 { /* $page_links .= 'monika'; */ $page_links .= '<a href="'.$_SERVER['PHP_SELF'].'?page='.($aktualis_oldal+1).'">->></a>'; } else { $page_links .= "->"; } echo $page_links; This post has been edited by Monique: 2012. Mar 8., 22:44 |
|
|
|
2012. Apr 24., 22:16
Post
#584
|
|
|
új tag ![]() Group: tag Posts: 44 Joined: 07. May 20. Member No.: 3937 |
Sziasztok
Én csak pár ötletet kérek, hogy lenne ésszerűbb megcsinálni egy adatbázist amiben sok mindenféle dolgot lehet majd keresni. Mint pl egy használt autós oldalnál. Kérdés hogy csináljak külön táblát a keresésnek és külön az autós adatlapoknak vagy 1 táblát és ott legyen minden oszloponként? így gondoltam a külön táblát: Keresés táblában soronként felvinnék kulcsokat és értékeket és hozzá a kocsi ID ket vagyis autós adatlap táblában levő ID-ket lenne pl kulcs:ajtok-szama; ertek:5; ID:2,5,14,222,678 kulcs:uzemanyag; ertek:benzin; ID:2,8,19,222,555 kulcs:evjarat; ertek:2005; ID:2,25,78,222,555 És a keresésnél lekérem, hogy ajtok-szama=5 és uzemanyag=benzin és evjarat=2005 és ugye lenne egy csomó ID-m amit php segítségével kiválogatnák, jelen esetben a 2 és a 222 lenne az eredmény. Utána már csak le kéne kérnem az autos adatlap táblából a 2 és a 222 es ID vel rendelkező sort. Az autós adatlapon lenne még sok más adat amiben nem kéne keresni is pl ABS, légszák, fűtött ülés, stb... Talán a keresés táblámban még így is kevesebb sor lenne, noha pl. az évjáratnál lehet lenne 20 külön féle évjárat érték is. Ha pl 10 ezer kocsiból kell is válogatni keresni a keresés táblám lehet csak 200 sor lenne, de pl az üzemanyag kulcsomnál meg ott lenne pl 5000 ID egymás után. Vélemény? |
|
|
|
![]() ![]() |
| Lo-Fi Version | Time is now: 2012. May 22. - 19:55 |