IPB

Welcome Guest ( Log In | Register )

39 Pages V  « < 37 38 39  
Reply to this topicStart new topic
> PHP-MySQL segítség III.
zoleytaylor
post 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
Go to the top of the page
 
+Quote Post
BlackY
post 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
Go to the top of the page
 
+Quote Post
zoleytaylor
post 2011. Feb 10., 11:56
Post #573


tag
**

Group: tag
Posts: 167
Joined: 08. February 1.
From: bp
Member No.: 4836



köszi smile.gif
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...
Go to the top of the page
 
+Quote Post
Cr3ativ3
post 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 smile.gif

This post has been edited by Cr3ativ3: 2011. Feb 16., 18:09
Go to the top of the page
 
+Quote Post
hasznos
post 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!
Go to the top of the page
 
+Quote Post
BlackY
post 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
Go to the top of the page
 
+Quote Post
Monique
post 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
Go to the top of the page
 
+Quote Post
BlackY
post 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)? gondolkodik.gif

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 smile.gif

Szerk: elütés (új billentyűzet smile.gif )

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
Go to the top of the page
 
+Quote Post
Monique
post 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
Go to the top of the page
 
+Quote Post
BlackY
post 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
Go to the top of the page
 
+Quote Post
Monique
post 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
Go to the top of the page
 
+Quote Post
BlackY
post 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
Go to the top of the page
 
+Quote Post
Monique
post 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
Go to the top of the page
 
+Quote Post
penzkeresoforum
post 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?
Go to the top of the page
 
+Quote Post

39 Pages V  « < 37 38 39
Reply to this topicStart new topic

 



Lo-Fi Version Time is now: 2012. May 22. - 19:55

Harder - webdesigner blog | keresőoptimalizálás | honlapkészítés