Új hozzászólás Aktív témák
-
válasz Sk8erPeter #2848 üzenetére
Hát én valami PHP könyvet ajánlanék, lehetőleg PHP5öst, pl a Tanuljuk meg 24 óra alatt a PHP-t az kezdésnek jó, beavat mindenbe ami kell a problémád megoldásához. Ha esetleg tudsz angolul, akkor meg neten találsz rengeteg e-book-ot pdf-ben. Dummies sorozatot ajánlom még nagyon - a stílusa miatt.
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #2850 üzenetére
pü
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
Tele von Zsinór
őstag
válasz Sk8erPeter #2862 üzenetére
Helyesbítek: a fileműveletek lassúak. Ha 1-2-10 includeod van csak, ez nem fog feltűnni, ha sokkal több, akkor viszont már jelentős visszafogó tényező.
Például a symfony framework ez ellen úgy védekezik, hogy cacheli a teljes core rendszerét egyetlen masszív php fileba, így éles rendszerben csak az van includeolva. -
válasz Sk8erPeter #2862 üzenetére
Nem, csak az volt, hogy ciklusba voltak ágyazva az include-ok, kábé így:
while(iteráció) {
include('ugyanaz a fájl.');
}Én hülyeségem.
HTML űrlap generálás miatt kellett, s nem ilyen volt hanem sok egymásba ágyazott ciklus, így állandóan a winyón kellett kaparnia 17 fájl után, amiből néhányat akár 70x is be kellett ágyazni. Írtam egy osztályt, ami gyorsítótárazva ágyaz be, azaz ha valamit beágyaz, akkor beírja egy változóba is a benne lévő php scriptet, majd ha mégegyszer be kéne ágyazni, akkor már a memóriából olvassa be a scriptet, s eval-lal újra lefuttatja. Persze a szkript lefutása után törlődnek a cuccok a memóriából, így ezzel "csak" 5x tempót értem el, ami még mindig 2x lassabb az egy fájlos módszernél, úgyhogy fogtam magam és becache-eltem egy fájlba az egész generált űrlapot (ami 200x gyorsabb), oszt kész, az úgyis ritkán változik
class Cached_Include {
private static $_cache;
public static function inc($inc, &$importVars)
{
$inc = dirname(__FILE__) . '/' . $inc;
if(!self::$_cache[$file]) {
self::$_cache[$inc] = '?>' . file_get_contents($inc) . '<?';
}
extract($importVars, EXTR_REFS | EXTR_SKIP);
eval(self::$_cache[$inc]);
}
public static function save()
{
file_put_contents('cache.txt', serialize(self::$_cache));
}
public static function load()
{
self::$_cache = unserialize(file_get_contents('cache.txt'));
}
}Sebességek amúgy:
sok fájl, no optimalizálás: 1200-1500ms
sok fájl, cachelt include: 180-200ms
egy fájl (minden ebben van): 80-100ms
cachelve az egész hóbelevanc: 1-10ms[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
Balint133
aktív tag
válasz Sk8erPeter #2951 üzenetére
Szia, nem tudom, h az a script pontosan h néz ki, de a
file_exists()
függvénnyel meg tudod nézni, hogy már létezik e.
klikkKét küklopsz négy szem közt!!
-
válasz Sk8erPeter #2951 üzenetére
Valami ilyesmire lesz neked szükséged:
$image = '010101110101011010111010101011011110';
$file = 'kép.jpg';
$name = substr($file, 0, strrpos($file, '.')); // kiterjesztés levágása
$file = $name;
$i = 1;
while(file_exists($file)) {
$i++;
$file = $name . '_' . $i . '.jpg';
}
file_put_contents($file, $image);Most hirtelen hasból ennyire futotta, lehetne még rajta okosítani.
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3037 üzenetére
1.)
Az 010101110101011010111010101011011110 alatt a képet értettem bináris formában. Tehát magát a képet, mint adat, feltöltés esetében ugyebár ez a $_FILES tömbben van.2.)
Igen, pontosan ezt csinálja.A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3038 üzenetére
UTF8-at szerintem valahogy csak meg lehet oldani, de a mikéntjéről fogalmam sincs.
A fájltípust (MIME) a $_FILES tömbből is elő tudod varázsolni, én úgy szoktam. [L:http://www.php.net/manual/en/features.file-upload.post-method.php][/L]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3041 üzenetére
bináris = nyers, vagyis alapjában véve ugyebár egy tempfájlba tölt fel, aminek a nevét $_FILES[{inputname}]['tmp_name'] változóból éred el, s abban van a bináris. Most nézve a file_put_contents()-em gyakorlatilag hülyeség, szóval mást használj helyette, a fájlnév a régebb megadott átnevező-algoritmus $file változójában van. Pölö lehet move_uploaded_file() azonnal átmenteni, vagy az imagesave()-vel menteni, ha már be van olvasva GD-be.
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3043 üzenetére
Hibakezelésre szerintem nem én ajánlottam a módszert, de egyszerűbb szkriptben megteszi ez is. Én amúgy ilyen sok kis
if (hiba) {
return hibakód;
}sorokat szoktam használni ellenőrzésre, amik függvényen vagy includolt szkripten belül használhatóak. A hibakezelés a függvényt hívó (vagy fájlt includoló) szkriptben történik.
Kiterjesztés visszarakásnál az a legcélszerűbb, hogy levágás előtt a substr() függvénnyel megjegyzed a kiterjesztést, oszt visszarakod amikor kell, így nem kell vele foglalkoznia a szkriptednek, fogalma se lesz róla, hogy milyen kiterjesztésű fájlokkal dolgozik.
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
cucka
addikt
válasz Sk8erPeter #3043 üzenetére
Hibakezelésre az előttem leírt megoldás is jó, de kivételkezeléssel is megoldhatod, ami szerintem valamivel elegánsabb is
-
válasz Sk8erPeter #3048 üzenetére
Ja hogy van erre szakosodott függvény? Há' akkor használd azt.
Hibakezelésnek meg használd azt, ami legjobban bevált.Vagy ha elegánsan akarod megoldani, akkor ezt: Kivételkezelés
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
cucka
addikt
válasz Sk8erPeter #3052 üzenetére
Rossz a feltételed.
Egyrészt amit írtál, az a megadott string-eken logikai vagy műveletet végez, majd megnézi, hogy az eredmény egyenlő-e a típus változóval. Próbáld inkább így.
if ($tipus == 'application/octet-stream' || $tipus=='application/zip' || $tipus=='application')
Másrészt létezik párszáz mime típus, amiből neked csak 3-4 típus a megfelelő, tehát inkább azt ellenőrizd, hogy beletartozik-e abba a 3-4 típusba, mint hogy azt, hogy beletartozik-e a maradék párszázba.
Harmadrészt a mime típust a kliens küldi, tehát megbízhatatlan. Javaslom, inkább a file kiterjesztése alapján ellenőrizz. Ha valaki rossz kiterjesztésű file-t tölt fel, akkor így járt.
[ Szerkesztve ]
-
válasz Sk8erPeter #3052 üzenetére
Ahogy cucka is mondta, több szempontból se jó a módszer.
De amúgy a többféle MIME ellenőrzéséhez az ilyesmi jó, és átlátható:
$valid = array(
'image/jpeg',
'image/pjpeg',
'image/gif',
'image/png',
);
if(in_array($tipus, $valid)) {
// yada-yada-yada
} else {
// error
}[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
kymco
veterán
-
Tele von Zsinór
őstag
válasz Sk8erPeter #3052 üzenetére
Úgy emlékszem, képfeltöltésről van szó, legalábbis korábban esett itt szó az átméretezéséről.
Ahogy írták már, a böngésző által küldött mime megbízhatatlan. Ha azt akarod ellenőrizni, kép-e, használd a getimagesize() függvényt, képnél értelmes eredményt ad vissza, minden másnál hibát. -
Tele von Zsinór
őstag
válasz Sk8erPeter #3061 üzenetére
Miért olvas ki a fájlból esetlegesen rossz információt?
Nem arról van szó, hogy a böngésző szúrja el, bár erre is láttam már példát; sokkal valószínűbb az, hogy egy rosszindulató látogató hamisít bele. Ha csak a mime alapján ellenőriznél, akkor mondjuk fel tudna tölteni egy .php filet, ha azt mondja, image/jpeg. Innen általában egyszerű kisakkozni, hova lett mentve és voilá: saját php kódját futtatja a te szervereden.
Az ékezetes, egyéb karakterekre valami ilyesmit ajánlok:
static public function slugify($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text))
{
return 'n-a';
}
return $text;
}Ha van iconv modulod, ez a legjobb megoldás: utf8-ból alakít sima ascii-vá úgy, hogy transliterál (van erre magyar kifejezés? ), azaz az á-ból a-t csinál, de a ä-ból is, ë -> e, ç -> c, satöbbi.
-
Tele von Zsinór
őstag
válasz Sk8erPeter #3068 üzenetére
Nem böngészőfüggő, a php kód a szerveren fut
Nálam ilyen egy próbafuttatás:tibia@sziget:~$ php --run 'echo iconv("utf-8", "us-ascii//TRANSLIT", "Gyémánt") . "\n";'
Gye'ma'nta fontos különbség: iso-8859-1 vs. us-ascii. Előbbi esetén nálam is furaság lesz a végeredmény
A preg_replace()-s sor, amit bemásoltál eltávolítja a nekem nem kellő karaktereket (url komponenst állítok elő), azaz mindent, ami nem szám vagy betű. Utána jön az iconv, majd megint egy preg_replace, hogy az iconv által berakott felesleget eltávolítsa. Emiatt elnézésed kérem, korábban azt mondtam, elég az iconv az ékezetek eltávolításához, de kell mögé az a preg_replace is.
[ Szerkesztve ]
-
PazsitZ
addikt
válasz Sk8erPeter #3108 üzenetére
Most nézem csak, hogy mire is akarod használni.
Én direkt nem szenvedtem hasonló esetben az ékezetekkel, url-be amúgy sem illik ékezetet rakni.
Én így oldottam meg a dolgot:mb_ereg_replace("/[^a-z0-9]/i",'_',$filename)
Azaz a filenévben csak betűt és számot engedek, minden más alulvonás lesz a névben.
- http://pazsitz.hu -
-
PazsitZ
addikt
válasz Sk8erPeter #3110 üzenetére
Esetleg próbáld ki ezt:
function chere($txt){
$mit = array("á","é","í","ó","ö","ü","ű","ú","Á","É","Í","Ó","Ö","Ü","Ű","Ú","ä","Ä" );
$mire = array("a","e","i","o","o","u","u","u","A","E","I","O","O","U","U","U","a","A" );
return(str_replace($mit,$mire,$txt)) ;
}- http://pazsitz.hu -
-
PazsitZ
addikt
válasz Sk8erPeter #3141 üzenetére
Nem ismerem kifejezetten, de amire pl felhívja a figyelmet: "Ensure that you do not exceed the number of connections allowed by MySQL."
itt alul megtalálod az esetleges hátulütőit
pl.:
Esetleges bug (végtelen ciklus) esetén beakad a szál, hamar elfogy az összes kapcsolati szál.
Ha a script valamiért hosszabb időre lock-olja a táblát/sort akkor elérhetetlenné válik.[ Szerkesztve ]
- http://pazsitz.hu -
-
Tele von Zsinór
őstag
válasz Sk8erPeter #3143 üzenetére
MySQL esetében nem ajánlott a perzisztens kapcsolat, maradj a sima _connect()-nél.
Kapcsolatot bezárni szép, de ha úgyis a scripted végére tennéd, felesleges: a futás végén a php felszabadít minden erőforrást, így a kapcsolatot is. Használata ott ajánlott, ahol sok konkurrens felhasználó van: gyorsan összeszeded adatbázisból, ami kell, zárod a kapcsolatot, és csak utána foglalkozol a kiiratással. -
biker
nagyúr
válasz Sk8erPeter #3184 üzenetére
submit nélkül az 1.0 user nem tud mit csinálni. az neki kész blokk. nem lehet elküldeni, és ennyi
Én valakinek tegnap telefonba magyaráztam, hogy oldalra is lehet ám görgetni, nem csak fel le, és tegye meg, akkor majd látja a kép maradékát.
és közben ne legyek túl ideges, igaz?Elektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
ArchElf
addikt
válasz Sk8erPeter #3187 üzenetére
Ez egy kicsit tagging kérdés...
Hogy először ne a technikai részével foglalkozzak: szerintem egyrészt célszerű előre feltölteni egy tag táblát, ami tartalmaz neveket (ebben az esetben kutyaneveket), a felhasználó a képfeltöltéskor megadhatja a nevet és rakhat hozzá tag-eket is.
A tag-ek hozzáadásánál használhat privát és pubikus tag-eket, a meglevő listát bővítheti is.Technikailag első blikkre így képzelném el:
A Tag tábla:
tag azon. | tag név | típus (publikus / vagy felhasználóvév)Kép tábla:
azonosító | megjelenítendő név | kép adatok...KT (kép/Tag) kereszttábla:
Kép azon | Tag azon.Megjelenítéskor:
Kép azonosító kinyerése, tag-azonosítók kikeresése és monjuk egySelect * From Kep Where kep_az IN
(Select kep_az From KT Where tag_az IN
(Select tag_az From KT Where kep_az = @kep_az))Esetleg még bele kell hegeszteni egy aggregációt, hogy az eredeti és a Tag-ek alapján megtalált kép között mennyi közös Tag van és csökkenő sorrendbe lehessen tenni.
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #3189 üzenetére
Az a rész már megvan, hogy egy tömbbe le tudtam kérni a kutyák neveit, és megtisztítani a duplikátumoktól, ez nem volt túl nehéz.
Ha egy külön while-ciklusba betenném, hogy pl. amíg ez a tömb első eleme megegyezik a "név" adatmezőben található névvel, amelyik adatsornál a táblából épp jár a "while ($result = mysql_fetch_assoc($query))", addig mutogassa az 50px-es képeket, az nem lenne jó?
Egyelőre érdekelne, hogy valami ilyesmi gondolatmenet nem lenne-e célravezető.[ Szerkesztve ]
Sk8erPeter
-
cucka
addikt
válasz Sk8erPeter #3189 üzenetére
Nem igazán értem, hol akadtál el. Valahogy így oldanám meg:
$tomb=array();
$elozonev=null;
$res=mysql_query("select * from tablanev order by nev asc");
while ($row=mysql_fetch_assoc($res)){
$tomb[]=$row;
}
for ($i=0;$i<count($tomb);$i++){
if ($i==0 || $tomb[$i]['nev']!=$tomb[$i-1]['nev']{
//nagy kep kiirasa
print '<img src="'.$tomb[$i]['nagy_kep_url'].'"" />';
} else {
//kis kep kiirasa
print '<img src="'.$tomb[$i]['kis_kep_url'].'"" />';
}
if (!isset($tomb[$i+1]) || $tomb[$i+1]['nev']!=$tomb[$i]['nev']){
print 'Kutya neve: '.$tomb[$i]['nev'];
}
}A program név szerint abc sorrendben kiír minden kutyához egy nagy képet, n darab kis képet és a végén a kutya nevét.
A lényeg: végigiterálunk a sorokon és azt figyeljük, hogy mikor érünk el egy új kutya adataihoz. Ha új kutyához érünk, akkor nagy képet írunk ki, különben kis képet. Ha a következő kép már egy új kutyához tartozik, akkor kiírjuk a kutya nevét.
Az adatok kutyanév szerint vannak rendezve, tehát olyan nem fog előfordulni, hogy egy korábban kiírt kutyához tartozó sorral találkozunk.
Azért rakom ki a mysql-ből érkező adatokat egy tömbbe, mert az iteráció során szükségem van az előző és a következő sorra is. Feltételezem, nincs több százezer sor a táblában, így nem fog gondot okozni a script futtatása. (A lehetséges probléma az lehet, hogy nem elég a php programnak engedélyezett memóriamennyiség, ami általában 16 mega.)[ Szerkesztve ]
-
cucka
addikt
válasz Sk8erPeter #3193 üzenetére
de ezek szerint a tömb értékadásakor mindig a legutolsó tömbelem UTÁN (és a lezáró /0 elé) rakja az adott elemet? (tehát számomra az volt az újdonság, hogy nem írja felül a 0. elemet)
A $tomb[]=ertek formában megadott tömb feltöltés úgy működik, hogy a legkissebb nemnegatív egész számot használja indexnek úgy, hogy ne írjon fölül semmit. (Tehát üres tömbnél 0,1,2,3.. indexeket fogja használni). A programomban amúgy üres tömböt töltök így fel, tehát nem merül fel a kérdés, hogy fölülír-e valamit.És mi a teendő abban az esetben, ha adott esetben túllépi a memóriaküszöböt? Valamint milyen esetben fordulhat ez elő?
A php a változóidnak foglal le memóriát. Ha túlléped a memóriaküszöböt, akkor ki fogja írni a php, hogy elfogyott a memória.
Ez esetben át kell alakítsd a programodat, hogy kevesebb memóriát használjon. Például nem tolod be egy tömbbe a teljes adatbázis tábla tartalmát, hanem mindig csak 1 sort kezelsz, ilyesmi. Igazából minden eset más, nem lehet általánosan megmondani, mi a helyes lépés ilyen esetben. Amúgy az én programomat is át lehet írni ilyenre, csak nem akartam fölöslegesen bonyolítani.Ha ilyen problémád van, akkor a script által lefoglalt memóriamennyiséget a memory_get_usage() függvénnyel tudod lekérdezni.
Mod: talán még annyit érdemes megjegyezni, hogy a php memóriakezelése messze nem olyan egyszerű, mint mondjuk c-ben, vannak furcsaságai.
[ Szerkesztve ]
-
maLakai
csendes tag
válasz Sk8erPeter #3196 üzenetére
Legegyszerűbb és legjobb, hogyha nem ugyanazon az oldalon dolgozod fel az adatokat.
Persze csinálhatsz pl olyat, hogy a küldesz tovább egy random azonosítót is, amiben pl dátum-idő és vmi random bennevan, ezt persze tárolod is adatbázisban, így ellenőrizve az adatbázisból, hogy az el lett-e már küldve, de ez esetben a böngésző még úgy fogja látni, hogy újra post-olsz adatokat és figyelmeztetni fog (a jobb fajta), szóval felhasználói szempontból nem a legszerencsésebb.
-
meone
tag
válasz Sk8erPeter #3200 üzenetére
Nagyon szépen köszönöm.
Elnézést kérek mindenkitől a helyes írásom ért :)
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #3205 üzenetére
Hoppá, lejárt a limit, kissé gyorsan írtam, véletlenül szóközt raktam az alsóvonás helyett, sorry, nem tudom, hogy sikerült, tehát a formnál a helyes action:
action=\"'.$_SERVER['PHP_SELF'].'\"
Sk8erPeter
-
cucka
addikt
válasz Sk8erPeter #3206 üzenetére
A $_SERVER['PHP_SELF'] használatával óvatos lennék. Tegyük fel, hogy mod_rewrite-ot használsz.
Például a valami.hu/cikkek/elso_cikk url-ből csinálsz olyat, hogy valami.hu/show.php?cikk_id=123 . Ekkor a PHP_SELF-ben nem a böngésző fejlécében látható url lesz, hanem az, amire a mod_rewrite lecserélte. Ez akkor gond, ha az adott url a mod_rewrite miatt nem hívható meg direktben.A html formok amúgy úgy működnek, hogy ha nem állítod be az action paramétert, akkor alapértelmezés szerint saját magára fog átirányítani, tehát jelen esetben az egészet meg lehet spórolni.
-
maLakai
csendes tag
válasz Sk8erPeter #3198 üzenetére
Másik fileban feldolgozás szerintem gyakoribb (amit ugye a felhasználó nem igazán lát).
Inkább akkor látni, hogy az action ugyanoda mutat, ha a kiinduló oldal kimondottan az üzenet írására/küldésére szolgál csak. De szerintem manapság már ezesetben sem a legkedveltebb.Szerk: Persze átfogó felmérést nem tettem... Végeredményében, ami kényelmes, ha máshogy megoldod az is ugyanolyan jó. ^_^
[ Szerkesztve ]
-
válasz Sk8erPeter #3223 üzenetére
Nem kötelező paraméter(ek) megadása:
function foo(bar=null)
{
// blah-blah
}A null helyére bármit írhatsz, az lesz az alapértelmezett értéke a paraméternek, ha nem adod meg.
Ha korlátlan számú paramétert akarsz megadni, akkor a func_get_args() függvény jöhet jól. Ez a a függvény visszaad egy tömböt, amiben a megadott paraméterek vannak. Az első paraméter 0-s indexű, a második 1-es, stb. A func_num_args() függvénnyel a megadott paraméterek számát tudod lekérni. Illetve van még a func_get_arg($index) függvény, amivel az ($index + 1)-dik paramétert tudod elérni.
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
1ed
csendes tag
válasz Sk8erPeter #3262 üzenetére
Helló!
POST után át kell irányítani egy másik oldalra.
form -> adatok feldolgozása (itt nincs semmilyen kimenet) -> eredmény kiírása''He told me that no one should look for the answer unless they have to because once you see it, everything changes. Your life and the world you live in will never be the same. It's as if you wake up one morning and the sky is falling.''
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #3266 üzenetére
Egyébként igazából ez a böngészőfrissítős dolog azért volt érdekes, mert akkor igazán szép megoldást nehéz találni arra, hogy űrlapokat egy fájlban írassunk dolgozzunk fel, hogy a felhasználó ne küldhesse el minden egyes frissítésnél a korábban megadott adatokat. (nem is lenne biztonságos, így könnyen ki lehetne akasztani az oldalt )
Mivel ebben az esetben a $_POST változók értékeit át kell adni egy másik változónak, és akkor azt vizsgálni:$akarmi = $_POST['valami'];
if ( !empty($akarmi) )
{ //pl. adatbázisba való feltöltés (persze kritériumok teljesülése esetén)
}
else
{ //űrlap kiíratása
}Azt viszont ebben az esetben NEM lehet csinálni, hogy:
if ( isset($_POST['valami']) ) //vagy akár !empty($_POST['valami']) is lehetne
{ //pl. adatbázisba való feltöltés (persze kritériumok teljesülése esetén)
}
else
{ //űrlap kiíratása
}Mivel akkor a $_POST-nak nyilván minden egyes böngészőfrissítésnél mindig van értéke, se nem üres (empty), se nem beállítatlan (unset).
Vagy tudtok valami elegáns megoldást az _első_ példa helyett?
[ Szerkesztve ]
Sk8erPeter
-
válasz Sk8erPeter #3282 üzenetére
Ezt nem értem. Miért ne lenne ugyanaz az eredménye a két példának? o.O
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3285 üzenetére
Hát ez elég gány, akkor inkább a SESSION['post'] vagy valami másba adod meg, s aztán azt unsetteled, nem az egész sessiont. De minek kell ez? fentebb olvastam valami átirányítós dolgot, akkor amiatt kell? És konkrétan mit postolsz?
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3288 üzenetére
szerk: közbe átírtam, mert mégse jó úgy...
Nem kell a session-be tenni, hanem csak annyit csinálsz, hogyha sikeresen felvetted az adatbázisba a postolt adatokat, akkor csinálsz egy $_SESSION['siker'] = true; trükköt, majd header('Location: ', $_SERVER[''PHP_SELF'');, amivel eltűnik a $_POST, s akkor a $_SESSION['siker'] miatt kiíratod, hogy sikerült, majd unset($_SESSION['siker']).[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #3290 üzenetére
bocs, lejárt a mod.
Ja, de végül is akkor nem is használtam az unset() függvényt, de ebben az esetben, ha átirányítás történik, akkor kell egyáltalán?
Az oldal tetején ott van a start_session(). A próba alapján nem muszáj, vagy csak épp szerencsém volt, vagy hogy is van ez?[ Szerkesztve ]
Sk8erPeter
-
válasz Sk8erPeter #3291 üzenetére
Kéne pedig használni unset-et, mert amúgy látszólag mindig azt írja ki, hogy sikeres, pedig nem is volt az. Meg még annyi, hogy fentebb írtad, hogy még megkérdezi hogy elküdje-e mégegyszer a postot. Pedig azt nagyon nem kéne neki...
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3294 üzenetére
Bocs, elfelejtettem visszanézni a topikba.
Hirtelen most erre a dologra azt tudom mondani, hogy használd az ob_start() függvényt a kérdéses fáj elején, s így akkor küldhetsz headert, amikor csak akarsz, mert pufferbe írja az adatokat elküldés helyett, amit a szkript lefutása után ürít ki, ha ez megold valamit.
Mert amúgy nem értem mi nem megoldható ezen. POST ürítésre a header('Location', $_SERVER['PHP_SELF']); cucc kell ugyebár. Amikor ezt meghívod, sessionbe is beraksz egy változót, hogy törölted a POST cuccokat, majd ezt a változót is törlöd, hogy később ne kavarjon be.
Ehh fáradt vagyok.
Illetve még annyit tudok ajánlani, hogy nézz utána az MVC-nek, ez biztos segítene a problémádon, csak idő kell hozzá...
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
válasz Sk8erPeter #3312 üzenetére
OOP, MVC, és a jó dokumentáció a lelke mindennek. Szvsz...
[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
fordfairlane
veterán
válasz Sk8erPeter #3314 üzenetére
Nem tudom, érdemes-e az MVC elméleti részét boncolgatni első programnál. Mi a probléma a programoddal? Ha strukturálatalnul is működik jól, és kezelhetőek a hibák, módosítások, akkor fölösleges sokat agyalni magán a struktúrán. A struktúra szerkezete akkor kezd érdekessé válni, amikor enélkül már átláthatatlan az egész program.
x gon' give it to ya
-
1ed
csendes tag
válasz Sk8erPeter #3314 üzenetére
Szia!
Az első két fejezet szerintem elég jól leírja mi az MVC, illetve milyen egyéb fogalmak vannak amik egy kertrendszer esetén szóba jönnek. Vannak példák is, bár van olyan rész ami már symfony specifikus. [symfony-book]
Esetleg érdemes lehet elolvasni, de komoly MVC keretrendszer használatát (mint pl a symfony) csak akkor javaslom ha van egy biztos OOP-s PHP, adatbázis, programtervezési tudásod, illetve a project nagysága indokolttá teszi.[ Szerkesztve ]
''He told me that no one should look for the answer unless they have to because once you see it, everything changes. Your life and the world you live in will never be the same. It's as if you wake up one morning and the sky is falling.''
-
válasz Sk8erPeter #3317 üzenetére
Jade NE csak a session változót állítsd be, hanem azt is, hogy irányítson IS át ugyanoda, mert ez utóbbi nélkül télleg nem lehet sehova se rakni az unset()-et.
Inkább leírom az egészet, nemtom eddig miért nem csináltam:session_start();
if($_SESSION['siker']) {
// tehát ez AKKOR fut le, ha már felvetted
// a cuccokat az adatbázisba, és az átirányítás
// miatt POSTmentes lett a lekérés, F5-re nem
// küld újra semmit.
// SIKER KIÍRÁSA
$_SESSION['siker'] = false;
// unset is lehetne, de tökmindegy... :)
} elseif( JÓK AZ ELKÜLDÖTT ADATOK ) {
// FELDOLGOZÁS
$_SESSION['siker'] = true;
header('Location', $_SESSION['PHP_SELF']);
// nem fut tovább ugyebár, hanem elölről kezdődik,
// de már NINCS POST...
} else {
// SIKERTELEN, HIBÁS, HIBAÜZENETEK, STB
}[ Szerkesztve ]
A RIOS rendkívül felhasználóbarát, csak megválogatja a barátait.
-
fordfairlane
veterán
válasz Sk8erPeter #3317 üzenetére
Ez a része működik, átlátható, de F5-ös frissítésnél a legtöbb böngésző (Opera 9.64 pl. NEM) megkérdezi, ismét el szeretnénk-e küldeni a POST adatokat. És az elég gáz, ha még egyszer feltölti az adatbázist ugyanazokkal az adatokkal. Ezért is ajánlotta lezso6 a SESSION-ös trükköt. De az gond, hogy nem unsettelem sehol ezt a SESSION-be eltárolt értéket, pedig azt kéne, csak nem tudom, hol.
Nem biztos, hogy teljesen átlátom a dolgot, de ha jól értem, itt egy egyszerű képfeltöltésről van szó, járulékos adatokkal, és az bonyolítja meg a helyzetet, hogy előnézeti képet is akarsz a felhasználónak produkálni. Én ezt úgy szoktam megoldani, hogy feltöltésnél létrehozok egy átmeneti adatbázis rekordot, amit véglegesítek, ha minden jó, és a felhasználó is leokézza. Ha Mégsem-et nyom,akkor törlök mindent. Másik megoldás, hogy jóváhagyásig sessionben tárolod az adatokat. Ennek tkp. nincs sok köze ahhoz, hogy hogyan strukturálod a kódodat, ez technikai kérdés. POST után ha az adatokat feldogozod, csinálni kell egy átirányítást.
[ Szerkesztve ]
x gon' give it to ya
-
dany27
őstag
válasz Sk8erPeter #3328 üzenetére
ohh ezer bocs már megint nem használtam a keresőt.....
Ezek szerint a az agyhullám az csak parasztvakitás!
Akkor marad a php 24 óra alatt!
Vagy más ajánlat?
Kössz![ Szerkesztve ]
-
dany27
őstag
válasz Sk8erPeter #3330 üzenetére
Háth igen arra biztos hogy figyelni kell hogy az ember nehogy régebbi verziójut vegyen....
De akkor a PHP Fekete könyv az kiesik.. Mert az szentem nem PHP5-s mivel az még valamikor 2002be jelent meg! A PHP felsőfokon az még jó lehet csak ott ugyebár az írja hogy konkrét problémákat old meg. Ez tárgyalja PHP különböző parancsait vagy csak konkrét poblémákat olda meg? Mert én még nem vagyok tisztába a PHP parancsai nagy részével csak rendelkezem egy kis programozói gyakorlattal más nyelvekből!Ezért gondoltam a PHP5 24 óra alattra mert abban amint láttam azért leírja h melyik parancs mire jó!
De ha a másikban is benne van és az jobb akkor azt veszem !
-
dany27
őstag
válasz Sk8erPeter #3332 üzenetére
A PHP5 24 óra az megvan csak gépen scannelve és gépen nem szeretek olvasni! Meg elég homályos de elég jól magyaráz!
Igazából eddig a PHP.net-ről szedtem csak tudod ilyen webes nyelvet nem ismerek még egyet sem így nem tudom hogy mik a lehetőségek a nyelvben!
Mivel suliba is most kezdtük a PHP-t meg már régóta kacérkodtam vele így nekiállok magamtól mivel suliba nem haladunk színte semmit.
Haver meg én meg eldolgozgatunk a magunk gyorsabb tempojába azt a tanár már nem is szól érte ha nem azt csináljuk amit a többiek mert leszűri abból amit csinálunk h mi gyorsabban haladunk.Mivel ugye az alap programozási tudás adott pascal meg Basic után így nem nehéz haladni ha ismerjük a szintakszisát! Csak ugye ez webes dolog így ebben vannak olyan adottságok amik csak webes nyelvekre jellemzőek!
Ezért kellene egy olyan könyv ami jól tárgyalja a különböző funkciókat! Szóval nem azt kell el magyarázni hogy mi a for ciklus meg milyen a hátul tesztelős ciklus meg mi az a switch és társai ezeket tudom mivel van más nyelvben is csak max másképp egy kicsit!Jah és SQL-el sem vagyok haragban ebből is van egy kis ismeretem...
[ Szerkesztve ]
-
dany27
őstag
válasz Sk8erPeter #3335 üzenetére
Azt hittem hogy ez itt nem kérdés hogy HTML megy-e!
CSS-t annyira nem vágom, de a HTML-ből elég jó szinten vagyok!PHP-s könyvet szeretnél kivenni ? Ha kell a PHP5 24 óra akkor dobj egy privit megdumáljuk (Gépen megvan)
Új hozzászólás Aktív témák
- Rövid teaser trailert kapott a Dragon Age: Dreadwolf
- Fotók, videók mobillal
- Kertészet, mezőgazdaság topik
- 3 évig még biztosan nem rendelhetünk Xiaomi EV-t
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- Vírusirtó topic
- Rossz üzlet az EV-kölcsönzés
- MIUI / HyperOS topik
- A személyre szabott reklám lehet a streaming következő slágere
- További aktív témák...
- LG NanoCell 55NANO766QA Halvány píxel csík
- Philips 58PUS8545/12 1 ÉV GARANCIA Játék üzemmód
- Tyű-ha! HP EliteBook 850 G7 Fémházas Szuper Strapabíró Laptop 15,6" -65% i7-10610U 32/512 FHD HUN
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- The Last of Us Part I Ps5