- Hamarosan megkezdődik a nubia 2,8K-s táblagépének szállítása
- Barátokká váltak az eddig rivális AI-óriások
- ASUS blog: Ideális olcsó utazós gép lett az új Vivobook S14
- Az Aura Displays hordozható monitorhármasa jól felturbózhatja a produktivitást
- Dual Mode-os IPS monitorral adott magáról életjelet a Gigabyte
Új hozzászólás Aktív témák
-
trisztan94
őstag
válasz
fordfairlane #10399 üzenetére
És kajak ennyi hibája volt csak
Köszi szépen! Na mostmár csak azt kéne megoldani, hogy ne random 500. karakternél vágja szét, hanem az 500. karakterben, ha van akkor a szó után..
Nagyon tanulófázisban vagyok mind php, mint js/jquery terén, egyedül sok minden még nem megy
-
fordfairlane
veterán
válasz
trisztan94 #10397 üzenetére
Öhm, miért is akarsz te PHP-ban programozni?
Hát mondjuk
$dir = "../php/biralas_tortenetek/";
...
if ($handle = opendir($dir)) {
...
$filecontent = file_get_contents($dir . $file); -
trisztan94
őstag
válasz
fordfairlane #10396 üzenetére
azt hogy lehetne megcsinálni akkor?
-
trisztan94
őstag
válasz
fordfairlane #10396 üzenetére
azt hogy lehetne megcsinálni akkor?
-
fordfairlane
veterán
válasz
trisztan94 #10389 üzenetére
na most ebből annyit tudtam értelmezni, hogy a filet megnyitja, a többit nem :S
A könyvtár tartalmát kilistázza, de a file(ok) tartalmát beolvasni már nem tudja. Ha jól látom azért, mert a file_get_contents nem kapja meg azt az elérési utat, amit az opendirnél megadtál, csak a fájl nevét.
-
trisztan94
őstag
válasz
Peter Kiss #10394 üzenetére
Nem próbáltam még, meglesem
-
Peter Kiss
őstag
válasz
trisztan94 #10390 üzenetére
Netbeans?
-
Soak
veterán
válasz
trisztan94 #10392 üzenetére
Ha a DW-vel elakadsz akkor abban tudok, segíteni, de azt mér inkább pü-ben
-
Soak
veterán
válasz
trisztan94 #10390 üzenetére
Hát az szívás valóban. DW-ből érdemes leszedni még a triált, bár az nem 60dolcsis progi, szóval azt nem éri meg csak úgy venni ha nem termelésre van, esetleg 30nap alatt tanulgathatsz rajta, bár néha kicsit trükkösen mutatja, hogy mi a baja, de legalább mindig mutatja.
-
trisztan94
őstag
-
trisztan94
őstag
válasz
fordfairlane #10388 üzenetére
na, var dumpoltam mindent és echo.
handle:
resource(2) of type (stream) Resource id #2
file:
string(1) "." .string(2) ".." ..string(17) "Vendég201273.txt" Vendég201273.txt
filecontent:
string(0) "" bool(false)
lenght:
int(0) 0int(0) 0
dataarray:
array(1) { [0]=> array(2) { [0]=> bool(false) [1]=> bool(false) } } Arrayarray(2) { [0]=> array(2) { [0]=> bool(false) [1]=> bool(false) } [1]=> array(2) { [0]=> bool(false) [1]=> bool(false) } } Array
na most ebből annyit tudtam értelmezni, hogy a filet megnyitja, a többit nem :S
-
fordfairlane
veterán
válasz
trisztan94 #10386 üzenetére
$dataArray[] = array(); - ez egy üres tömbelemet rak a tömbbe. Nem értem, mi szükség van rá.
$dataArray = array(); - ez inicializálja a tömböt, amibe gyűjteni kezded a fájlinformációkat. Persze, hogy lehet használni az if-en belül, ha az if előtt van inicializálva.
Debuggolás nélkül nem lehet hibát keresni. Menet közben írass ki változókat, hogy lásd, mi van bennük, (print_r, var_dump, echo). Lehet, hogy a fájlmegnyitás sem sikerül már, a fene tudja ennyiből.
-
Soak
veterán
válasz
trisztan94 #10384 üzenetére
Nem vagyok még egy php mágus, de azért már a MySQL ismeret szokott limitálni, arra szoktam leginkább keresni, mert a php-t szinte bármit összerakok. Ennek a legfőbb oka, hogy ha összerakok valamit akkor szépen megnézem a hibát amit a php dob, mert általában elég egyértelmű. Ha kijavítom és dob még egyet akkor tovább. A végén mindig működni fog. Sokkal lassabb mintha elsőre összejönne (azért mostmár megesik néha
) viszont működik. Ajánlom, hogy 1. Mivel foglalkozol vele elég aktívan szerezz be egy olyan programot ami az alapvető hibákat kiszűri ( { hiánya, vagy nem zársz le egy sort) , én ugyan Windowson dolgozok, de sok mac-es ismerősöm a TextMate-t ajánlotta, de pl nekem a Dreamweaver csodás 2. Kapcsold be a php hiba megjelenítését és figyelj rá.
-
trisztan94
őstag
válasz
fordfairlane #10385 üzenetére
hm, így sem működik, hiába tettem az if elé :/
lehet, hogy az a baj, hogy a txtfájlok így néznek ki?
név = Vendég201273.txt (felh + év + hó + nap)
maga a fájl meg így:<br/>
<article>
<header>Teszt Történet 2
</header>
<p>\"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut
</p>
<footer>Beküldte: Vendég
</footer>
</article>
<hr/>Szóval formázva van.
Ha a $dataArray[] = array(...);-ot if elé teszem, akkor nem kapnak értéket a dolgok benne nem? Értem ez alatt a $filecontent-et és a $lenght-et
-
fordfairlane
veterán
válasz
trisztan94 #10384 üzenetére
$dataArray[] = array(); rossz helyen van, legyen az if előtt, ráadásul szerintem ez $dataArray = array(); akar lenni. Mármint az opendir előtt...
-
trisztan94
őstag
Elvtársak!
Lenne egy történetfeltöltésem, ami txt filekba menti az anyagot, ami a biralas_tortenetek könyvtárban van. Na, ezt szeretém most kilistázni, de úgy, hogy csak az első 200 karakter látszódjon és legyen egy gomb amivel meglehet nézni az egészet. Egyik angliai ismerősömtől kaptam erre egy kódot, de sehogy sem tudom beüzemelni:
<?php
$dataArray = array();
//Number of chars for the string
$num = 200;
//Check if DIR exists
if ($handle = opendir('../php/biralas_tortenetek/')) {
//Loop over the directory
while (false !== ($file = readdir($handle))) {
//Strip out the . and .. files
if ($file != "." && $entry != "..") {
$dataArray[] = array();
//Store file contents
$filecontent = file_get_contents($file);
//Split the content and store in array
$length = strlen($filecontent);
$dataArray[] = array(substr($filecontent, 0, $num), substr($filecontent, $num, $length ));
}
}
//close the dir
closedir($handle);
}
?>
<?php foreach($dataArray as $data) { ?>
<div class="visible">
<?php echo $data[0]; ?>
</div>
<div class="hidden">
<?php echo $data[1]; ?>
</div>
<?php } ?>Mi a baj?
Bocsi, hogy napi 8x itt kérdezgetek, rendesek vagytok, hogy segítetek
-
Soak
veterán
Megint szopattam magamat 1,5órát, aztán neki álltam alapoktól újra írni egy pár funtcion kódot és eszembe jutott, hiszen pont egy hasonló kódot beszéltünk a php topikban ami ezt megoldhatja. Első probára hibátlanul lefutott, igaz, hogy jó pár módosítással, de logikailag szinte ugyanez a probléma. Lassan rászokom, hogy gondolkozom cselekvés elött.
-
Sk8erPeter
nagyúr
Ja hogy így flat tárolás, így már minden világos, elsőre másra gondoltam.
Az utána következő "programozás alapjai órát" nem tudom, nem inkább mobalnak szántad-e...
Én annyira kérdeztem rá fordfairlane-től, hogy magával az elképzeléssel mi a baj, hogy a nézetben kapsz egy egymásba ágyazott listát, nem arra, hogy az mire jó és hogyan kell bejárni.(Mondjuk én is értékelem a lelkesedést.
)
(#10363) fordfairlane :
ja OK, szóval ezek szerint az a probléma vele, hogy nem feltétlenül tudod, milyen komplexitású mondjuk egy egymásba ágyazott lista, és bizonyos feltételek döntik el, mi szerint kellene bejárni, milyen mélységig, stb., és ezek a komplex döntések meg pont, hogy nem a view-ban kellene, hogy megszülessenek. Így már teljesen világos. -
fordfairlane
veterán
Ha a modellen kívül csak dátumformátumban van szükséged erre az információra, akkor célszerű a modellben átalakítani a timestampet, akár egyből az sql lekérdezésben. A Controller gyakorlatilag csak a vezérlési szerkezetet tartalmazza, "összeköti" a modellt a nézettel. Minél vékonyabb, annál jobb.
-
fordfairlane
veterán
válasz
trisztan94 #10375 üzenetére
$fh előtti sor nincs lezárva ;-vel. Editor syntax highlighttal ajánlott.
-
PazsitZ
addikt
válasz
trisztan94 #10375 üzenetére
$fh = fopen($dir . $felh . $datum['year'] . $datum['mon'] . $datum['mday'] . '.txt','w');
A tömb string indexeivel van baj.
-
trisztan94
őstag
válasz
Peter Kiss #10376 üzenetére
Igazából leírás szerint csináltam a dátum részét, amit láttam aszerint így kell. Hol látsz hibát?
T
-
Peter Kiss
őstag
válasz
trisztan94 #10375 üzenetére
$datum indexelése biztosan rossz.
-
trisztan94
őstag
Sziasztok! Történetfeltöltőrendszert fejlesztek, fájlokat hozna létre. itt a PHP-m:
<?php
session_start();
if (!isset($_SESSION['guest']))
{
$felh = $_SESSION['user'];
}
else if (isset($_SESSION['guest']))
{
$felh = "Vendég";
}
$cim = $_POST['cim'];
$torzs = $_POST['torzs'];
$datum = getdate();
$dir = '../php/biralas_tortenetek/';
$dots = "..."
$fh = fopen($dir . $felh . $datum[year] . $datum[mon] . $datum[mday] . '.txt','w');A $fh sor az a 17. sor.
Ilyet dob ki nekem:Parse error: syntax error, unexpected T_VARIABLE in /data/e/r/eroticplaza.hu/web/php/upload_story_exec.php on line 17
Sehogy sem tudok rájönni mi a baja
Köszi!
-
Peter Kiss
őstag
Az MVC-ben gyakorlatilag a Controller mindig a legvékonyabb elem.
Egyébként a dátumos mizériának az egyetlen használható feloldása szerintem, ha használjuk a PHP DateTime osztályát, esetleg ezt felhasználva írunk egy használhatóbbat. Mikor fetcheljük az adatokat, már akkor érdemes egy ilyen objektumpéldányt létrehozni az egyes dátumoknak, és utána könnyű dolgunk lesz velük, bárhol is akarjuk mókolni.
-
-
Lényegében unix timestamp -ként tárolom a dátumot. Ez azért jó mert így ugye úgy konvertálom ahogy akarom. A nézetnek egy tömböt adok át, és az egyik ilyen tömb tartalmazza a felhasználó adatait, a regisztrálás dátumával. Kiszedem az adatbázisból a kellő adatokat - tömbként és azon belül kéne még "elő" konvertálni a megfelelő beállítás szerint.
Remélem érthető voltam
-
-
CSorBA
őstag
Ilyenkor olvasgatva titeket, mindig rájövök, hogy mennyi mindent kellene megtanulnom
-
válasz
fordfairlane #10363 üzenetére
Pont ezt akarom elkerülni, hogy a nézet bármit is csináljon. Nem akarom, hogy egy szemetet kapjak vissza valami előre nem várható ok folytán.
-
válasz
Sk8erPeter #10355 üzenetére
Megoldottam. Előbb feldolgoztam az adatot, majd átadtam a nézetnek. Bár egy foreach -csel több, még mindig egyszerűbb megoldásnak találtam.
-
cucka
addikt
válasz
Sk8erPeter #10362 üzenetére
A "Flat" tárolás az azt jelenti, hogy az adatstruktúra egy vektor - köznapi nevén egy 1 dimenziós tömb. Lehet bármilyen bonyolult adatstruktúrád, ha elég mélyre ásol, akkor előbb-utóbb megtalálod azt a pontot, ahol 1 dimenziós adattárolási struktúra lesz belőle, mivel a számítógép memóriája és a diszk is ilyen "flat" adatstruktúra. A legegyszerűbb példa a láncolt lista (egy nem feltétlenül vektor adatsturkúra), amit programozás órán implementáltatok úgy, hogy az adatok a memóriában vannak (ami ugye egy vektor)
Egymásba ágyazott listákkal kétféleképpen lehet bánni:
- amikor pontosan ismered az adatstruktúrát és az egymásba ágyazás szintjét. Ilyenkor érdemes dupla (tripla) ciklussal bejárni az egészet a view részben. Például ki szeretnéd írni az összes júzer nevét és alá az összes hozzászólásukat - ez egy 2 szintes adatstruktúra, dupla for ciklus.
- tetszőleges mélységű a struktúra: ilyenkor érdemes úgy megírni a bejáró eljárásodat, hogy az meg tudjon hívni egy függvényt minden egyes elemre: kiírás esetén a függvényt a view-ban definiálod és kiírja az adott elemet. Ezt az elgondolást lehet használni például fa adatszerkezetekre. -
fordfairlane
veterán
válasz
Sk8erPeter #10362 üzenetére
Maga a relációs tárolás a flat adatszerkezet.
Mi a baj azzal, ha egymásba ágyazott listát kapsz a nézetben?
Az a baj, hogy a nézetnek kell rekurzívan kiszedni a node-okat, és adott esetben komplex döntéseket hozni, hogy hogyan jelenítse meg őket.
-
Sk8erPeter
nagyúr
válasz
fordfairlane #10361 üzenetére
És mit tárolsz "flat" módon relációs táblában? Még nem jön át.
Mi a baj azzal, ha egymásba ágyazott listát kapsz a nézetben? -
fordfairlane
veterán
válasz
Sk8erPeter #10360 üzenetére
Relációs táblában. És persze, hogy a nézetben ne kelljen komplex funkciót implementálni (rekurzió), ezért a nézet sem egymásba ágyazva kapja az objektumlistát.
-
Sk8erPeter
nagyúr
válasz
fordfairlane #10359 üzenetére
"flat módon tárolva, flat módon átadva a nézetnek"
Mit értesz "flat" mód alatt? -
Sk8erPeter
nagyúr
Előttem cucka leírta a megoldást, de tovább fejtegetve a dolog egymásba ágyazott ciklusokkal könnyen megoldható. Gondolj bele, hogy van egy tömböd, amikor azon végigmész egy foreach-csel, ekkor ennek a tömbnek az elemei szintén tömbök lesznek, amin szintén végigmehetsz egy foreach-csel. Most ez kétdimenziós tömb volt, de a komplexitás tetszőlegesen fokozható.
Teccikéjteni? -
válasz
Sk8erPeter #10355 üzenetére
Adatbázisból kiveszem az adatokat ugye, és egy tömbben tárolom az összes dolgot amit a nézetnek a végén "bindelek", majd kinyomom a kimenetre. Na most a tömbben vannak tömbök. És lövésem sincsen, hogyan tudnék végigrohanni rajtuk és konvertálni.
mobal,
-
Sk8erPeter
nagyúr
Tulajdonképpen megközelítés kérdése, hogy belefér-e, lehet, hogy szebb lenne úgy, hogy a View-ban ténylegesen mindent csak szimplán kiíratsz, amilyen adatot kapsz, szóval lehet, hogy ez most kényszermegoldás.
De melyik rész nem sikerült, hogy a korábbi állapotába kotorj bele, ne a megjelenítésben kelljen machinálni? -
válasz
Sk8erPeter #10353 üzenetére
Köszi!
Végül így csináltam. Ha azt mondod, hogy belefér akkor ok. Így egyszerű is volt, mert az oldal beállításait az elején kigyűjtöm egy tömbbe, és ott tárolom az idő + dátum formátumot is.
mobal,
-
Sk8erPeter
nagyúr
Ez speciel szerintem még beleférne, hogy a nézetnél konvertáld, mert végül is csak azt határozod meg, hogy más formátumban szeretnéd megjeleníteni. Gondolom a megjelenítéshez amúgy is végigmész a tömbön, és amikor kiíratod, oda pakolhatnád ezt. De ha már korábban szeretnéd konvertálni, akkor már eleve a query-t úgy kéne megírni, vagy rögtön a lekérés után konvertálni, amikor végigszaladsz az eredményhalmazon, és berakod mondjuk egy tömbbe őket (ha végigszaladsz). Nem ismerem a rendszeredet, úgyhogy ennyi infóból nehéz lesz megmondani, hogy hol csináld mindezt.
-
válasz
Sk8erPeter #10349 üzenetére
Igen. Ezt tudom. De van egy tömböm amibe tárolom a felhasználók adatait. És kiíratáskor, nem a nézetemben akarom átkonvertálni. Valahogy foreach -csel végig kéne rajta rohanni?
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #10350 üzenetére
Ez így jónak meg elegánsnak tűnik. Került bele egy typo: $val után $var (csak ha valaki elsőre nem venné észre, azért jelzem).
-
Tele von Zsinór
őstag
array_filter valahogy így (nem teszteltem):
$ezekbenvan = array_filter($input, function ($val) {
return false !== strpos($var, "eztkeresem");
}); -
Heló!
Olyan problémám van, hogy egy tömbben vannak tömbök. Azok egyik értéke egy szám, amit szeretnék konvertálni dátummá. Hogy tudnám megoldani?
mobal,
-
biker
nagyúr
válasz
Sk8erPeter #10346 üzenetére
Köszi!
maradok akkor ezeknél, azt hittem, csak nem találom -
Sk8erPeter
nagyúr
Szerintem ennél nagyon nem fogsz találni "elegánsabbat", legalábbis nem tudok ilyen optimalizált, beépített függvényről.
Itt is van még egy megoldás regexpekkel, de ez sem elegánsabb semmivel. -
biker
nagyúr
válasz
fordfairlane #10344 üzenetére
elegánsabbat keresek, kicsit több érték van, mint a minta
-
biker
nagyúr
tömbben sub-string keresés a célom.
pl
0=>'ez a szöveg van benne'
1=>'ez a szöveg nincs benne'és meg szeretném nézni, hogy a tömbben benne van-e a van szó
de az in_array és az array_search csak akkor ad találatot, ha az egész érték egyezik
hogy egy érték egy részére keresni? -
cucka
addikt
Félreértettél, nem azért írtam ilyen sokat, hogy leszóljalak, hanem hogy meg is magyarázzam, hogy az általam írt megoldás miért jobb, mit a tied.
Általában akkor szoktam ide írni, amikor úgy érzem, a válaszomból a másik fél tanulhat is valamit. Ha csak simán meg kell oldani/le kell kódolni egy feladatot, azt úgy hívom, hogy munkahely. -
CSorBA
őstag
válasz
fordfairlane #10339 üzenetére
Remek! Köszönöm
-
CSorBA
őstag
Villámkérdés, php-ban nincs beépített funkció arra, hogy eldöntsük egy számról, h. prímszám-e ?
-
Soak
veterán
Újra elmondom : Tudom ,hogy szar volt, tudom, hogy sokkal jobban meg lehet csinálni, de a designt kellett csinálni mert szórít a határidő és addig amíg folyik annak a gyártása addig arra jó volt, hogy szórakozzon vele, hogy mikor hogy néz ki a design.
Amit írtál viszont tökéletesen működik, és már 10 eventnél is érezhetően gyorsabb, ezt akartam alapból is csinálni, csak nehezen megy, ha az ember 1hónapja se foglalkozik php-vel és mysql-el . Köszönöm szépen a segítséget, megyek és pihenésképpen felfogom, hogy miért működik ami kódot adtál .
-
cucka
addikt
Kimaradt: amikor hasonló helyzeteket kell megoldani, érdemes arra gondolni, hogy az adatbázis-műveleteknél a legköltségesebb művelet az, amikor az adatok átkerülnek az adatbázis-szerverről a php-be. Ezért minden esetben arra kell törekedni, hogy csak azokat a sorokat/oszlopokat kérjük le az adatbázistól, amelyekre valóban szükségünk van. Nagyságrendekkel gyorsabb, ha az eredmények listáját leszűri az adatbázis szerver, mint ha elkérnénk tőle az összes sort és php-val szűrnénk ki a fölöslegeseket.
-
cucka
addikt
Egy ilyen sql-el érdemes elindulni:
select events.* from events where users_id in (select friend_id from relations where users_id={$user_id}) order by dateofcreation ascAz in()-ben található lekérdezés kiszedi a $user_id-hez tartozó barátok azonosítóját (ide php-ban be kell helyettesíteni a $user_id változót. A külső lekérdezés meg egyszerűen listázza az events táblát, leszűrve a megfelelő felhasználói azonosítók szerint. Ha a barát adataira is szükség van, akkor bejoin-olod a users táblát is és kész.
A te php-s megoldásod annyi soron megy végig, amennyi a userek és a relációk számának szorzata, tehát az algoritmusod négyzetes.
Ebben az sql-es megoldásban a belső lekérdezés csak egyszer fut le és az index miatt logn időben végez, a külső lekérdezés pedig végigfut az összes soron, de egy index létrehozásával ezt szintén meg tudja oldani logn időben.
Gondolatkísérlet: tegyük fel, hogy nő az oldalad látogatottsága. Tegyük fel, hogy az eredetihez képest tízszer annyi felhasználó van, ami mondjuk húszszor annyi relációt jelent. Ez esetben:
- az én lekérdezésem nagyjából ugyanannyi idő alatt végez a kereséssel, mint előtte
- a te php-s megoldásod 200-szor () annyi műveletet fog végezni, mint előtte
-
Soak
veterán
Köszönöm a segítségeteket, de nem tudom ,hogy olvastátok-e amit írtam, hogy tisztában vagyok vele, hogy nem jó, jobban mondva nem hatékony a kód, le is írtam, hogy ugyanígy gondolom ahogy mondjátok csak nem tudom megírni hozzá a kódot. Ebben kértem segítséget az első hsz-ben is.
-
cucka
addikt
Már írták a tárolt eljárást, de szerintem a függvényed által szállított végeredményt egy normálisan összerakott sql lekérdezés is vissza tudná adni. Egy join (főleg, ha még index is van hozzá) összehasonlíthatatlanul gyorsabb és jobb megoldás, mint ha ugyanezt php-ban bohóckodod össze.
-
Peter Kiss
őstag
Most 2 query-t intézel az adatbázis felé, az egyik egy nagy halom felesleges rekordot is visszaad, míg a másik (find_all_friends) jó eséllyel felesleges oszlopokat is lekérdez.
A megoldást egy tárolt eljárás jelentené, ami paraméterben megkapja a $_SESSION['user_id']-t, majd visszaadja csak azt, amit kell. A logikát már leírtad, SQL-ben sem lesz nehéz megfogalmazni, mit is szeretnél. Ha ezt így összehozod, akkor egyetlen felesleges műveletet sem fogsz végezni.
-
Soak
veterán
válasz
Peter Kiss #10325 üzenetére
Nem értem mire gondolsz, de szívesen látnék valami kódot róla. A find_all funkciót megkeresesi sql paranccsal az eventeket és időrendbe tolja ki magából, majd onnantól php elrendezi. Ha elolvasod elötte írtam, hogy nekem sem tetszik, de ennél jobban nem tudtam jelenleg megoldani.
zzolika : Senki nem mondta ezt, én a kódot is bekartam neked és megprobáltam átadni annyit ,hogy le tudd futtatni. Legközelebb majd inkább ráhagyom másra
Sk8erPeter : Igazad van.
-
zzolika
aktív tag
Ennyit még tudok, hogy a php kódot a szerver hajtja végre, és csak az eredményt adja vissza a kliensnek.
Egy egyszerû kérdést tettem fel, hogy hogyan lehet meghívni egy gomb megnyomására egy PHP függvényt. Bocs hogy nem tudom magamtól, ezért kérdeztem. A topic címe nem az hogy PHP csak profiknak... -
trisztan94
őstag
Sziasztok!
400 kép van jelenleg a szerveren, szeretnék a lenti kódból egy lapozós rendszert, mondjuk 12 képpel egy lapon. Én array-ra gondoltam, és a ciklusban megnézni, hogy ha kisebb a $darab (ami első lapon 0 és laponként 12-vel növekszik amíg nem éri el a mappa méretét) a valaminél akkor +1 gomb. Szerintem nagyon túlbonyolítom, valami ötlet, hogy egyszerűen hogy lehetne?
$imgdir = '../img/blog/img/amator/'; //Pick your folder
$allowed_types = array('png','jpg','jpeg','gif'); //Allowed types of files
$dimg = opendir($imgdir);//Open directory
while($imgfile = readdir($dimg))
{
if( in_array(strtolower(substr($imgfile,-3)),$allowed_types) OR
in_array(strtolower(substr($imgfile,-4)),$allowed_types) )
/*If the file is an image add it to the array*/
{$a_img[] = $imgfile;}
}
$totimg = count($a_img); //The total count of all the images
//Echo out the images and their paths incased in an li.
for($x=0; $x < $totimg; $x++){echo "<a onclick='Lightbox.start(this, false, false, false, false); return false;' rel='lightbox[portrek]' href='" . $imgdir . $a_img[$x] . "'><img class='kep_listaz' width='200px' height='160px' src='" . $imgdir . $a_img[$x] . "' /></a>";}Köszi szépen!
T
-
Sk8erPeter
nagyúr
Nem kell túlbonyolítani, de ha már tanítasz, ne hülyeségeket verj a diákod fejébe...
Ezt írtad:
"Ezzel eléred azt, hogy ugymond a te gépeden egy könyvtár ki lesz nevezve servernek"
ez nem igaz, és félre is vezeti, ezért ezt is írhattad volna:
"A WAMP telepítése után lesz egy c:\wamp\www könyvtárad, amibe pakolhatod a http://localhost címen elérhető weboldalad tartalmát, és már tesztelheted is."
Nincs túlbonyolítva. -
Soak
veterán
válasz
Sk8erPeter #10322 üzenetére
Feleslegesen minek tul bonyolitani? Ha azzal sem volt tisztaba, hogy a php szerver oldali nyelv akkor ezzel elorebb lettunk volna? Meg tudtam volna ilyen szepen fogalmazni de egy 3. Asnak nem adsz le egyetemi anyagot. Az alapveto dolgokkal igy tisztaban lehet, mivel valoszinuleg nem phpban akar programozni a hozza allas alapjan csak egyszeri dolog volt.
-
Sk8erPeter
nagyúr
Bocs, de muszáj megint pontosítanom, nem kötekedésből, csak hogy ne vezessen félre senkit. Ne vedd rossz néven, én sem szoktam, ha korrigálnak, sőt, ha jó a korrekció, annak örülök is.
"Magyarul, ha te a böngésző elött ülsz és megnézed a forráskódot akkor csak html lesz
benne."
Nem feltétlenül HTML, ha más content type-ra vonatkozó headert küldött ki a szerver, és nem HTML-tartalmat rakott össze."Ezzel eléred azt, hogy ugymond a te gépeden egy könyvtár ki lesz nevezve servernek"
Könyvtár nem lehet kinevezve szervernek.
A WAMP mozaikszóban benne van az Apache is, na az a szerver (webszerver). Az Apache-hoz tartozó különböző hostokhoz pedig különböző gyökérkönyvtárak tartozhatnak, mindez csupán beállítás kérdése. Az alapértelmezett, localhosthoz tartozó gyökérkönyvtárat is könnyen át lehet állítani az Apache megfelelő konfigurációs fájljában. De ugyanezt a gyökérkönyvtárat tetszőleges számú másik (virtual)hosthoz beállíthatod. -
Sk8erPeter
nagyúr
"az action="" azt jelenti, hogy a form hol keresi a függvényt"
Nem, az azt jelenti, hogy megadod, HOVA, melyik feldolgozó fájlba küldöd el a form adatait. Nem keres semmilyen függvényt, és ennek önmagában még a PHP-hoz sincs köze. A megadott metódusoknak a HTTP-protokollhoz van köze, meg a böngészők működési mechanizmusához. Az action attribútumban megadott feldolgozó fájl akár nyugodtan lehetne ASP.NET fájl is."valamint fontos a name is mert a $_POST onnan tudja, hogy most ő van porondon."
A $_POST nem tud semmit. Az csak egy tömb, a kapott adatokkal. A name attribútum valóban kell, mert szerveroldalon csak így kapod meg a bevitt adatokat. -
Soak
veterán
Az éjjel megálmodtam. Elválik majd, hogy mennyira bírja a szerver.
public static function show_all_relevant_event(){
$friends = Relation::find_all_friends($_SESSION['user_id']);
$events = self::find_all();
foreach($events as $event){
$author_id = $event->users_id;
foreach($friends as $friend){
$friend_id = $friend->friend_id;
if($friend_id == $author_id){
$filename = $event->photograph_filename;
$username = $event->users_username;
$datetime = strtotime($event->dateofcreation);
$mysqldate = date("F j, G:i ", $datetime);
echo "itt van a kontent";
}
}
}
}A find_all functio már alaprból csökkenő sorrendbe adja az eventeket.
-
fordfairlane
veterán
válasz
zzolika #10316 üzenetére
Ha annyi a követelmény, hogy ugyanazon az oldalon maradj, akkor ezt viszonylag egyszerű megoldani.
Nagyon leegyszerűsítve, a végrehajtási szál, egyetlen formra, egy fájlba téve a submit kezelését és a formot:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$eredmeny = szamol($_POST['operandus1'], $_POST['operandus2']);
echo $eredmeny;
}
?>
<form action="" method="post">
<input type="text" name="operandus1" />
<input type="text" name="operandus2" />
<input type="submit" value="Számolj" />
</form>Ebbe persze még valahova bele kell rakni a "szamol()" függvény implementációját.
-
Soak
veterán
válasz
zzolika #10316 üzenetére
Rosszul érted.
Egy egszerű ábra ahogy a php működik:
Magyarul, ha te a böngésző elött ülsz és megnézed a forráskódot akkor csak html lesz benne. Ha ugyanezt megnézed a szerveren akkor ott látni fogod a php kódot. Ennek az az okat, hogy a javascriptel ellentétben a php nem a user CPU-n dolgoztat, hanem a szerverén (eléggé leegyszerűsítve
) . Tehát ha a böngésző meghív egy oldalt az azt eredményezi, hogy a szerveren kiválasztott oldalt a szerver elöbb összerakja majd azután megmutatja. Ellentétben egy statikus html oldallal ahol a böngésző csak értelmezi a html kódot.
A lényege az, hogy ha nem szerveren fut a php és ugy akarod megnézni (akár böngészővel) akkor egyszerűen írás lessz belőle.
Ha windosos környezetben dologozol akkor tedd fel a WAMP-ot (feltesz még egy-két dolgot, de egyik sem haszontalan) . Ezzel eléred azt, hogy ugymond a te gépeden egy könyvtár ki lesz nevezve servernek, ahova berakod a php-s odaladat, böngészőve beirod, hogy localhost/etc/file.php és akkor már látni fogod.
U.i.: A form action="" nem az a lényeg, hogy átírányítson, hanem az, hogy postot csak egyszer küldjön, ne minden frissitésnél.
-
fordfairlane
veterán
válasz
zzolika #10316 üzenetére
Csakhogy te áttettél egy számítást szerveroldalra. Innentől kezdve a dolog nem függvényhívás, hanem adatok elküldése a szervernek, a szerver betölti a php értelmezőt, az végrehajtja a megfelelő php fájlt. Ebben a php fájlban meg kell vizsgálod a bejövő paramétereket, meg kell hívnod a megfelelő függvényt, össze kell állítanod a böngészőnek visszaküldendő adatokat.
Ez innentől egy elosztott rendszer, ahol nem létezik olyan, hogy sima függvényhívás. Innentől két külön gépen két külön folyamat van, ami között egy kezdetleges, request-response HTTP protokoll az egyetlen kommunikációs csatorna.
-
zzolika
aktív tag
Az oldalon van egy input form, sok mezõvel, és van két gomb, amit szeretnék ha megnyomásra két különbözõ PHP eljárást indítana el, de maradna ugyanebben a ablakban.
A gombnyomásra aktualizálja a form néhány mezõjét.
Ezért raktam a PHP eljárást ugyanabban az oldalba, hogy ne nyíljon meg új ablakban.
<form name="form_vegar" method="post" action="">
Tehát az action üres, ugyanitt kéne keresnie a meghívott függvényt is.
Ha üres az action, akkor mit indít el?
<input name="Submit" type="submit" value="Szamol" onClick="szamol()">
Mert így nem megy ha PHP függvény a szamol(), csak ha Javascript.szerk: Kezdem érteni. Tehát a gombra csak egy külsõ fileban megadott xxxx.php-t tudok elindítani, (mivel a php függvény igazából nem is létezik a kliens oldal számára, amíg a szerver ki nem számolta és el nem küldte, csak az eredményt kapja meg a kliens böngészõ) amit a szerver számol ki.
Tehát ezt a fügve'nyt mindenképpen külön file-ba kell tennem, hogy el tudjam indítani. Meg lehet oldani azt, hogy ugyanebben az ablakban maradjak, csak frissüljön a tartalma? -
Soak
veterán
válasz
fordfairlane #10314 üzenetére
Most esett le, hogy kicsit előrébb kellett volna kezdeni a magyarázást
-
fordfairlane
veterán
válasz
zzolika #10312 üzenetére
Tehát hiába rakom bele a PHP szubrutint az oldal kódjába, nem lehet ezt a PHP függvényt ugyanúgy meghívni, mint egy JavaScriptet?
Lényegében nem. Hiába raksz PHP kódrészletet egy fileba, az a kódrészlet a kliens számára láthatatlan marad, a kliens csak a PHP script kimenetét látja. Ha megnézed a html forrást a böngészőben, semmi jel nem utal arra, hogy szerveroldalon ezt mi és hogyan állította elő.
A böngésződnek arról nincs tudomása, hogy létezik-e szerveroldalon ilyen függvény, hiába rakod ugyanabba a fájlba a függvény implementációját, és a html kimenetet. A böngésző csupán fájlt tud "meghívni" (<form action="file.php">) különféle paraméterekkel. Azt már szerveroldalon kell megoldani, hogy a kapott paraméterek alapján a megfelelő függvény meghívódjon.
Tehát lényegében neked nem függvényt kell meghívnod, hanem kommunikálni kell tudnod a szerverrel.
-
Soak
veterán
válasz
zzolika #10312 üzenetére
Hogyne lehetne. Az oldaladon nincsen beléptető rendszer amit php-vel oldottál meg? Ugyanúgy meg tudod ezt is csinálni.
kb így :
<?php
if(isset($_POST['submit'])) {
ide rakod amit akarsz csináltatni
}form meg igy néz ki
<form action="upload.php" enctype="multipart/form-data" method="POST">
<input type="submit" name="submit" value="Upload" />
</form>Fontos, hogy az action="" azt jelenti, hogy a form hol keresi a függvényt, ha üres akkor az adott oldalon keresi . valamint fontos a name is mert a $_POST onnan tudja, hogy most ő van porondon.
-
zzolika
aktív tag
válasz
fordfairlane #10311 üzenetére
Form megvan, gomb megvan. Csak ha rákattintok nem indul el semmi.
Tehát hiába rakom bele a PHP szubrutint az oldal kódjába, nem lehet ezt a PHP függvényt ugyanúgy meghívni, mint egy JavaScriptet?
Akkor az alapkoncepció hibás, mert nem is tud így mûködni? De akkor hogy használjak PHP-t, ha nem is lehet elindítani? -
fordfairlane
veterán
válasz
zzolika #10310 üzenetére
Nézz meg egy php tutorialt, amiben leírják, hogy hogyan kell formokat kezelni PHP-ben. Én is írhatnék ilyet, de egyrészt lusta vagyok, másrészt a neten egy tonnányi leírás van ilyen témában.
Annyi a lényege, hogy csinálsz egy formot, egy vagy több beviteli mezővel, raksz bele submit gombot, majd szerveroldalon PHP-ben kezelni kell a submit actiont, ami meghívja a megfelelő PHP-s függvényedet.
A másik lehetőség, hogy az oldal újratöltődése nélkül aszinkron módon kliensoldali scriptből indítasz el submitet (AJAX), a szerveroldalon ennek nagyjából ugyanaz a kezelése, mint a sima form submitnek.
Ezt vagy neked kell megírnod, vagy megfelelő frameworköt kell használod. Magában a böngészőkben és a PHP-ben nem létezik olyan fajta automatizmus (RPC, DCOM, CORBA), ami megoldja helyetted, hogy kliensoldalról simán meghívj egy szerveroldalon implementált függvényt vagy metódust.
-
zzolika
aktív tag
válasz
fordfairlane #10308 üzenetére
Pontosabban hogy is?
kicseréltem submitra:
<input name="Submit" type="submit" value="Szamol" onClick="szamol()">
így sem csinál semmit. -
Soak
veterán
Sziasztok,
Írtam egy ilyet ;
<?php public static function show_all_relevant_feed(){
$friends = Relation::find_all_friends($_SESSION['user_id']);
foreach($friends as $friend){
$id = $friend->friend_id;
$events = self::find_event_by_users_id($id);
foreach($events as $event){
echo "<div class=\"roundDiv\" id=\"photo_flow\"><img name=\"feed_pic\" src=\"\" width=\"58\" height=\"44\"><span>$event->body<span></div>";
}
}
}
?>Faszán működik, csak ugye ez megkeresi a barátokat, aztán megvizsgálja az első barátot és kirakja dátum szerint rendezve az eventeket és megy a következő barátra. Én pedig azt szeretném, hogy a barátoktól függetlenül az eventeket listázza . Két dologra gondoltam, az egyik, hogy csak azt az eventet keresem meg amelyik users_id oszlopában valamelyik barát id-ja található.Ezzel két bajom van. Az egyik, hogy nem tudom megirni azt a MySQL sort ami megcsinálja, hogy nem egy id-ra keres, hanem egy arrayból (mondjuk csak tippelek) mindegyikre , a másik meg az, hogy így elvileg minden oldalletöltésnél az összes eventet ellenőrzi a php és mivel event egy usernek "végtelen" lehet, ezért eléggé nagy lehet az adatbázis már pár száz usernél is. A második az ,hogy ezt a függvényt módosítva nem ki echozom a dolgokat, hanem összegyűjtöm és utána dátum szerint kilistázom. Ezt egyelőre még nem sikerült összerakni fejben. Természetesen az eventhez van hozzárendelve dátum (dateofcreation nevü oszlop). Mi a véleményetek róla?
-
trisztan94
őstag
válasz
Peter Kiss #10306 üzenetére
Köszi! -
Peter Kiss
őstag
válasz
trisztan94 #10305 üzenetére
Nincs lezárva az első if-ed.
-
trisztan94
őstag
Óh, köszi így működött!
Erre nem tudok rájönni:
<?php
session_start();
if (!isset($_SESSION['user']))
{
if(!isset($_SESSION['guest']))
{
header('location:not_logged_in.php');
}
?>
<!doctype html>
<html lang="hu">
<head>
<title>Történetfeltöltés</title>
<meta charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="../css/soon.css"/>
<link href='http://fonts.googleapis.com/css?family=Niconne&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
</head>
<body>
<h2>Történetfeltöltés</h2>
<h3>A Történeted ellenőrzés után kerül ki.</h3>
<form method="post" action="../php/upload_story_exec.php">
<input type="text" class="elemek" name="cim" id="felsogomb" placeholder="Történet Címe"/><br/>
<textarea rows="10" cols="30" class="textarea" name="torzs">
</textarea><br/>
<input type="submit" class="belepes" name="send" value="Beküldés"/>
</form>
</body>
</html>na most erre kapok egy ilyet:
Parse error: syntax error, unexpected $end in /data/e/r/eroticplaza.hu/web/php/upload_story.php on line 30
a line 30 a </html>
??????
-
zzolika
aktív tag
Sziasztok!
Hogyan tudok egy gomb megnyomására elindítasni egy PHP functiont?
<input name="Button" type="button" value="Szamol" onClick="szamol()">
Amíg a szamol() javascriptben volt addig mûködött. Most átírtam a függvényt php-ba, betettem a <head>-be, de semmit sem csinál, még az echo sem mûködik. -
Cathfaern
nagyúr
válasz
WolfLenny #10295 üzenetére
Kliens oldalon ahogy írták is, rendszeresen intézel egy AJAX kérést a szerver felé.
Szerveren két dolog lesz:
1. Fut maga a feldolgozó szál, ami bizonyos lépcsőknél (mondjuk ha egy for ciklus, ami feldolgoz 10000 sort, akkor mondjuk minden 1000. sor után) adatbázisba beírja, hogy most elérte a 10%-ot (1000/10000), aztán a 2000. sornál a 20%-ot (2000/10000), stb. (sorazonosítónak pl. mehet session ID)
2. Az AJAX kérést meghívja az ellenőrző függvényt, ami egyszerűen kiolvassa az előbb említett táblából a %-os értéket.Overheadje van bőven, meg eszi az erőforrást, de ha ez az igény, akkor ez az igény
Athlon64+:
APC-t külön telepíteni és engedélyezni kell (vagy el tudod ezt érni szolgáltatónál, vagy nem). -
Soak
veterán
válasz
Sk8erPeter #10298 üzenetére
Dobtam is jelenleg a qtip-et. jQuery UI sokkal egyszerübb, konfigolni is jóval egyszerübb.
Athlon64+ : Pont egy ilyent álmodtam meg az este, megsporoltál most egy kis időt nekem
Új hozzászólás Aktív témák
Hirdetés
- iKing.Hu - Samsung S25 Ultra - Titanium Black - Használt, karcmentes
- Apple Ipad 10.generáció
- Új HP Pavilion x360 14-ek Érintős hajtogatós Laptop Tab 14" -35% i5-1335U 8/512 FHD IPS Iris Xe
- RTX 4080 SUPER,16GB. Ryzen 7 7800X3D, 32 RAM Fury RGB! Garancia!
- Asztali PC , i7 9700K , RX 5700 XT , 32GB DDR4 , 500GB NVME , 1TB HDD
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X3D 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- Újszeru GIGABYTE G5 - 15.6" FullHD 144Hz - i7-13620H - 48GB - 1TB - RTX 4050 - Win11 - 1,5 év gari
- Gamer Laptop, Gamer Monitor és Konzol Felvásárlás Magas Áron, Gyorsan és Egyszerűen!
- BESZÁMÍTÁS! Gigabyte B760M i5 14600KF 64GB DDR4 512GB SSD RTX 3080 10GB Corsair 4000D Airflow 1000W
- AKCIÓ! Gigabyte H510M i5 10400F 16GB DDR4 512GB SSD GTX 1080Ti 11GB Rampage SHIVA Zalman 600W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged