- Android alkalmazások - szoftver kibeszélő topik
- Mobil flották
- Google Pixel topik
- Külföldi SIM-ek itthon
- Hónap végén érkezik a Xiaomi Band 10, ára is van
- Motorola Razr 50 Ultra - ajtó, ablak
- Xiaomi Mi 11 Ultra - Circus Maximus
- Apple iPhone 16 Pro - rutinvizsga
- Profi EKG-s óra lett a Watch Fitből
- Honor 400 - és mégis mozog a kép
Új hozzászólás Aktív témák
-
Brown ügynök
senior tag
Mikor érdemes egy weboldalt teljesen az alapoktól PHP-ban vagy ASP.NET-ben felépíteni?
Nekem nincs (még) nagy tapasztalatom de úgy gondolom, ez munkafüggő. Van ahol jobb ha alapoktól indulsz. Egy játéknak csinálsz weboldalt, oda jó lehet a Drupal is, míg - ahogy írtad is - egy mini közösségi oldal sokkal bonyolultabb ahhoz hogy CMS-sel "bíbelődj".
-
Lacces
őstag
Lehet, hogy nem ide kéne, de itt sok a tapasztalt webfejlesztő.
Azt nagyjából tudom, hogy mi az előnye egy CMS-nek, erről sokat olvastam. De mi a hátránya? Mikor érdemes egy weboldalt teljesen az alapoktól PHP-ban vagy ASP.NET-ben felépíteni? És mikor érdemes egy CMS-re hagyatkozni, mint mondjuk a Drupal.
Szeretnék egy játéknak csinálni weblapot, ez lehet CMS, mert gyorsabb összedobni állítólag. És akkor a weblap önmagát is képes "fenntartani".
Szeretnék egy másik weboldalt, amit magam akarok fejleszteni, ez egy mini közösségi oldal lenne, de ha úgy kívánja, akkor később fejleszteni is kell rajta, karbantartás. Így gondolom, érdemes az alapoktól, hogy lássam és tudjam, hogy mi micsoda merre.
Másik kérdésem: PHP-ról ASP.NET MVC-re átmenni mennyire nehéz? Én azt vettem észre, hogy a felépítése hasonló (főleg ha MVC modellt követi a PHP is), mintha azokat át lehetne egymásba ültetni könnyedén, erről tapasztalat, vélemény?
-
tkazmer
addikt
sziasztok,
fura dolognak vagyok mostanában tanúja, korábban készített honlapjaim közül többen halódásnak indultak. valami miatt az olyan oldalak, ahol 1-2-nél több kép is van, csak borzasztóan lassan töltenek be, vagy egyáltalán nem is. IIS7 alatt ez még annyiban kellemetlen, hogy ilyenkor egy process elveszi a CPU teljesítmény 50%-át, ha két ablakból próbálom betölteni, akkor meg a másik 50%-ot is. a process viszont nem az adott application pool-hoz tartozik. apache alatt (localhoston olyat használok) ilyen nincs, de ugyanúgy nem működik.
ja, és az fckeditor sem hajlandó betölteni ezeknél a siteoknál. érdekesség, hogy lényegében ugyanazt a rendszert használom több honlapnál is, de csak néhánynál van hiba, ráadásul nem is időben egymást követőknél.
mi okozhat ilyet? van valami tippetek, hogy hol keressem a hibát? -
Coyot
őstag
válasz
Brown ügynök #6995 üzenetére
<base href="http://localhost/projekt" />
-
Brown ügynök
senior tag
válasz
Brown ügynök #6979 üzenetére
Még mindig nem az igazi. Chrome-ban a <base>-t veszi alapul és úgy jelentíti meg a css-t js-t, IE-ben és FF-ben viszont nem.
layout.php
<base href="/projekt/" />
<link type="text/css" href="css/css.css" rel="stylesheet" media="screen"/>
layout.php-ba illesztett fájlban: (/projekt/edit)
<script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>Nos, a Chrome a 127.0.0.1/projekt/ útvonalhoz igazítja a css-t, js-t, és mindkettő látszik az oldal forrásában is. Az FF-nél már csak a css, az IE-ben meg egyik sem. Mindkettő a 127.0.0.1/projekt/edit/-hez igazítja, tehát ahhoz a fájlhoz amit a layout-ba illesztünk. Valaki segítene kivezetni ebből a mocsárból?
-
PazsitZ
addikt
válasz
Roliiii #6990 üzenetére
A baj az, hogy php-ból akarod kirakni. Azaz nem baj csak megfelelően kell csinálni.
Tehát ha a stringet-script bannerkódot " "-között adod meg akkor a script-ben levő összes " karaktert esapelned kell: \".
Ha a ' ' karakterrel adod meg a script stringet, akkor a benne előforduló ' karaktert kell escapelned \'. Ez utóbbi talán jobb megoldás, mivel ebből van kevesebb a scriptben.Az oldalad pedig azért nem tölt be, mivel az escapelés hiányában a script kód fele php kódként a másik fele stringként van értelmezve, és egyértelműen syntax error-t okoz, amelynek eredménye egy szép üres fehér oldal.
A megfelelő szerkesztő ezt egyébként jelzi is. -
cucka
addikt
válasz
Roliiii #6988 üzenetére
Az echo "asd"-ben az asd-t cseréld ki arra a szövegre/html kódra, amit ki akarsz írni.
Arra figyelj oda, hogy ha " karakterekkel adod meg a stringet, akkor a szövegben a " karaktereket le kell zárnod, vagyis " cserélendő \" -re. (Ha sima idézőjellel adod meg a stringet, akkor meg azokat kell ugyanígy lezárni) -
Roliiii
aktív tag
Sziasztok.
Lehet könnyű kérdéssel fogok most létek állni, de nekem beletört a bicskám.
Adott az oldalam, az iPod Hungary, és a rajta lévő reklámot szeretném úgy megcsinálni, hogy csak az 1. és 2. cikk között jelenjen meg.
Amit eddig sikerült elérnem, hogy mindig növelek egy valózót, mikor egy cikket kirak és a egy if ággal nézem mikor jön a 2., eddig jó is, ki echo zok egy asd ot oda szépen megis teszi, de igazából ide egy ilyesmit kéne beszurni, de sehogy sem tudom:
<script src="************" type="text/javascript"></script><script type="text/javascript">var x = function () {var r=10*****+Math.floor(Ma********om()*99999);var b='<div id="v4u_c_'+r+'"></div>';document.write(b);vi****u.init(500,375,"*******aR","g7******K",r);};x();</script>Csillagokat direkt tettem bele, mert ilyen kódot nem hiszem, hogy szabad lenne ide kitennem.
ilyesmit gányoltam eddig, meg az elején felvettem az a változót.
<?php
$a=$a+1;
if($a==2)
{
echo "asd";
};?>
Segítségeteket előre is köszönöm.
-
Peter Kiss
őstag
Szerintem ezt nehéz überelni:
<?php require(dirname(dirname(__FILE__)) . DS . 'Shared' . DS . 'defaultmaster.html'); ?>
<?php self::startblock('head') ?>
<script src="/js/libs/modernizr-2.0.6.js"></script>
<?php self::endblock() ?>
<?php self::startblock('teszt') ?>
Tudja, az a fura, hogy valamire emlékszik az ember, valamire nem.
<?php self::endblock() ?>
Mondjuk még megbukhat.---
'csába, az URL-eket elírtam, úgy lenne, ahogyan írtad is a javaslatodban.
---
Ezt az Area-átszervezést ki fogom próbálni, köszi!
---
Az autoloader ennyit csinál nálam is, ami elég is lenne, csak a belekevert area dolog miatt még nem az igazi, de rajta vagyok.
---
A folyamat nálam is majdnem ilyen.
Azért örülök, hogy nem vagyok annyira elveszve, talán, remélem.
-
cucka
addikt
válasz
Peter Kiss #6985 üzenetére
Utána néztem az 'inherit' módú View-gyártásnak, ez sokkal jobban tetszik, mert könnyebben és szebben valósítható meg
Ebben nem értek egyet veledjelentik az alját, ezeket még nem használtam, van-e valami hasznos megjegyzés hozzájuk?
Amit a php manuálban ír, az elég./felhasznalok/felhasznalo/bombadil_toma/edit
Ilyen url-ek helyett a hasonló struktúrát javaslom:
/felhasznalok/felhasznalo/edit/123
..ahol a 123 a felhasználó id-ja. Ennek oka, hogy framework szinten elég nagy szívás biztosítani, hogy a felhasználó neve az url-ben egyedi legyen, az azonosító viszont mindig az.M "mappa" nem lenne lényeges az area-ba, hiszen a Model az egész rendszerben megtalálható, de esetleg lehet valamilyen örökléses csavart betenni, ha arra van szükség.
Sem M, sem V mappára nincs igazán szükség. C és V mappákban lehet minden area-nak külön mappája, azon belül pedig a kontroller osztályok és template-ek. Szerintem így a legegyszerűbb.Autoload-ra tudsz mutatni valami hardcore-abb példát?
Perpill nincsenek nálam a fileok. Olyat tudok, amiben két mappában keres (framework szint és application szint) és cache-eli az eredményeket. Nem tudom, ez elég hardcore-e?Nálam a Controller azért kapja meg az action nevét a konstruktorban, mert már ekkor létrejön egy View objektum, aminek tudnia kell, mit renderel. Ez azért szükséges megint, hogy minél több mindent tudjon megvalósítani magától a rendszer (action végén csak return $this->_view van).
A view objektumot elég akkor példányosítani, amikor használod. Itt egy folyamatábra, hogy kb. mi történik:1. alkalmazás inicializálás, konfiguráció
2. a routing kitalálja az url-ből, hogy milyen kontrollert kell meghívni
3. a routing meghívja a kontroller ősosztály runAction függvényét
4. a runAction meghívja a kontroller megfelelő action függvényét a megfelelő paraméterekkel
5. az action megcsinálja a dolgát, majd meghívja a kontroller ős render függvényét
6. a kontroller ős render függvénye létrehozza a view objektumot, megfelelő paraméterekkel
7. a kontroller ős meghívja a view objektum render függvényét
8. a render függvény eredménye kikerül az stdout-ra, megjelenik a weboldal, öröm, boldogság -
Peter Kiss
őstag
Utána néztem az 'inherit' módú View-gyártásnak, ez sokkal jobban tetszik, mert könnyebben és szebben valósítható meg (plusz hasonlít az egész az ASP.NET MVC 2-höz). Azt hiszem, ez jelenti a jobb megoldást, találtam is egy kis mutatványt, ami megvalósítja ezt mindenféle trükkölés nélkül tisztán PHP-ban (nem kell semmilyen template language-t használni), átírtam OO-ra is már, ki is próbáltam, működik. Az 'Output Control Function'-ök jelentik az alját, ezeket még nem használtam, van-e valami hasznos megjegyzés hozzájuk?
Area == logikai egység, példák:
/felhasznalok/felhasznalo/bombadil_toma/edit
/felhasznalok/csoport /tlotr /editItt a 'felhasznalok' képvisel egy area-t. Ehhez hasonlóan lehet admin area-t hegeszteni (elképzeléseim szerint), pl. a CakePHP (ha jól emlékszem) NEM használ ilyet, hanem metódus prefixumokkal operál, ami kicsit nevetségesen fest számomra, de az ötlet persze nem rossz.
M "mappa" nem lenne lényeges az area-ba, hiszen a Model az egész rendszerben megtalálható, de esetleg lehet valamilyen örökléses csavart betenni, ha arra van szükség.Autoload-ra tudsz mutatni valami hardcore-abb példát? Mert van egy rakás faék egyszerű tutorial a neten, de mikor valami komolyabb kellene, akkor megáll a tudomány. Jó, mondjuk nagy csavar nem lehet benne, nálam is csak az a gond, hogy az elemek nem tudják magukról, hogy area-ban vannak (ha).
Saját frameworkot szeretnék, semmi durvát, csak legyen jól használható.
Nálam a Controller azért kapja meg az action nevét a konstruktorban, mert már ekkor létrejön egy View objektum, aminek tudnia kell, mit renderel. Ez azért szükséges megint, hogy minél több mindent tudjon megvalósítani magától a rendszer (action végén csak return $this->_view van). Ez a viselkedés egyébként "felülírható", a Controller-nek van egy View-gyártó metódusa.
-
cucka
addikt
válasz
Peter Kiss #6983 üzenetére
Hogyan oldjam meg, hogy a top level HTML elemeket tartalmazó View darabok, és esetleg pl. a menüt tartalmazó részeket berántsa magának?
Feltételezem, hogy olyan template nyelvet használsz, ami include-al működik (kívülről befele), nem pedig inherit-el (belülről kifele). Na ez esetben úgy oldod meg, hogy van egy alap template-ed, mondjuk legyen page, ami valahogy hasonlóan néz ki php-t használva template nyelvnek:
<html><head>/ .. /</head>
<body>
<div id="menu"><?php include 'menu.tpl'; ?></div>
<div id="content"><?php include $context['page_body']; ?></div>
/ ... /
</body></html>
Ez az oldal váza, amiből lehet többféle is, a lényeg, hogy a template elkészítése kívülről befele történik. Ezt a vázat fogja a view megjeleníteni. Azt, hogy a kontent részbe mit pakolunk, az attól függ, hogy a controller mit állított be a $context['page_body'] változóban. A kontrollered ez esetben valahogy így fog kinézni:
function view(/../){
/../
$context['page_body']='edit_form.tpl';
return render_template('page_base_template.tpl', $context);
}
Az action beállítja a page_body értékét (vagyis hogy melyik file-t kell behúzni a tartalmi részbe), majd lerendereli az alap template-et a megfelelő paraméterekkel. A $context változó szerepe, hogy ebben tároljuk azokat a paramétereket/változóértékeket, amelyeket a template-ek felhasználnak a html legyártásához.
Természetesen ez csak egy rövid példa, remélhetőleg átjön a lényeg.
Arra kellene valami jó megoldás, hogy miként töltse be az adott részeket a cucc.
Normális autoload-ot kell írni. Az számomra rejtély, hogy az Areas mappád mit jelent és miért van benne külön M,V,C mappa, amikor ezek a gyökérben is ott vannak. Saját MVC framework-öt fejlesztesz, vagy kész megoldást szeretnél használni?
most az aktuális Controller megkapja a konstruktorában a végrehajtandó action-t (de nem a konstruktor hívja meg!).
Nem szükséges megkapnia. Egy controller általában nem más, mint action-ök halmaza, minden action egy-egy függvény a controller osztályon belül. Az, hogy melyiket kell meghívni, az a routing során dől el, ami tulajdonképpen az a rész, ahova bemegy az url és kijön a controller/action/paraméterek hármas. A framework feladata, hogy ezt megcsinálja, majd az előbb említett hármas alapján meghívja a megfelelő kontroller megfelelő action-jét a megfelelő paraméterekkel. (Illetve az is a feladata, hogy észrevegye, ha nemlétező controllert vagy actiont szeretnél meghívni, vagy esetleg a paraméterek nem megfelelőek - az elsőt az autoload/osztálykereső fogja kiszűrni, a másodikat a controller ősosztályban ügyesen megírt __call() függvény, a nem megfelelő paramétereket pedig maga az action) -
Peter Kiss
őstag
Kicsit pontosítok a problémámon:
Van egy action-öm, legyen a neve 'edit';
Megvan a hozzá tartozó View, amiben egy HTML form van, de semmi többHogyan oldjam meg, hogy a top level HTML elemeket tartalmazó View darabok, és esetleg pl. a menüt tartalmazó részeket berántsa magának?
Készítsek egy olyan alapállományt, ami mondjuk elkülönít 9 részt a komplett oldalon (minden View alapja ez lenne), és mindegyikbe tegyek adatott, ami:
kifejezetten az adott action-nek megfelelő (ez lenne az edit form),
vagy include-dal húzzam be a közös elemeket (top level HTML elemek, menü)
vagy esetleg üresen marad---
Még egy gond
Az MVC mappastruktúrám ilyen:
/Application
/Areas
/csillamponi
/Controllers
/Models
/Views
/Controllers
/Models
/ViewsArra kellene valami jó megoldás, hogy miként töltse be az adott részeket a cucc. Ugyan van automata osztálybehúzóm, de az elég bénán működik, akkor lenne csak normálisan működőképes, ha nem lenne az 'Areas' rész. Mivel van, valahogyan ki kellene erőszakolnom, hogy ha egy Area-ba lép valaki, akkor lehetőleg az Area-hoz tartozó dolgokat keresse előbb. Ezzel, ami személyes problémám, hogy nem tudom, minek mit szokás átadni, nálam pl. most az aktuális Controller megkapja a konstruktorában a végrehajtandó action-t (de nem a konstruktor hívja meg!). A paraméterátadást azért szeretném minimálisra csökkenteni, hogy a konkrét elemek létrehozásakor ne kelljen sokat szöszölni ezekkel (pl. megfelelő parent::__construct hívás).
Köszi!
-
cucka
addikt
válasz
Peter Kiss #6981 üzenetére
MVC modellben a menüt és minden más, oldalon megjelenő információt a C szedi össze, majd átadja a V-nek, ami a kapott adatstruktúrák és a sablonok alapján legyártja a html kódot.
Kicsit túl általános a kérdésed, de valahogy így zajlik a dolog:
- C tudja, hogy milyen oldalt nézünk és hogy ehhez az oldalhoz melyik view-t kell majd meghívni, továbbá azt is tudja, hogy ennek a view-nak milyen bemeneti adatokra van szüksége
- C összeszedi a szükséges bemeneti adatokat és átalakítja olyan formába, amit a V meg tud jeleniteni - például menünél átatja egy tömbben a menüpontok listáját és azt, hogy éppen melyik van kiválasztva.
- V kiírja a HTML-t a C által küldött adatok alapján. -
Peter Kiss
őstag
Sziasztok!
MVC-vel küzdök, mint disznó a jégen, most épp azt nem tudom, hogyan szokás a menüket építeni benne. MVC-n kívül kellene felépíteni a menüt, aztán, mikor töltődik a View, előhúzni a farzsebből? Most úgy működök, hogy van egy Application osztályom, ami létrehozza a Controller-t [minden lefut, return view], majd meghívja a View Render metódusát. Ezzel kapcsolatban azt sem értem, hogy hogyan oldjam meg az oldal konzisztens szerkezetét (pl. adott helyre adott jellegű menü kerüljön).
ASP.NET MVC nagyon jól működik ilyen szempontból, de most saját PHP-sat akarok.
Köszi!
-
Xirtam
veterán
Sziasztok,
Abban kérném a segítségeteket, hogy az oldalam bal oldalán lévő kategóriáknál, ha egy FŐ kategóriára kattint a felhasználó. Akkor ne az abban lévő alkategóriákat mutassa, hanem az összes terméket. Ezt milyen paranccsal tudnám megcsinálni?
Ha a fő kategóriára rákattintok, akkor az jelenik meg, hogy "nincsenek termékek", alatta meg az alkategóriák megjelennek.
Szerintem felesleges az alkategóriákat megjeleníteni, az úgy is ki van bontva a bal oldali menü kategóriáknál, helyette inkább az összes terméket meg kellene jeleníteni ami a kategóriában van. Így lehetőség lenne pl. márkától függetlenül, akár ár szerint rendezve keresgélni.Így értem!
-
Brown ügynök
senior tag
válasz
DeltaPower #6978 üzenetére
Köszi, ez kellett nekem.
-
DeltaPower
addikt
válasz
Brown ügynök #6977 üzenetére
headerbe:
<base url="tedomained.com" />
elvileg megoldja -
Brown ügynök
senior tag
válasz
DeltaPower #6976 üzenetére
Mint egy falat kenyér.
A másik kérdés még fenn áll.
-
DeltaPower
addikt
válasz
Brown ügynök #6975 üzenetére
rel="stylesheet" nem hiányzik véletlen?
-
Brown ügynök
senior tag
2 kérdésem lenne. Az egyik hogy egy vakbarát honlapnak kellett egy új css-t csinálnom. Ha rákattint a vakbarát linkre, a $_SESSION['blind'] = true; lesz. A stíluslapváltást a következő kóddal oldottam meg:
if ( isset($_SESSION['blind']) ) {
echo '<link type="text/css" href="css/css_blind.css" media="screen" /> ';
}
else {
echo '<link href="css/css.css" type="text/css" media="screen"/>';
}Ez Chrome-ban működik, FF-ben, IE-ben nem. MI lehet a gond? Van erre valami szebb megoldás?
A másik kérdésem pedig: mod_rewrite folytán szép url-t használok. Ha egy cim a rewriteBase-től számítva ( /base/ ) még egy / jelet tartalmaz, akkor a képek elérési útvonalát is meg kell toldjam ../-el. Nem lehet valami "abszolút" útvonalat megadni, hogy ne kelljen mindig megtoldani egy ../ az elérési útvonalat?
-
PazsitZ
addikt
Ahogy előttem is írták, igen a tömbnek van indexmutatója.
A mutató "manipulálható", a reset, prev, current, next, end függvényekkel többek között. Vannak esetek amikor hasznosak, de sokkal átláthatóbb és könnyebben kezelhető a foreach bejárás, esetleg sima for, ha úgy adódik.Gyorsaságot, lehetne épp méregetni, elég nagy mintánál, több mérési eredménnyel, lehet ki tudnál hozni valakit győztesnek, de nem az egyik vagy másik miatt lesz lassú a kódod.
Egyébként itt a foreach jön ki győztesnek: [link] -
Lacces
őstag
Sziasztok!
each() + tömbhöz kéne magyarázat.
Adott a következő kód:
reset($array)
while ( list($termek, $ar) = each($array))És a reset() és each() és tömb kapcsolatához kellene magyarázat.
Azt írják, hogy azért kell a reset(), mert a tömb az each ha egyszer végig ment a tömbön, és ha újra meghívom akkor a reset() nélkül nem megy végig a tömbön.Kérdésem, miért nem megy végig a tömbön mégegyszer? (hogy kell ezt elképzelni)
- egyik, azért mert az each() megjegyzi a $array tömböt, és ha egyszer lefutatta, akkor nem hajlandó többé.
- másik, mert a $array-nek van valami indexmutatója, amit az each() a tömbvégéhez visz, és ezt a mutatót kell ismét az elejére vinni a reset()-el... Ezt így magamtól találtam ki., és a php.net manulon és ilyet olvasok ki az angol szövegből.Ezek szerint ha a második feltevésem igaz, akkor ez a tömb pointer(mutató) manipulálható?
Meg ha már ennél a témánál tartok:
a reset() az each előtt vagy utána érdemes meghívni?
Másik kérdés:
a foreach vagy a fentebb említett while ciklusos megoldás a gyorsabb?
pl.: foreach( $array as $kulcs => $ertek)
echo... -
ArchElf
addikt
register_globals beállítás be van kapcsolva a szerveren - ha kikapcsolható gyorsan ki kell lőni, ha nem, akkor nem szabad a session-ben tárolt (meg get query /post form-ban küldött) változókkal azonos változóneveket használni.
AE
-
Csak érdekességképp írom be ide, akinek van ötlete, az világosítson fel, mert számomra ez érthetetlen:
Adott: $_SESSION['raktar'], és $raktar nevű változók.
$raktar = függyvény átad neki egy karaktertömböt, működik is rendesen. Csakhogy valamilyen csoda folytán ez a tömb felülírja a $_SESSION['raktar'] tartalmát is. Átnevezve a $raktar változót a probléma megoldódik.
Ötlet?
Persze nyilván a változó nevét megfelelteti a $_SESSION['raktar'] asszociatív tömbbel, de ennek mi értelme?
-
Lacces
őstag
Sziasztok!
Hogyan lehet rábírni az eclipse-t, hogy PHP projektekkel tudjak dolgozni?
1-ik variáció ami a phpeclipse oldalán van wiki szekcióban leírva: url linket adjak meg. Az nem működik.... nem elérhető... amit ott megadtak az hibás.
2-ik variáció az install new plugin. Na itt 3 plugint telepítettem, a php kivételével mindegyiket látom ha megnyitom a projekteket. A php projektet sehol sem látom.
Megnéztem az Eclipse szerint fent van a php (php sdk).Most akkor hogyan lehet feltenni? Már 1 órája próbálok rájönni. Nekem rejtély.. Esetleg ha tudtok valami tuti jó leírás ami bevállik, annak örülnék!
Indigo verziót telepítettem fel.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6948 üzenetére
A user-agentnek és a sessionid-nek is egyezni kéne hozzá, ez esélytelen
-
Brown ügynök
senior tag
@ArchElf : Kösz, így már világos.
@Lacces:Nem muszáj minden fv.-t
megtanulnialkalmazni.Idővel rá fogsz jönni melyikre van szükséged és melyikre nincs. Amíg nincs munkád készíts magadtól egyéb weboldalakat is pl. blogot. Közben nézd meg a fórumokon hogy oldottak meg mások egy-egy problémát. Nézegesd a PHP.net-t is.
Mindent egyszerre nem fogsz tudni megtanulni, csak szépen sorjában.
-
Lacces
őstag
Sziasztok!
Ez egy érdekes kérdés tőlem... Hogyan érdemes a PHP-t megtanulni?
Én arra gondoltam, hogy ahogyan haladok a könyvben, úgy a függvényeket és hozzá a leírást egy docx-be kiírom magamnak, mint egy jegyzetet, és abból már html-tként felküldhetem weblapra, és ott bármikor elérehetem vagy kinyomtatom magamnak és akkor úgy átnézhetem mindig.
Plusz közben egy webáruházat építenék fel, hogy gyakoroljam a php kódolást...
De amikor olvasom a könyvben csak meglepődöm, hogy váó mennyi függvény van. És hogy ezeket hogyan fogom tudni megtanulni, na az nálam kétséges...
Szóval tanácsokat várnék, hogyan érdemes megtanulni a PHP-t, a gyakorlati programozás mellett (webáruház) mert ugye sok függvényt ott nem használunk fel.
-
ArchElf
addikt
válasz
Brown ügynök #6951 üzenetére
Csak annyit takar a sózás, hogy minden jelszóhoz egy változó tartalmú (de jól definiált) részt hozzá kell csapni hashelés előtt, hogy az azonos jelszavú felhasználóknál ne egyezzen a jelszóhash. Ez a só leggyakrabban az alábbiak közül tevődik ki:
- felhasználónév
- forrás IP
- belépés/regisztráció timestamp-je
- kézfogáson alapuló kommunikáciiónál egy véletlenszerűen választott
karaktersorozat
- adatbázisban a felhasználóhoz tárolt véletlenszerű karaktersorozatSózás (wiki)
AE
-
Brown ügynök
senior tag
válasz
DeltaPower #6950 üzenetére
Egyelőre igen.
Erről a sózás dologról tudnál bővebb információt adni / linkelni. Sokszor olvastam róla, de nem tudom mit is takar pontosan.
-
DeltaPower
addikt
szerintem ennél jobb megoldás, ha erősen hashelt-sózott jelszót mentesz sessionba és minden lapkérésnél ellenőrzöd a jogosultságot.
adatbázishoz minden querynél új kapcsolatot nyitsz és a futása után lezárod? -
Lacces
őstag
Sziasztok!
Tudtok olyan php-s dolgot, tutorialt, ami lehetővé teszi, hogy egy excel fájl tartalmát a php kigenerál html-be?
Termék neve, ára, stb... egy html-es táblázatba kigenerálja.
Asp.net-es ecommercenél láttam ilyet és szépen feltölti.
-
Brown ügynök
senior tag
válasz
Tele von Zsinór #6947 üzenetére
A jelszóra azért van szükség mert azzal kapcsolódik az adatbázishoz minden adatbázis műveletkor.
Az ip-ről és a user-agent-ről is olvastam, de ha a user-agent kevesebb ütközéssel jár akkor azt használom.
Viszont a user-agent megegyezhet egy nem jogosult felhasználóéval aki így könnyen szert tehet adatokra / elhelyezhet rosszindulatú kódokat az oldalon, nem?
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6946 üzenetére
Felesleges ennyi mindent vizsgálni, és a jelszót miért mented?
Én bejelentkezéskor beállítom az is_authenticated kulcsot, később ezt vizsgálom, kijelentkezéskor pedig unsetelem.
Az ip-t vizsgálva problémákba ütközhetsz, amikor több user van egy ip mögött, és változik az ip requestről requestre (koli, céges környezet, ilyesmik). Vizsgáld inkább a user-agent értéket az első kéréskor kapotthoz, ennek nem kéne változni egy session alatt.
-
Brown ügynök
senior tag
Nemrég kezdtem session-nel foglalkozni ezért megkérdezem, hogy mikre kellene még odafigyelni biztonság és hitelesítés szempontjából.
Minden "védett" tartalomnál megvizsgálom, hogy a felhasználó be van-e jelentkezve:
if (isset ($_SESSION['user']) && isset($_SESSION['pswd']) && $_SESSION['online'] && ( $_SERVER['REMOTE_ADDR'] === $_SESSION['ip']) )
Ezek után megvizsgálom, hogy lejárt-e már a munkamenet. Ha lejárt, akkor kiléptetem.
Kellene még ezenkívül mást is figyelni?
-
Speeedfire
félisten
Valószínű prefork lehet, mert valóban nem fogadta el. Ellenben abba is hagytam a nagy erőforrás miatt az apache projektet. Lecseréltem lighttpd-re, ha a youtube-nak megfelelt akkor nekem is megfelel.
Fele annyit memóriát eszik jelenleg, a cpu meg meg sem mozdul 1 szál mellett.
Csak itthoni használatra kell, a router admin felületével szenvedek, na meg akarok 1-2 statisztiai oldalt készíteni.
-
modder
aktív tag
válasz
Speeedfire #6942 üzenetére
Helló,
Nem mindegy, hogy milyen fordítású apache van fönt. Amennyit én tudok, a prefork verzió childprocesseket hoz létre, amíg a worker verzió szálakat.
Olvasd el ezt: http://httpd.apache.org/docs/2.0/mpm.html
Ha prefork verzió van fönt, a MaxSpareThreads nem játszik.Itt van a prefork által elfogadott paraméterek: http://httpd.apache.org/docs/2.0/mod/prefork.html
Nem tudom milyen megfontolásból tetted a routerre, ha otthon baszkódsz vele és kíváncsiságból, akkor nem gond, de azért vállalati környezetben ne csinálj ilyet
Még eljátszogathatsz az apache process nice érékével is, hogy ha hálózati forgalom szempontjából a router keményen igénybe van véve, az oldallekérdezések ne fogják vissza, de az is lehet, hogy erre nincsen szükség.
Nem vagyok egy nagy apache guru, de megpróbálkozhatsz olyannal is, hogy ne töltsön be modulokat, amik nem kellenek, pl. ssl.
-
Brown ügynök
senior tag
Ide is berakom hátha valaki tudja a megoldást: karakterkódolási probléma
-
Speeedfire
félisten
Kicsit offolok, elég sok guru jár erre. Így itt kérdezem meg.
Feltettem egy LAMP szervert a routerre és kicsit vissza akarom fogni, mind a 3 komponenst. 400mhz és 32mb ram elég hamar kevés lehet. Még a lighthttpd is játszik, de egyelőre maradnék az apache mellett.
Amik elsőre eszembe jutottak, bufferek, cachek visszafogása.
Alap esetben elég sok szál fut az apache-ból és sokat is eszik.
A max szálakra gondoltam, de valami modult keres...MaxSpareThreads 2
Ellenben a MaxSpareSevers-t elfogadja, csak nem veszi tudomásul. Beállítom neki, hogy 1 és mégis fut legalább 5 példányban.
Várom a további ötleteket. Maximum kliensek száma, keepalive meg a többiek.
-
Alukard
senior tag
válasz
Sk8erPeter #6934 üzenetére
Köszönöm a részletes elemzést.
Az biztos, hogy egyes elemeit alkalmazni is fogom az általad átadott és közszemlére bocsájtott tudásnak, de töredelmesen bevallom, hogy az OOP sosem volt az erősségem, persze belátom, hogy az a következő lépés, de valahogy a gondolkodásmódot sosem sikerült -még- elsajátítanom.A hibaüzenetek esete, meg... hát igen, most mit mondjak... elsősorban házon belüli a történet és nem ügyfél részére készül, és a szolgáltató szerencsére eléggé megbízható ezen a téren... hacsak az SQL lekérdezést nem rontom el nem nagyon szokott hiba lenni.
A mysql_real_escape_string -et, többek közt alkalmazom $_GET és $_POST változókra, tehát ami a felhasználó részéről érkezhet az átmegy némi feldolgozáson. Cookie-t nem használók, és a rendszer nem is keresi a gépen (elméletileg), és $_GET esetén nem hagyok elvarratlan szálakat, azokat is ellenőrzöm, hogy mit próbálnak megetetni a rendszerrel és amint valami ami nem illik a képbe kiürít minden olyan változót ami felhasználói adatot tartalmazhat és nem engedi vissza.
Persze csak gányolok és csak hiszem azt, hogy ez a tuti megoldás, de csak ez jutott az eszembe mint lehetőség, mert a legtöbb logout script amit találtam itt kezdődött és ért véget:
session_destroy();
és kicsit soványnak éreztem őket.A formokat is igyekszem védeni a mező tartalom szűrésen/ellenőrzésen felül, bár ez nem a legtutibb védelem, $_SESSION-ben random azonosító, form hidden értékként ugyan az és a 2 egyezésének figyelése....
Igazából ami a komoly problémám az az, hogy az adatbázisban tároltam le adatokat, mondjuk ügyfél adatokat azokat hogy tudom védeni... mert arra is gondoltam, hogy egyszerűen összekeverem a betüket valamilyen rendszer szerint. Olyan elemek ellen szeretném védeni akik -feltételezhetően- nem férnek hozzá a php kódhoz, hanem csak az adatbázishoz...
-
cucka
addikt
válasz
Brown ügynök #6939 üzenetére
Az orm azt tudja nyújtani, hogy elfedi előled az sql-t és annak összes nyűgjét.
-
Brown ügynök
senior tag
válasz
Sk8erPeter #6935 üzenetére
Úgy értettem, minden olyan oldal elején ahol szükség lesz a session-ben tárolt adatokra.
@cucka: Ajánlhatom a doctrine-!. Egy keretrendszer kapcsán kezdtem a tanulásába. Nekem bonyolult volt,( a mapping miatt nem működött egy lekérdezés ), igazából nem is értem mi az a plusz amit egy orm nyújtani tud.
-
Siriusb
veterán
válasz
Sk8erPeter #6936 üzenetére
Ezzel találkoztál? http://drupal.org/project/admin_menu
6-osban volt amikor használtam.Amikor megjelent a 7-es akkor kipróbáltam és sürgősen félretettem, most néztem rá megint a 7.4-re, ha már emlegetted. Hááááát, a modulok fejlesztésése tényleg lassan megy.
-
cucka
addikt
válasz
Sk8erPeter #6934 üzenetére
Szerintem adatbázis-kapcsolati objektumok létrehozásához érdemes lehet a Singleton-mintát alkalmazni.
Szerintem annyira nem érdemes. Alapvetően PHP-s webfejlesztés során túl sokat nem nyersz a tervezési mintákkal. (Elsősorban a php gyenge típusossága miatt, másodsorban a webfejlesztés sajátosságai miatt). Persze, lehet használni, semmi baj sincs vele.Én személy szerint a PDO-t használom, és ajánlom is a használatát.
Jelenleg kezdek egy hobbi projektet és nézegettem ezt is mint lehetséges eszközt, de hát a tudása az nagyon erősen konvergál a nullához egy komoly orm-hez képest. -
Sk8erPeter
nagyúr
válasz
Siriusb #6924 üzenetére
Szerintem az "ágyúval verébre" inkább a Joomla esetében igaz.
Nekem a Drupal 7-es verziójának AJAX-alapú admin-felülete nagyon tetszik, könnyen kezelhetőnek és áttekinthetőnek találom, a 6-os verzió admin-felülete viszont számomra kifejezetten kényelmetlennek és kicsit káoszosnak tűnik. Persze meg lehet találni benne a dolgokat, meg nyilván vannak template-ek akár az admin-felület testreszabására is, de az kicsit jobb, hogy a 7-esben ez már eleve adott.
Csak ugye az a gáz, hogy a 7-eshez még viszonylag "kevés" template és modul készült el, inkább még mindig csak a 6-oshoz találhatók ilyenek, pl. webshopmodulokból is inkább legfeljebb beta-verziókat találtam, vagy egyáltalán nem (mint asszem az Übercarthoz sincs kész a 7-es). Tudtommal elég sok minden változott a 7-es változatban, így még lehet, hogy várat is magára sok modul elkészítése.
Na, szóval igazából amire ki akartam lyukadni, hogy nekem végül is jó lenne a 6-os, de annak az admin-felülete egy átlagos felhasználó szemszögéből (ne az itteni fórum látogatóiból indulj ki, akik vélhetően nem egységsugarú júzerek) nem tűnik olyan kényelmesnek (vagy csak nem találtam hozzá megfelelő skint, ha van ilyen, szívesen fogadom), a Joomláé talán valamennyivel kézenfekvőbb meg kicsit szebb - kód meg pár egyéb dolog szempontjából viszont a Drupal a jobb választás; Joomla talán a kicsit több elkészített választható template meg modul miatt. Persze valóban, ízlések és pofonok különböznek.
Szóval tényleg nincs igazság! -
Sk8erPeter
nagyúr
válasz
Brown ügynök #6933 üzenetére
Hogy érted azt, hogy "minden művelet előtt"?
Csak a script elejére kell betenni ezt a kódot, a lefutásáig akkor már használhatók a session elemei. -
Sk8erPeter
nagyúr
válasz
Alukard #6929 üzenetére
Szerintem adatbázis-kapcsolati objektumok létrehozásához érdemes lehet a Singleton-mintát alkalmazni. Többnyire az embernek dinamikus weblapok készítésekor egyetlen adatbázis-kapcsolati objektumra van szüksége, persze lehetnek kivételek, de általában előbbi a jellemző.
A kódodban a protected láthatóságú tagváltozóknak semmi szerepe nincs, mivel nem rendeled hozzájuk az értékeket (nincs ilyen sor: $this->sql_host = "localhost"; stb.), hanem csupán lokális érvényességű változóid vannak (pl. $sql_host), így azoknak nem sok értelme van. Mivel tulajdonképpen úgyis csak egyetlen helyen (connect() függvény) csatlakozol az adatbázishoz, nem biztos, hogy érdemes egyáltalán eltárolni ezeket az értékeket az objektumon és leszármazottain belül máshol is elérhető tagváltozókba.
A "var" kulcsszó használata elavult, és igazából értelmetlen is jelen esetben, az nyugodtan lehetne protected (vagy private, de akkor a leszármazottak nem látják).
Az előbbieken túl a $query-ket sehol nem ellenőrzöd, nem kerülöd el az esetleges SQL Injectiont vagy rosszindulatot nem feltételezve csupán esetleges hibákat azzal, hogy escape-eled az átadott stringet (mysql_real_escape_string).
Plusz ha már OOP, akkor már kivételeket is illendő lenne használni, ez a die() ill. ekvivalense, az exit() nagyon ronda megoldás, ahelyett, hogy a megfelelő helyeken kezelnéd az egyes hibákat, egyből leállítod a szkript futását.
Ezenkívül a hibaüzenetbe is muszáj belekötnöm: ez a "Ne zaklasd a rendszergazdát" elég furcsa egy hibaüzenet, inkább neked kéne elnézést kérned a júzertől, hogy para van az adatbázissal, nem még jól le is cseszni.Én személy szerint a PDO-t használom, és ajánlom is a használatát. Támogatja az adatkötést, plusz azt, hogy ne kelljen explicite mindenhol escape-elni a stringeket (elintézi magának), és még sok egyebet, ráadásul full objektumorientált, és szerintem áttekinthetővé teszi a kódot.
Feltettem pastebinre azt az osztályt, amit a Singleton-mintának megfelelően írtam, általában ezt az osztályt használom adatbázis-kapcsolat kiépítésére. A konstruktor és a copy konstruktor privát láthatóságú, így kívülről nem példányosítható tetszőleges számban az objektum.
Van egy külön konfigfájlom, ahol definiálom a saját konstansokat, többek közt az adatbázis-jelszót és -felhasználónevet, ezeket a konstansdefiníciókat most az elejére tettem, középen jön maga az osztály, az osztály kódja alatt pedig egy példa látható a használatára: [PDO Singleton DB class].
Hátha bárki hasznát veszi. -
cucka
addikt
válasz
Brown ügynök #6928 üzenetére
A kód alapján ennek működnie kéne.
Kapcsold be a hibák és warning-ok mutatását és próbáld kideríteni, hogy
- a user és pswd változókba bekerülnek-e az értékek?
- ha igen, mi történik onnan, hogy bekerültek az értékek addig, amíg használni szeretnéd őket (eltűntek az értékek) -
-
válasz
Brown ügynök #6928 üzenetére
Helló,
szerintem ez így kicsit káosz, ahogy van. Egyszerűbb lenne, ha a model osztálynak a user-t, és a password-t a sessionből olvasnád ki. Amennyiben mégis szükség van a controller osztályra, akkor azt példányosítani kellene a model osztályon belül, és az így létrejövő objektumot tudod felhasználni a model osztályban.
A controller class konstruktorában kiolvasod a sessionből a user-t, pw-t. Ezután a model osztályban létrehozol egy controller objektumot $tmp = new controller(), majd a connect függvényben tudod használni a a controller objektum $user, és $pswd változóit.
-
Alukard
senior tag
Én ezt használom, igaz mySQL adatbázishoz...
A kérdésem/kérésem az lenne, hogy hogy lehetne ezt jobbá tenni, vagy ez így -ha még szódával is, de - elmegy?
Működni működik
Csak érdekelne, hogy hozzáértők milyen kritikával illetik a gány munkám
-
Brown ügynök
senior tag
válasz
Brown ügynök #6925 üzenetére
Akkor fussunk neki még egyszer:
class controller {
static $user; // $_SESSION['user']-t tároljuk
static $pswd; // $_SESSION['pswd']-t tároljuk
}
class model {
function connect() {
// Ezekkel az adatokkal kapcsolódunk az adatbázishoz
controller::$user;
controller::$pswd;
...
}
function select() {
$this->connect();
//lekérdezés
...
}
}A bejelentkezés abból áll, hogy indítunk egy munkamenetet, a $_SESSION értékeket eltároljuk a static $user, $pswd változókba, majd lefut a connect() fv. Ha a select() fv.-t szeretném futtatni, akkor meghívódik a connect() fv. ami venné a controller::$user, $pswd változók értékeit és lefutna egy lekérdezés. De ilyenkor a connect() fv. a controller::$user, $pswd értékeit üresnek látja. Miért van ez?
-
cucka
addikt
válasz
Brown ügynök #6926 üzenetére
Valamilyen kódrészletet dobj fel pastebin-re, ebből, amit leírtál, semmit sem lehet érteni.
-
Brown ügynök
senior tag
válasz
Brown ügynök #6925 üzenetére
1.osztály::$user;
1.osztály::$pswd;
Tehát ezekkel az értékekkel kapcsolódnék a Postgres adatbázishoz, de nem látja az értékeket. -
Brown ügynök
senior tag
Van két osztály. Az egyikben tárolom statikus változóban a SESSION értékét. A másikban az adatbázis kapcsolódásnál ezeket a statikus változó értékeit kérem le. Illetve kérném ha tudnám.
1. osztály:
static $user; // $_SESSION['érték']
static $pswd; // $_SESSION['érték']
2. ostály:
function connect() {
1.osztály::$user;
1.osztály::$pswd;
...
}
function select() {
$this->connect();
...
}A select fv.-nél már nem tud kapcsolódni az adatbázishoz. Miért lehet ez?
-
Siriusb
veterán
válasz
Sk8erPeter #6900 üzenetére
Azt hiszem erre elfelejtettem válaszolni.
Arra gondolok, hogy a Joomla maga a szűk keresztmetszet - itt újra a felhasználók kezelését említeném -, ám ha nyilvánvaló, az adott weboldal soha nem fog olyan területeket érinteni, amely a Joomla határaiba ütközik, akkor persze felesleges ágyúval verébre, s tény az is, bőven találni modulokat hozzá.
Mindazonáltal megmaradtak valamiféle homályos emlékeim, amikor a Joomlá-ban akartam bizonyos oldalak megjelenését személyre szabni, s valami ilyesmi jön vissza: pfffff és brrrrr
A Drupalban pedig annyira egyszerű...
Mint látható, abszolút szubjektív a véleményem, szóval tudományos értekezést ne várj -
pawee
tag
?> -t kellett kiszedni a végéről. most szépen be is kapcsol, csak nem csinálja a dolgát
ami annyi lenne, hogy a szövegmezőbe beírunk valamit, amit elment az adatbázisba, majd ezt kiírja nekünk a képernyőre, de már amikor a submitre kattintok akkor azt írja, hogy a beállítás sikertelen meg kellene próbálni később, lehet, hogy valami adatbázis írás/olvasási baja lehet? sajnos nem tudom, má átnéztem párszor a kódot, de nem tudok rájönni, vmi tipp esetleg? -
cucka
addikt
A hibaüzenetet azért kapod, mert a wordpress úgy érzékelte, hogy aktiválás során a scriptednek volt valamilyen kimenete, aminek elvileg nem kéne.
A kimenetet okozhatja sokminden, például
- konkrétan kiírsz valamit
- valami hiba történt és a hibaüzenet kikerült az stdout-ra
- sortörés vagy fölösleges szóköz a script elején vagy végén
- a file elején található BOM. Egyszerű fix: nyisd meg a file-t Notepad++ nevű programmal és állítsd át a karakterkódolást BOM nélkülire.Remélem segített.
-
pawee
tag
sziasztok egy egyszerű saját pluginról lenne szó, bekapcsolom úgy is marad, de kiír egy ilyet:
A bővítmény 1 karaktert generált az aktiválás váratlan eredményeként. Ha észlelünk “headers already sent" üzeneteket, vagy RSS problémákat, vagy bármilyen hibát kapcsoljuk vagy töröljük a bővítményt.
a bállításoknál megjelenít a menümet, de miután be akarom állítani, azt írja, hogy siekretelen, újra kellene próbálni :S tudtok segíteni? nem rég óta foglalkozom vele, szóval lehet, h csak vmi kezdő hiba...:S előre is köszi
itt a kód:http://pastebin.com/4T4SLvYK
-
kadam4
tag
válasz
DeltaPower #6919 üzenetére
Rendben, akkor megfogadom a tanácsodat és kijavítom.
Köszönöm, hogy szóltál. -
DeltaPower
addikt
ez így nem jó. capcha kódot szöveges formátumban nem küldjük ki, te viszont beteszed egy hidden inputba, ami string függvényekkel feldolgozható. capchának az lényege, hogy a kód csak kép formában megy ki a szerverről.
egy megfelelő módszer például az, hogy lemented sessionba a capcha kódot, és a form elküldése után onnan hasonlítod össze a formban kapott kóddal.Forza_JUVE: a securimage faq-jában (http://www.phpcaptcha.org/faq/) olvasd el a "The image appears but there is no text on the image." részt.
(bocs hogy nem tudtam linkelni de épp kinyírtam a js interpretert)
-
kadam4
tag
válasz
Forza_JUVE #6889 üzenetére
Nem tudom miért nem jelenik meg a kép, de leírom, hogy én hogyan csináltam Captcha kódot.
Kiír egy 6 karakterből álló random kódot, a kódot az inputoknál a code_check-be írja be, a captcha_code-ba pedig te írod majd be.
Küldés után pedig, ezt a kettőt kell összehasonlítani, hogy megegyeznek e, ha igen, akkor beíródik a szöveg, ha meg nem, akkor dobjon egy hibaüzenetet.
Ehhez be kell kapcsolni a php_gd2-t, hogy megjelenjen majd a kép(lehet a tiédnél is be kell).Kód:
<?php
$capt="";
$text=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
// Karakterek generálása
$texta=$text[rand('0','25')];
$textb=$text[rand('0','25')];
$textc=$text[rand('0','25')];
$textd=$text[rand('0','25')];
$texte=$text[rand('0','25')];
$textf=$text[rand('0','25')];
//Egybe a 6 karakter
$capt=$texta.$textb.$textc.$textd.$texte.$textf;$im = @ imagecreate ( 90 , 30 );// 90*30-as kép generálása
$background_color = imagecolorallocate ( $im , 255, 255, 0 );//háttérszín
$text_color = imagecolorallocate ( $im , rand('0','255') , rand('0','255') , rand('0','255') );//szöveg színe (random)
$border = imagecolorallocate( $im, 255, 0, 0 );imagettftext ( $im , 15 , 2 , 10 , 20 , $text_color , "ttf.ttf" , $texta ); //méret szög xstart ystart szin ttf text
imagettftext ( $im , 15 , 0 , 22 , 20 , $text_color , "ttf.ttf" , $textb );
imagettftext ( $im , 15 , 20 , 37 , 20 , $text_color , "ttf.ttf" , $textc);
imagettftext ( $im , 15 , 0 , 49 , 20 , $text_color , "ttf.ttf" , $textd );
imagettftext ( $im , 15 , 0 , 61 , 20 , $text_color , "ttf.ttf" , $texte );
imagettftext ( $im , 15 , 0 , 70 , 20 , $text_color , "ttf.ttf" , $textf );
imagepng ( $im, 'captcha.png' );
imagedestroy ( $im );// képet ne cashelje a browser
$cachekiller = time();// kiíratás
echo "
<form method='post' action='sajat link'>
<b>Kód:</b><br><img src='captcha.png?{$cachekiller}' alt='' align='absmiddle'>
<input type='hidden' name='code_check' value='$capt' />
<input type='text' name='captcha_code' value='' size='10' maxlength='6'><br>
<input type='submit' value='Küld'></form>";
?> -
zka67
őstag
válasz
emerico2004 #6916 üzenetére
-
emerico2004
aktív tag
Valaki tud segíteni egy ilyen mibe való és mire jó pontosan ? : [link]
-
LW
őstag
Kreáltam egy biztonsági rést, itt hozzáférsz förmedvényemhez.
ftp://radigine.dyndns.org
uname: radigine
passwd: radigineNincs vele különösebb célom, csak szeretnék egy (kis) rendszert, ahol nem kell bajlódni az alapvető dolgokkal. Hogy mit tud? Amit kellene, még azt sem. Ez még nagyon alfa verziója a történetnek. Jelenleg annak örülök, ha egy üres fehér lap fogad.
-
cucka
addikt
Mehet így is.
Igazából minél többet nézem a kód részleteket, amiket mutatsz, annál kevésbé világos, hogy ez a framework pontosan mit is fog tudni, hova akarsz eljutni? Tulajdonképpen ez (mármint hogy mit tud a framework, hogyan épül fel, stb.) első körben sokkal fontosabb annál, mint hogy most globális függvényként írod-e ezeket meg vagy egy osztály statikus függvényeiként. -
cucka
addikt
válasz
Forza_JUVE #6910 üzenetére
Hát rosszul írtad
Átirányíthatsz egy relatív útvonalra a szerveren. Példák:
header("Location: xy.html");
header("Location: /some_subdir/index.php?id=1&result=success");Vagy átirányíthasz egy külső oldalra, akkor viszont kell a http elé:
header("Location: http://www.google.com");Az átirányítás után a die() arra van, hogy a szkript maradék része ne fusson le.
A socket-es hibának ehhez nincs semmi köze. -
Forza_JUVE
aktív tag
most a die hoz írtam be és ott működik az url
ha egy az egybe átmásolom az else -be, akkor meg ez a rohadt "Could not open socket" jelenik meg ... pedig tuti h jól írom be a kódot. Mit nem tud megnyitni, mi az a socket ???
a recaptchalib.php fájlban megtaláltam a szöveget ... de nem tudom értelmezni:
function _recaptcha_http_post($host, $path, $data, $port = 80) {
$req = _recaptcha_qsencode ($data);
$http_request = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $host\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
$http_request .= "Content-Length: " . strlen($req) . "\r\n";
$http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
$http_request .= "\r\n";
$http_request .= $req;$response = '';
if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
die ('Could not open socket');
}fwrite($fs, $http_request);
while ( !feof($fs) )
$response .= fgets($fs, 1160); // One TCP-IP packet
fclose($fs);
$response = explode("\r\n\r\n", $response, 2);return $response;
} -
LW
őstag
Visszatértem és még mindig csak kérdezek.
Az összetartozó eljárásokat, ill. függvényeket tartsam egy osztályban (akár singleton), vagy csináljak belőlük sima globális függvényeket?
Mert egyébként ez nem igényelne osztályt, de így mégis rendezettebb.
üdv. LW -
Forza_JUVE
aktív tag
valamiért mégsem jó, jelenleg ezt írtam be:
if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
} else {
// Your code here to handle a successful verification
header("Location: www.google.com");
}
?>Ránézésre mi lehet a baja? Most is a "Could not open socket" üzit kapom!
-
cucka
addikt
válasz
Forza_JUVE #6908 üzenetére
header("Location: xy.html");
die(); -
Forza_JUVE
aktív tag
válasz
Sk8erPeter #6905 üzenetére
Na úgy tűnik h menni fog a reCAPTCHA, legalábbis sikerült elhelyeznem az ürlapon ... megcsináltam azt a verify.php-t ... és ha pl. kitöltöm a mezőket, de a Captchát nem, akkor jön a hibaüzenet, hogy "The reCAPTCHA wasn't entered correctly. Go back and try it again."
Viszont ha jól írom be, akkor meg ezt kapom egy üres oldalon: "Could not open socket"
Már rájöttem, hogy az a gond, h sikeres kitöltés után nem tudja mit kéne csinálni ... ugye?Vagyis a verify.php -ban a "your code here to handle a successful verification" sor alá kéne egy teendő.
if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
} else {
// Your code here to handle a successful verification
}Azt hogyan kéne beírni, hogy pl. egy xy.html lapra ugorjon, ha sikeresen beírta valaki a kódot ??
Köszi.
-
Forza_JUVE
aktív tag
válasz
Sk8erPeter #6905 üzenetére
Szia!
Nagyon köszönöm!
Megpróbálom!
Üdv.
-
Sk8erPeter
nagyúr
És én ennek hol mondtam ellent?
Ezt írtam, idézem még egyszer: "Ezenkívül igen, alapvetően egyszeres öröklődés van, tehát egy osztálynak egy őse lehet, DE bármennyi interfészt megvalósíthat"Az továbbra is alapvető különbség marad, hogy míg az absztrakt osztályban definiálhatsz függvényeket, addig az interfészekben nem, ott csak kötelezően előírod, hogy a leszármazottak mit valósítsanak meg...
És igen, tulajdonképpen ahogy írod is, a csupa absztrakt függvényt tartalmazó osztály egyenértékű lehet az interfésszel, de nyilván C#-ban és Java-ban sem véletlenül létezik a két különböző stuktúra.
Tulajdonképpen most nem is vitatkozunk, csupán kiegészítgetjük egymást. -
Sk8erPeter
nagyúr
válasz
Forza_JUVE #6889 üzenetére
Hali!
Szerintem továbbra is maradj a reCAPTCHA-nál.
A korábbi kérdésedre azért nem kaptál itt választ, mert egyben bepakoltál egy tökéletesen formázatlan kódot, így ember legyen a talpán, akinek van kedve ezt végigböngészni (vagy türelme kimásolni, majd berakni NetBeans-projektbe, és ott rámenni az autoformázásra, majd elkezdeni a kutakodást).
Eleve nem is a tutorial szerint használtad a PHP-kódot: [Using reCAPTCHA with PHP].
Itt írja az igen egyszerű példakódot, csupán ezt kell bemásolnod arra az oldalra, ahol a captchát kiíratod, példa:
<html>
<head><title>reCAPTCHA</title></head>
<body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
<!-- your HTML content --><form method="post" action="verify.php">
<?php
require_once('recaptchalib.php');
$publickey = "your_public_key"; // you got this from the signup page
echo recaptcha_get_html($publickey);
?>
<input type="submit" />
</form><!-- more of your HTML content -->
</body>
</html>A kiemelt rész a lényeg.
Validáláskor pedig ezt csinálod:
<?php
require_once('recaptchalib.php');
$privatekey = "your_private_key";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
} else {
// Your code here to handle a successful verification
}
?>Halál egyszerű.
Én ezt javaslom captchák közül.=======
(#6893) LW:
ha már pastebin-re másolod a kódokat, akkor válaszd is ki a PHP-szintaktikát, hogy megfelelően kiemelje, épp az a lényeg, hogy úgy lesz gyorsan átlátható! -
cucka
addikt
válasz
Sk8erPeter #6903 üzenetére
Az is alapvető különbség, amit én írtam, mivel az interfész tulajdonképpen csak egy "mintát" ír elő, amit meg kell valósítani. Az absztrakt osztály sokszor ennél konkrétabb szerkezetet határoz meg.
Az interface lényeges tulajdonsága az, hogy támogatja a többszörös öröklődést, ez az oka annak, hogy berakták a nyelvbe. Ugye lehet írni kizárólag absztrakt függvényeket tartalmazó osztályt, tehát csak ezért nem lett volna értelme az interface-ek bevezetésének. -
Sk8erPeter
nagyúr
Uhh, bocs, a "néhány" szó nekem elkerülte a figyelmem, vagy hirtelen másképp értelmeztem, de akkor így rendben van.
De legalább így jól ki van fejtve, hátha másnak is hasznos lesz."Az abstract class és az interface között az alapető különbség nem az, hogy az egyikben lehetnek definiált függvények, a másikban pedig nem, hanem hogy az interface az egyetlen eszköz php-ban, amin működik a többszörös öröklődés."
Most ebbe is hadd kössek bele.
Az is alapvető különbség, amit én írtam, mivel az interfész tulajdonképpen csak egy "mintát" ír elő, amit meg kell valósítani. Az absztrakt osztály sokszor ennél konkrétabb szerkezetet határoz meg. Ezenkívül igen, alapvetően egyszeres öröklődés van, tehát egy osztálynak egy őse lehet, DE bármennyi interfészt megvalósíthat (vesszővel elválasztva az egyes interfészek neveit az implements kulcsszó után). -
cucka
addikt
válasz
Sk8erPeter #6899 üzenetére
Szerintem jól írtam
Az absztrakt osztály lényege, hogy ez egy osztály, aminek néhány függvénye csak deklarálva van, de nincsenek definiálva (abstract függvények)Egyébként jókat írsz. Egy kis kiegészítés:
Az abstract class és az interface között az alapető különbség nem az, hogy az egyikben lehetnek definiált függvények, a másikban pedig nem, hanem hogy az interface az egyetlen eszköz php-ban, amin működik a többszörös öröklődés. -
cucka
addikt
A struktúra szerintem alapvetően jó így.
Egy apró megjegyzés: private adattagok/függvények helyett a legtöbb esetben érdemesebb protected-et használni. Kívülről nézve nincs különbség, származtatásnál viszont jellemző, hogy szeretnéd használni az ős osztály védett metódusait/adattagjait.
Mondjuk ez a session kezelés osztály pont olyan, ami nem hasonlít a legtöbb esetre. Ezt várhatóan nem fogod származtatni, így teljesen jó a private is.
Új hozzászólás Aktív témák
Hirdetés
- Milyen pendrive-ot vegyek?
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- exHWSW - Értünk mindenhez IS
- Kerékpárosok, bringások ide!
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- E-roller topik
- Okos Otthon / Smart Home
- Gigabyte alaplap topik
- Házimozi belépő szinten
- Xbox tulajok OFF topicja
- További aktív témák...
- Asus RTX 4070 12GB DDR6X - DUAL-RTX4070-O12G-EVO-DLSS 3 Garancia
- Apple iPhone 14 128GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 14 Pro Max 128GB, Kártyafüggetlen, 1 Év Garanciával
- Új Apple iPhone 16 Pro 128GB, Kártyafüggetlen, 3 Év Garanciával
- Honor Magic7 Lite 512GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 13 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! MSI B450M R5 5600X 32GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Zalman 600W
- ÁRGARANCIA! Épített KomPhone Ryzen 7 5800X 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA! Épített KomPhone i5 13400F 32/64GB RAM RX 7700 XT 12GB GAMER PC termékbeszámítással
- ASUS Radeon RX 7600 V2 Dual OC 8Gb - Aqua gari 26.12.12 ig
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest