Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
Hello!
Készítek egy viszonylag egyszerű honlapot, amihez szeretném, ha olyan is tudna feltölteni képeket képaláírásokkal együtt az egyes menüpontokhoz, akinek fogalma sincs, mit kellene átírni a html-kódban.
Arra gondoltam, hogy ehhez lehetne egy admin-felület, - szemléltetésként - pl. www.honlap.hu/admin, és itt be tudna lépni a user egy felhasználónév-jelszó párossal, ami után lenne egy "Tallózás..." gomb (ezzel tudna képeket feltölteni), majd ezalatt három szempont szerinti képaláírás (ilyen táblázatszerűen elrendezve), amit csak be kellene írnia, majd még kiválasztaná, hogy melyik menüponthoz töltse fel, a "Kész!" gomb lenyomásának hatására pedig már meg is jelenne az oldalon, az adott menüpontban az új feltöltött kép.
Gondolom ehhez php kellene, de javítsatok ki, ha nem. Elég kezdő vagyok a témában, tudnátok esetleg valami kicsit szájbarágós leírást adni ahhoz, hogy hogyan is tudnám ezt megvalósítani?Szemléltetésként - ilyesmire gondolok:
A végeredmény meg valami ilyesmi lenne (persze egy adott menüponton belül!):
Előre is köszi!
Sk8erPeter
-
Sk8erPeter
nagyúr
Ezek szerint az include ilyen durván lassítja a betöltést? Ez nem túl jó, mert a baloldali menük miatt egy honlapon így oldottam meg, hogy ne kelljen mindenhol megismételni.
Végül is akkor észrevehető valamennyire a sebességbeli különbség olyan esetben, ha csak mondjuk a menüpontokat include-olom?Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
Viszonylag egyszerű kérdésem lenne :
van egy képfeltöltő szkriptem, és azt szeretném, hogy amennyiben már létezik azonos nevű fájl a tárhelyen, adott könyvtárban, akkor a szkript dobjon hozzá mondjuk egy alsóvonás2-t (_2).
Példa: valami.jpg-t akar valaki feltölteni, de ilyen nevű már van a tárhelyen, ezért az új valami.jpg fájlból valami_2.jpg fájl lesz.Mondjuk ez hülyén mutat, ha már van egy valami_2.jpg fájl, mert abból valami_2_2.jpg lesz... De mindegy, ez már lényegtelen. (ez áthidalható úgy, hogy csak mondjuk alsóvonást teszek hozzá...)
Esetleg olyan megoldás is létezik, hogy automatikusan generál hozzá akármilyen végződést? Végül is így működnek a képfeltöltő oldalak is.
Köszi!
____________________________
(#2865) lezso6: bocs, csak most láttam a választ, köszi az infót!
(#2863) Tele von Zsinór: neked is köszi![ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
Bocsánat, csak most volt időm foglalkozni a dologgal Köszönöm a segítséget!A dolog valamilyen oknál fogva nem működik jól:
ha létezik a fájl, létrehozza az új, kiegészített fájlnevet, de maga a kép csak az image változóban meghatározott számsorozatot tartalmazza (36 bájt, nyilván, mivel 36 szám (karakter) van benne).Egy-két alapdolog még nem teljesen tiszta számomra, ezért inkább megkérdezem:
1.) mi a szerepe az$image = '010101110101011010111010101011011110';
sornak?
A file_put_contents szerint ez hozzáfűzi ezt az infót a fájlhoz. Valóban, a tartalma ez lesz. Tehát ha megnézem magát a fájl tartalmát mondjuk szövegszerkesztővel, akkor benne ezt látom.
De ez mire jó jelen esetben? Csupán ennyit fog tartalmazni a fájl, semmi mást. Ebből következően a képet nem tudja megjeleníteni, mert arra vonatkozó infókat nem tartalmaz, hogy akkor hogyan is néz ki a fájl (ezt felülírja az image változóval a file_put_contents második paramétere).2.) Jól értelmezem, hogy az alábbi sornál a strpos megkeresi azt a pozíciót, ahol a pont előfordul a fájlnévben, és a substr pedig a file változó legelejéről kezdve elmegy a pontig, és azt adja vissza eredményül?
$name = substr($file, 0, strrpos($file, '.')); // kiterjesztés levágása
Majd ha jól értem, a while függvényben szereplő cucc ehhez a névhez fogja hozzáfűzni a ".jpg" kiterjesztést.
Egyébként természetesen jpg kiterjesztésű fájllal próbáltam ki a dolgot.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Ezzel helyesen tudod megjeleníteni ATW-n is az UTF-8-as karakterkódolást?
Csak mert én már rákérdeztem ATW-nél, hogy mikor válik lehetővé ott az UTF-8-as kódolás helyes megjelenítése, miért csak az ISO-8859-2 kódolás megy, és ezt válaszolták:
"A karakterkódolás az ingyenes oldalaknál valóban csak ISO-8859-2 lehet. Ez régebbről maradt így a rendszer felépítése miatt, és több dolgon is módosítani kellene, hogy változzon. Idővel természetesen változni fog ez, egészen konkrétan az admin felületről lehet majd választani. Pontos időpontot erre most nem tudnék mondani."Ezek szerint mégis ki lehet ezt kerülni, és helyesen megjeleníteni az UTF-8-as kódolású weblapokat?
_______________
Még egy kérdés a képfeltöltéssel kapcsolatban: hogyan tudom olvasható formában kiíratni egy feltöltött kép típusát? Próbálkoztam párral, de eddig valahogy nem jött össze:
image_type_to_extension
image_type_to_mime_type
Persze lehet, hogy valami tök triviális dolgot rontok el, vagy valamire nem gondoltam.Köszi!
Sk8erPeter
-
Sk8erPeter
nagyúr
Jaaaaa Oké, úgy látszik, késő van...
A feltöltés során mondjuk így adok nevet:$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);Milyen módon érem el bináris formában magát a képet?
____________________________________________________________________
Basszus, a fájltípusra vonatkozó kérdésem sztornó... Azt nem írtam, hogy próbáltam már a $_FILES tömbből elérni (ahogy írtad is), és ezt jól is tettem, azzal a kivétellel, hogy elcsesszintettem két karaktert a formon belül, az inputnak adott névnél, és emiatt nyilván nem működött...
Tehát így:
$tipus = $_FILES["uploaded"]["type"];
(na, és itt az uploaded helyett upload-ot írtam, és ezt jó ideig nem vettem észre )
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Jahh, értem már, akkor így módosítottam az image változót:
$image = ($_FILES['uploaded']['tmp_name']);
Ezzel már megfelelően eléri?
Másik kérdés, hogy még a konkrét feltöltés előtt mindenféle fájltípusra, fájlméretre és egyebekre vonatkozó ellenőrzéseket végzek a fájlon, és egy $ok változóval jelzem, ha minden ok, utána mehet a feltöltés, tehát így (sztem ezt még Te javasoltad, h így érdemes):
if ($ok==0)
{
...valami gáz van...;
}
else
{
if (move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
...ezt meg ezt csináld, írd ki, hogy faszán sikerült feltölteni a fájlt...;
}
else
{
...írd ki, hogy nem jött össze, stb...;
}Nyilván az ellenőrzésnek, hogy létezik-e már a fájl, ezelőtt kéne lefutnia.
Ekkor tehát csak simán állítsam az $ok változót 1-re, miután a while ciklus az i változó növelgetésével, kiterjesztés levágásával, kiegészítő név hozzácsapásával lefutott?
Hogy fog mögékerülni a kiterjesztés, ha a move_uploaded_file függvénynek kéne utána következnie? Külön if-be tegyem be, hogy ha volt ilyen jellegű változtatás (kiterjesztés levágása), akkor a képtípustól függő kiterjesztést tegye mögé?Sk8erPeter
-
Sk8erPeter
nagyúr
Valóban, akkor lehet, hogy mástól lestem el. De kézenfekvőnek tűnik a változó állapotának nyomonkövetése. Ez miért csak egyszerűbb szkriptekhez jó? Mármint mitől jobb a többi hibakezelő módszer? A változó állapotának követésénél is meg lehet adni, hogy ha az mondjuk 0, akkor legyen "return: false", stb... Tehát akkor végül is ez, amit Te is használsz, elvileg majdnem ugyanaz.
Kiterjesztés kiderítésére a pathinfo() függvényt találtam a legésszerűbbnek, így:
$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);
$akarmivaltozo = pathinfo('$target');
echo 'Kiterjesztés: '.$akarmivaltozo['extension'].'<br />';Akkor ezt az extension tömböt lehetne rakni a substr() függvénybe, hogy ily módon vágja le a kiterjesztést, így jó?
Vagy mondjuk astrrpos($target, '.');
is jónak látszik.
_________________
(#3045) cucka: kivételkezelés? Ez miben más/jobb, mint a többi hibakezelés?
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Igen, ennek a függvénynek én is megörültem, mert korábban a levagdosással szenvedtem, ami sikerült is, de azért ez így jóval egyszerűbb megoldás.
Köszi, akkor ezeket majd kipróbálom, de időközben lenne egy másik probléma:
szeretnék korlátozást beállítani a feltölthető fájltípusokra, de valamiért csak akkor működik, ha az if feltételnél egyetlen szempontot adok meg, ha VAGY-olom a feltételeket ( || ), akkor már igazából semmilyen típust nem enged feltölteni, és ez így nem túl vicces.
Így írom be, egy feltétel esetén tökéletesen működik, csak a több feltétel esetén nem://Fájltípusra vonatkozó korlátozások
$tipus = $_FILES['uploaded']['type'];
if ($tipus == ('application/octet-stream' || 'application/zip' || 'application/x-msdownload' || 'text/css' || 'text/html' || 'text/plain' || 'message/rfc822'))
{
echo 'Ne tölts fel ilyen kiterjesztésű fájlt!<br />';
$ok=0;
}Mit ronthatok el?
Sk8erPeter
-
Sk8erPeter
nagyúr
Hátha találsz itt megoldást, születtek karakterkódolási problémákról cikkek a Weblaboron is:
Karakterkódolási problémák kiküszöbölése
A MySQL nem ért magyarul, de még lehet rajta segíteni (ez lehet, hogy segít neked is)
MySQL 5.0: karakterkódolások
Magyar karakterek kezelése UTF-8-at használó MySQL-ben
stb.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #3058 üzenetére
lezso6, cucka, Tele von Zsinór: nagyon köszönöm mindannyiotok hozzászólását, sokat segítettetek!
Végül is maradtam a Tele von Zsinór által ajánlott getimagesize () függvénynél, ez bizonyult a lehető legegyszerűbb megoldásnak, mivel a lehető legtöbb képtípust támogatja.
Ha esetleg több olyan képtípus is felmerül, amit nem szeretnék, hogy feltöltsenek, akkor a lezso6 által ajánlott if (in_array(...) ) megoldást fogom választani, az is nagyon kézenfekvő.
cucka, abban pedig tökéletesen igazad van, hogy inkább azt engedjem, amit feltölthetnek, ne azt tiltsam, amiből többszáz típus van, először nem is tudom, ezt hogy gondoltam...
Ezt viszont már több helyen is olvastam, amit írtál, de nem értem az okát:
"Harmadrészt a mime típust a kliens küldi, tehát megbízhatatlan."
Miért olvas ki a fájlból esetlegesen rossz információt?___________________
Végül egyébként sikerült megoldani azt is, hogy ha létezik a fájl, akkor tegye mögé az alsóvonás utáni számot, attól függően, hogy hányszor létezik hasonló nevű fájl, tehát az volt a végső megoldás, hogy közvetlenül a move_uploaded_file függvény elé tettem egy ellenőrzést:
$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);
$fajlnev = $_FILES['uploaded']['name'];
// bla-bla... utána:
//Létezik már azonos nevű?
if (file_exists($target))
{
$file = $target;
$name = substr($file, 0, strrpos($file, '.')); // kiterjesztés levágása
$i = 1;
while(file_exists($file))
{
$i++;
$file = $name . '_' . $i . '.' .$path_parts['extension'];
}
echo 'A fájl neve korábban már szerepelt! Összerakott fájl neve: '.$file.'<br /><br />';
$target = $file; //hogy ne az eredeti elérési út maradjon, hanem az új névvel mentse el a fájlt a move_uploaded_file fv.-ben is
$fajlnev = substr($target, (strrpos($target, '/')+1));
// hogy utóbbi változók is az új célhelyre mutassanak a move_uploaded_file fv.-ben
}
//eddig tart az ellenőrzés;
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
// bla-bla...
}_________________________________
Itt (Google Cache által elmentve) pedig találtam egy tömböt, melyben a legtöbb, a böngésző vagy a szerver által kérdésesen támogatott vagy megjeleníthető ékezetes vagy egyéb karakter megtalálható - ez alapján szeretném kicserélni a feltöltendő fájl nevében szereplő esetleges hasonló karaktereket, na meg a szóközt!
Ilyesmi módon oldjam meg, ahogy itt látható, vagy a preg_replace() függvénnyel, vagy utóbbinak ehhez semmi köze?[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #3062 üzenetére
Hali!
Ezt most kipróbáltam, de ez az á, é, stb. ékezetes karaktereket pl. csak simán eltávolítja.
Gondolom ez a// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);sor miatt van, mintha rosszul dolgozná fel a beolvasott karaktereket.
Ráadásul ez a könyvtárral együtt lévő hivatkozás esetén a '/' (perjel) karaktert is lecseréli '-' (kötőjel) karakterre, az meg nem jó, igaz, ez mondjuk megoldható, úgy, hogy nem a könyvtár nevével együtt teszem be a szöveget, hanem csak simán, a fájl nevére hivatkozva, tehát ez még annyira nem is lenne érdekes (de ettől függetlenül nem jó, hogy így van).Érdekes az is, hogy ha úgy csinálom, ahogy itt van: iconv
echo 'Original : ', $text, PHP_EOL;
echo '<br />';
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;akkor meg az ékezetes karakterekből ilyen karaktert csinál, kimenet:
Original : upload/Gyémánt.gif
TRANSLIT : upload/Gy�m�nt.gifSzerk.: ezek szerint itt nem látszik, de amit kiír, az ilyen négyzet alakú ikon.
Legalábbis ez az, amit kiír, de valójában ez lesz belőle a tényleges fájlnév, amit feltölt:GyĂ©mánt.gif
Ez így nem túl jó. Ezért is gondoltam arra a tömbös megoldásra.
Ez böngészőfüggő probléma lehet? Operából próbálom, ha ez érdekes. Ja, és természetesen UTF-8 kódolású maga a php-fájl, ha ez fontos.
Mi lehet a probléma? Alternatíva?[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #3074 üzenetére
A böngészőfüggőt csak azért kérdeztem, mert már nem tudtam mire gyanakodni, hirtelen arra gondoltam, hogy esetleg az egyes form-ok esetén a böngészők más-más karakterkódolással küldik el a szövegeket... De akkor ez nem igaz.
Viszont kipróbáltam már szinte minden kombinációban, us-ascii-vel is, meg még kb. 5-féle kódolással, de egyszerűen sehogy sem akarja olyan formára alakítani, ahogy nálad megszületik a kimenet. Több szerveren is próbáltam már, ugyanúgy vagy csak egy ilyen dobozszerű ikon lesz az ékezetes betűk helyett, vagy egy, illetve más kódolás esetén kettő kérdőjel.
Próbáltam már az iconv-vel is, és próbáltam az mb_convert_encoding függvénnyel is, reménykedve abban, hogy az majd megoldja, de nem.
Kipróbáltam az alábbit is:$enc = iconv_get_encoding('all');
print_r ($enc);Így olvasható formában kapom meg pl. egy tömb elemeit, esetemben ez lesz az eredmény:
Array ( [input_encoding] => ISO-8859-1 [output_encoding] => ISO-8859-1 [internal_encoding] => ISO-8859-1 )
Pedig tudtommal az ISO-8859-1-ben nem kéne ékezetes karakternek lennie.
Mi lehet a gond, ami miatt nem tudom konvertálni az ékezetes karaktereket?
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PazsitZ #3109 üzenetére
Persze, hogy nem illik ékezetes betűt használni url-ben, épp ezért akartam ellenőrizni a júzert, aki feltölti a képet mondjuk "csodálatos ez a kép, sőt mondhatnám gyönyörű.jpg" néven Szóval hogy helyettesítse a szóközöket mondjuk alsóvonással, az ékezetes betűket pedig a neki megfelelő ékezet nélküli karakterrel, mint pl. gyönyörű -> gyonyoru
Ez esetleg megoldható? Nem is nagyon vágom, miért nem működik az ékezet-konvertálás...Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PazsitZ #3111 üzenetére
TÖKÉLETES!
Pont ilyen tömbös megoldásra gondoltam én is, csak én úgy akartam megoldani, hogy pl.$special_chars = array (
'á' => 'a',
'à' => 'a',
'ä' => 'ae',
'â' => 'a',
'ã' => 'a',
...
}(ezt a tömböt kimásoltam innen, úgyhogy nem kellett szenvedni a megírásával ), tehát hogy ami a nyíl után van, arra helyettesítse, azt hittem, úgy is megoldható
De így is tökéletes, köszönöm, PazsitZ!Tényleg, ha már itt tartunk, akkor már érdekelne, hogy egyébként esetleg kivitelezhető lenne azzal a változattal is, amire én gondoltam eredetileg? Ha igen, akkor mi a módja?
Szerk.:
most látom, valahogy így oldja meg:if (in_array($char, array_keys($special_chars))) {
$result .= $special_chars[$char];
}Kicsit túl hosszú a többi kód, rá kéne vennem magam, hogy áttanulmányozzam...
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
PHP+MySQL kérdés, csak ahogy elnézem, a MySQL topic nem túl sűrűn látogatott mostanában
Rá tudnátok nézni a kérdésre? Halál egyszerű dologról lenne szó, amire valahogy így későn nem sikerül rájönnöm:
[link]
Köszi!Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
Ha van egy oldal, ahol van egy galéria, ahol a képek elérési útját adatbázisból kérem le, valamint magát az oldal tartalmát is a könnyebb módosíthatóság érdekében (adminfelületen keresztül kényelmesen módosítható, hozzácsapok a szerkesztőmezőhöz még egy TinyMCE-t, így találtam a legegyszerűbbnek, hogy az emberkének ne kelljen kódokat szerkesztenie) minden menüpontban, akkor melyikkel érdemes csatlakozni a MySQL-kiszolgálóhoz, a
mysql_connect(), VAGY a
mysql_pconnect()
paranccsal?
Azt vágom, hogy utóbbi egy állandó kapcsolatot hoz létre arra az esetre, ha meg akarjuk takarítani az időt, ami egy kapcsolat felépítéséhez szükséges - de nem rejt ez magában biztonsági kockázatot?
Előnyök/hátrányok?Lehet, hogy nem a legjobb, ha minden egyes függvény után beteszem a mysql_close() parancsot. (ami mondjuk nem zárja a mysql_pconnect()-tel megnyitott kapcsolatot)
Köszi!
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #3144 üzenetére
Értem, köszönöm a kimerítő választ, pont erre voltam kíváncsi.
Egyébként a perzisztens kapcsolat milyen esetekben lehet szükséges/ajánlott?
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz animatrix11 #3154 üzenetére
Flash-videókra használd ezt az ingyenes lejátszót, sok mindent (többek közt lejátszólistát) lehet vele beállítani: JW FLV Media Player.
De ez már bőven OFF-topic, nem itt kellene beszélni erről.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz fordfairlane #3171 üzenetére
Pontosan ez bizonyítja, mennyi hiba van a Tanuljuk meg a PHP4 használatát 24 óra alatt! c. könyvben... A példa ugyanis onnan származik. Ha valakinek fogalma sincs a PHP-ról, akkor az csak kaparja az arcát, hogy mit csinálhat rosszul, a könyvben ennél a résznél még csak utalás sincs arra, hogy talán valahogy a bejövő adatokat fel is kéne dolgozni, és azt hogyan.
Sk8erPeter
-
Sk8erPeter
nagyúr
"Submit gomb minek? Enterrel is végrehajtja az action-t."
Nem jó, ha megszokod, hogy nem használod a submit gombot, mert később, ha honlapot akarsz csinálni, akkor figyelembe kell venned, hogy a legtöbben az egerüket szeretik használni böngészés közben, és nem a billentyűzetet. Különösen igaz ez akkor, ha opciók közül kell majd választani, nem csak begépelgetni.Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
Most az istenért sem akar beugrani a megoldás, PHP+MySQL kérdés:
egy adattáblában sok-sok oszlop van, a legfontosabbak az azonosítószám (automatikusan inkrementálódik), a név, valamint a nevekhez tartozó képek elérési útja, az egyik a 200px magasaké, a másik meg az 50px magasaké.
Amikor a júzer feltölt egy képet adott névvel, akkor egy függvény automatikusan készít 200 és 50px magas thumbnaileket, ezek elérési útját eltárolja az adattáblában.Egy oldalon pedig úgy szeretném megjeleníteni a képeket, hogy először jelenjen meg az adott nevű képből egy 200px magas, majd alatta azok az 50px-es kisképek, amik még ugyanehhez a névhez tartoznak, vagyis amíg ezeknek a képeknek a "név" oszlopában ugyanaz az érték szerepel. (A kisképekre meg már Javascripttel intézném el, hogy jelenjenek meg a 200px magas résznél rákattintás esetén.)
Hogy kézzelfoghatóbbá tegyem a dolgot: van egy oldal, ahol a júzer feltöltheti kutyák képeit, a neveket meg feltöltéskor ő gépeli be (tehát mindig lehetnek újak, nem előre eltárolt nevű kutyákból kell megjeleníteni a képeket, mert akkor egyszerű lenne a problémát megoldani, pl. while ($kutyanev='Vauvau') {...} ciklussal), egy oldalon meg szeretném megjeleníteni ezeket a képeket úgy, hogy van egy nagy kép a "Vauvau" nevű kutyáról, alatta meg ugyanerről a "Vauvau" nevű kutyáról jelenjenek meg az 50px-es thumbnailek.
Emellett megint ugyanebben a felépítésben pedig pl. a "Vuffvuff" nevű kutya képei jelennének meg, először a 200px, majd 50px-esek. És így tovább, amíg a név adatmező összes értékét ki nem merítettük.Maga az adattáblából való adatlekérés természetesen megy, a képeket meg tudom jeleníteni, de egyelőre csak úgy megy, hogy külön-külön jelennek meg, ugyanaz a kép először 200, majd alatta 50px méretben.
Remélem érthető volt a leírás, hogy mit is szeretnék, ha nem, akkor szóljatok, és megpróbálom érthetőbben...
Köszi!---------------------------------------------------------------------------------------------------------------------
Kicsit OFF (sima HTML-kérdés), de a másik topicban nem válaszoltak, Ti meg itt nagyon vágjátok a dolgokat, esetleg erre a kérdésre rá tudnátok nézni? Hátha van valami ötletetek --> [link] Köszi!Sk8erPeter
-
Sk8erPeter
nagyúr
válasz ArchElf #3188 üzenetére
Hű, ezt nem lehet valahogy egyszerűbben megoldani? A tag táblánál miért van szükség "típus" mezőre? Csakis kutyák neveinek az eltárolásáról lenne szó, ami a kép többi adatával együtt bekerül egy táblába (ahogy nálad a "kép tábla" esetén látható).
Valami olyasmi megoldással nem lehetne a rendelkezésre álló adattáblákból és feltöltött képekből kinyerni és rendezni az adatokat, hogy mondjuk egy tömbbe gyűjtöm pl. a "kép tábla" - "név" mezőinek összes adatát, az újból előfordulókat kiszűröm, és mondjuk amíg a név mező első eleme (pl. a "Vauvau" nevű kutya) tartozik az adott sorhoz, addig gyűjtse ki belőle az 50px-es képek elérési útját?
Ez nem megoldható?Most nagyon nagyvonalakban, csak a lényeget kiemelve ilyen módon jelenítem meg a képeket, de ezzel az a baj, hogy csak egymás mellé rendezgeti div-ekbe az adattábla sorainak megfelelően, még akkor is, ha egy kutyanév többször is előfordul (csak adott sorhoz más kép tartozik):
<?php
$menupont = "kolykok";
$parancs = "SELECT * FROM kepek WHERE menupont = '$menupont'";
$query = mysql_query ($parancs)
or die ("Nem lehet lekérni az adatot a MySQL-táblából.<br />Hiba: ". mysql_errno() . "\n\r". mysql_error() ."<br />");
echo "
<!-- Nagy div eleje -->
<div class=\"images\">";
while ($result = mysql_fetch_assoc($query))
{
print "
<!-- Kutya adatainak eleje -->\t
<div class=\"doggie\">\n
<ul class=\"kutya_lista\">
<li><a href=\"".$result['kep']."\" title=\"$cim\">
<img src=\"".$result['kep_200']."\" width=\"". round($result['kep_felbontas_0']/$result['kep_felbontas_1']*200) ."\" height=\"200\" alt=\"dogs\" />
</a></li>
<li>
<img src=\"".$result['kep_50']."\" width=\"". round($result['kep_felbontas_0']/$result['kep_felbontas_1']*50) ."\" height=\"50\" alt=\"dogs\" />
</li>
<li>Név: ".$result['nev']."</li>
<li>Apa: ".$result['apa']."</li>
<li>stb....... (itt még include-olok egy, az adott kutyához tartozó törzskönyvet is!)</li>
</ul>
</div>
<!-- Kutya adatainak vége -->\n\r";
}
echo "
<div style=\"clear: both;\"></div>
</div>
<!-- Nagy div vége -->";
?>A lényeg: azt szeretném, hogy az adattáblában szereplő azonos nevű kutyák képei egymás mellett legyenek, és ugyanígy rendezve legyen a többi kutya neve is, a hozzátartozó képekkel.
Ilyesmi módon:
A nagy piros keret a 200px-es nagykép, az alatta lévők az 50px-es kisképek, melyekre rá lehetne kattogni, alatta pedig az adatok; végül mellette a következő nevű kutya.Azért másoltam be a kódot is, hogy hátha így jobban látható, mit szeretnék, és hátha van rá egyszerű módszer is.
Tehát az a tömböt nevekkel feltöltős módszer (amíg a "nev" mezőben a tömb első eleme szerepel, addig jelenítse meg az 50px-es képet) vagy valami hasonló nem működik?Előre is köszi!
Megj.: persze hibák a kódban még előfordulhatnak, szóljatok, ha láttok ilyet...
Egyébként a kommenteket sok helyen azért raktam oda, hogy átlássam (meg Ti is) a dolgot, majd a végsőből kiszedem.[ Szerkesztve ]
Sk8erPeter
-
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
-
Sk8erPeter
nagyúr
Istencsászár vagy! Pontosan így képzeltem el!
Valahogy nem akart eszembe jutni az a megoldás, amit Te csináltál, hogy simán lehet külön ciklusba rakni a tömb feltöltését a $row adattáblasorok adataival. És az ezt követő ciklus dolga a konkrét megjelenítés, ez így tökéletes. Ráadásul a név szerinti rendezés és a többdimenziós tömb is nagyon elegáns megoldás.
Köszönöm szépen, hálám üldözni fog!---
Kérdés:
1. Egyébként azt gondoltam, hogy a tömbfeltöltéshez ($tomb[] = $row) is szükség van egy segédváltozóra a while cikluson belül (pl. így: $tomb[i], és az i-t növelgetjük a while cikluson belül), 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)2. É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ő?
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PazsitZ #3088 üzenetére
Itt az if ($op != "ds") feltétel-ellenőrzéssel csak azt ellenőrizzük le, hogy egyáltalán el lett-e a küldve a form, és ha igen, akkor mehet tovább az ellenőrzés?
"wrap=virtual" ez micsoda?
Egy fontos kérdés: ha nem állítok be ilyen számellenőrzős cuccot, viszont van egy form, amit kitöltve elküldök, majd frissítem a böngészőt, akkor hogyan kerülhetem el, hogy még egyszer ugyanazokat az adatokat elküldje? (Pl. vendégkönyv esetén [tudom, hogy egyébként is érdemes itt valami captcha-t vagy hasonló számellenőrzős cuccot berakni].)
Múltkor csodálkoztam rá, hogy még egyszer ugyanazt az adatot elküldi, és bővíti az adatbázist, ha F5-tel frissítek. Az meg ugye nem jó.
A $PHP_SELF-fel küldöm "önmagának" az adatokat, szóval ugyanazon az oldalon dolgozom fel...
Ez lehet, hogy kicsit amatőr kérdés, de egyelőre akkor sem tiszta számomra.Köszi!
Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
<?php
echo '10 random generált szám -100 és +100 között: <br />';
$min=-100;
$max=100;
$szum = 0; //segédváltozó az összeghez
for($i=1; $i<=10; $i++)
{
$rand = rand($min,$max);
$szum+=$rand;
echo "$i: $rand <br />";
}
echo "<br />";
echo "A 10 random generált szám összege: $szum";
?>A random függvényt a for cikluson belülre tedd, úgy jó. Én i-t 1-től indítottam, és minden cikluslépésben ki is írtam az aktuális számot, és a random generált számot a $szum változóhoz minden lépésben hozzáadogattam. Az értékadás egyébként így is jó lett volna: $szum = $szum+$rand; de így szebb ($szum += $rand).
A legvégén, a ciklus végeztével pedig kiírattam az összeget (a $szum változót).
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Azt a formot, amit korábban kiírattál, eltárolod akár egy változóba is, vagy csak simán kiíratod (vagy akár függvényt is írhatsz az űrlap elkészítésére, és akkor még a korábban megadott adatokat újból beteheted a formba), és a form-nál a PHP_SELF-fel babrálsz, pl.:
//első legyen a program eredményeinek kiíratása előtt (!) az alábbi (csak példaként szolgáló) form-megjelenítés:
$form = '<form enctype=\"multipart/form-data\" action=\"'.$ SERVER['PHP SELF'].'\" method=\"POST\"><input name=\"valami\" type=\"text\" /><input type=\"submit\" value=\"Mehet\" /></form>';
if ( empty($_POST['valami']) )
{
echo $form;
}
else
{
echo $form;
//aztán ide jöhetnek a kiszámolt eredmények...
}Persze ez csak egy gyors, leegyszerűsített verzió, többféle megoldás is van, ez csak az egyik. Nem tudom, ezzel jutottál-e előrébb, ha nem, akkor konkretizáld a kérdést. Ha igen, akkor öröm és bódottá'.
[ Szerkesztve ]
Sk8erPeter
-
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
-
Sk8erPeter
nagyúr
válasz maLakai #3212 üzenetére
Hmm, hát nem tudom, hogy gyakoribb-e, de adott esetben felesleges. Én most végül megoldottam a vendégkönyvet úgy, hogy ugyanazon az oldalon dolgozom fel az adatokat, nem adok meg az actionnek címet, így volt a legegyszerűbb, és PazsitZ által mutatott módon random számokat generálok, és sessiontömbben tárolom a randomösszeget, így frissítésnél már más lesz az összeadandó eredmény, tehát nem küldi el még egyszer ugyanazt a hsz.-t, ha frissítgetek F5-tel. Működik, és kényelmes megoldás.
Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
Csak egy rövid kérdés:
a függvénydefinícióban hogyan tudok megadni "nem kötelező" paramétert?
Ugyanúgy, ahogy a round() vagy az imagefilter() vagy ezernyi más függvénynél azok közül, melyek a PHP alapfüggvényeinek számítanak.
Megadhatok saját függvényt is hasonlóan nem kötelező paraméterekkel?Tehát egy függvényt pl. meg lehet hívni úgy is, hogy
valami(1,2);
és úgy is, hogy valami(1,2,3,4); (Amennyiben van több, mint pl. 2 paraméter, akkor használjuk fel azokat is, de egyébként nem muszáj.)Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
Azt el lehet érni valahogy, hogy a böngészők frissítésekor a korábban már elküldött $_POST adatok ne legyenek elküldhetők még egyszer? Erre a dologra egyes böngészők (pl. Chrome, FF) fel is hívják a figyelmet, ha $_POST adatokat tárol, rákérdez, biztos el akarjuk-e küldeni megint az adatokat.
Szóval lehet úgymond törölni a böngésző "agyából" a korábban elküldött értékeket?
Vagy ez csak böngészőfüggő, annak a memóriájához ilyen módon a PHP program nem tud hozzányúlni?[ Szerkesztve ]
Sk8erPeter
-
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
-
Sk8erPeter
nagyúr
áá, bocs, nem vágom, hogy sikerült pont a lényeget lehagynom róla...
Arra gondoltam, hogy nem sima változónak, hanem egy SESSION-nek adod át a POST értékeit, aztán amikor megtörtént az adatbázis feltöltése, akkor meghívod a session_destroy() függvényt.
Ez így nem jó? Vagy hogyan kéne? (Huhh, mostanra már úgy összezavartam saját magamat, hogy azt se tudom, mit is akarok kihozni ebből. )[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Igaz, nem kell az egész sessiont destroy-olni, én is arra gondoltam egyébként, hogy $_SESSION['post'] vagy ehhez hasonló nevű változóba adom meg az értékeket. Ez így jó megoldás lenne?
Van egy űrlapom, ott elküldöm az értékeket, ugyanazon az oldalon fel is dolgozom őket, aztán szeretném, ha többé nem lehetne ugyanezeket az értékeket elküldeni frissítésnél.
No de akkor az konkrétan hogyan is néz ki?
$_SESSION['post'] = $_POST;
és aztán végül is mit csekkolok? (az oké, hogy aztán sikeres lefutásnál gondolom unset($_SESSION['post'])Vagy mégis inkább pakoljam át külön php-fájlba a feldolgozást, és a form action-nél állítsam be annak az elérési útját? Igazából azért gondoltam arra, hogy ugyanazon az oldalon dolgozom fel az adatokat, hogy ha hiba van, tehát nem adtak meg minden szükséges értéket, akkor egyszerűen írja ki a form fölé a hibákat, aztán jelenítse meg ugyanúgy, a már megadott értékekkel (! hogy ne kelljen újra begépelni), ne kelljen mindig "vissza" linkekre kattogni hibánál.
Na de ha átirányítom az oldalt feldolgozás érdekében, akkor az eredeti oldalon hogy fog megjelenni a szükséges kimenet, ha a feldolgozás után ismét visszairányítás történik?[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Tökéletes!! (nem is tudom, ez ebben a formában miért nem jutott eszembe már korábban )
Az adatbázis feltöltése után betettem a $_SESSION['siker'] = true; sort, majd a fejlécbe, még a <html> cuccok elé betettem a header-re vonatkozó sort:if (true === $_SESSION['siker'])
header('Location: ', $_SERVER["PHP_SELF"]);és kipróbáltam, ha feltöltök, kiírja a szokásos sikeres feltöltés blabla szöveget, majd megnyomom a frissítést, a böngésző felteszi a szokásos kérdést, hogy még egyszer elküldöm-e a $_POST adatokat, és az OK-ra kattintva a kezdőoldal jön be.
Ja, és oda, ahol annak ellenőrzése zajlik, hogy megvan-e minden $_POST cucc, ami kell, betettem még azt a feltétel-ellenőrzést, hogyif ( //blabla...........
&& !isset($_SESSION['siker'])
)Nagyon köszönöm lezso6, sokat segítettél!
[ Szerkesztve ]
Sk8erPeter
-
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
-
Sk8erPeter
nagyúr
Hmm, akkor az a gáz, hogy ebben az esetben valamit nagyon át kéne írni az egész űrlapkezelésben.
Ez egyébként egy admin felület. Most egyelőre az a struktúrája a dolognak, hogy még a <html> kiírása előtt lecsekkolja, hogy az illető be van-e jelentkezve, ha igen, akkor megyünk tovább, ha nem akkor kirakja a bejelentkező formot, semmit nem is ír ki.
Elindít egy sessiont a session_start() fv.-nyel, stb...
Utána már kezdődik az oldal tényleges megjelenítése, és a középső részbe íratom ki a dolgokat, tehát már nem a headerben vagyunk, itt már nem adhatok ki header-re vonatkozó módosítgatásokat. Mindenképp ide kell jönnie a szövegnek, hogy sikeres blabla...
Itt következik a php-részben egy feltétel-ellenőrzés:1.) ha a $_POST üzenetek el vannak küldve, és minden adat megvan a megkövetelt elemek közül (kitöltötték, stb.), akkor megkísérlem feltölteni a fájlt, a megadott adatokat az adatbázisba, ha valamiért nem sikerül (pl. túl nagy a fájl), hibaüzeneteket íratok ki.
2.) ha a $_GET értékekbe elküldték már korábban (még egy form segítségével, aminél GET action van), hogy pontosan melyik elemhez is szeretnénk képet feltölteni, akkor azt megjelenítjük az adatbázisból, csak hogy látható legyen (megjelenítjük a már feltöltött adatokat, már fent lévő képet, stb.), itt jelenítjük meg azt a formot is, amivel konkrétan ki tudjuk választani a fájlt, amit feltöltünk!
3.) egyébként pedig megjelenítek egy formot (rádiógombokkal), amelyik tartalmazza a megfelelő szempontok szerinti ÖSSZES már meglévő elemet (csak egy kiskép és egy név van fent, ami utal rá, ez így a felhasználó számára egyértelmű), azok közül kiválaszthatjuk, melyikhez szeretnénk képet (és esetleg adatot) feltölteni.
Ez a struktúra így jól is van rendjén, jól is működik, a követelményeknek megfelelő, csak azt nem tudom, hogyan kellene úgy beilleszteni akkor ezt a SESSION-ös ellenőrzést úgy, hogy frissítés UTÁN ki tudjam íratni az adatokat, meg a sikerre utaló üzenetet, a headerben ez a rész NEM szerepelhet, mivel szükséges, hogy megjelenjen a fenti menü, stb...
MOST úgy csináltam meg azt, amiről beszéltünk, hogy az 1. részben miután konkrétan feltöltöttem az adatbázisba az adatokat, beteszem a $_SESSION['siker'] = true; értéket.
Aztán, ha mégis frissít a júzer, akkor van az a feltétel-ellenőrzés, hogy ez az érték true, akkor átirányít.Igazából már nem vágom, hogyan kellene akkor mégis szépen megoldani, hogy unset is legyen, átirányítás is legyen, és ne akarjon semmiféle POST adatot újból küldeni. A jelenlegi működik, de így valóban kicsit gagyibb.
Sk8erPeter
-
Sk8erPeter
nagyúr
Ezek szerint az előző hsz. kicsit túl hosszúra sikeredett, sorry...
Igazából annyi lenne a lényeg, hogy hogyan tudom megoldani ezt a SESSION-ös trükköt úgy, hogy nem a headerbe, még a <html> cuccok megjelenése előtt szeretném kiíratni a sikeres feltöltésre utaló üzeneteket, hanem úgy, hogy rendesen megjelenjen az oldalon, menükkel, mindennel együtt.
Aztán frissítéskor viszont ne akarjon minden POST üzenetet újra elküldeni.Amielőtt még a lényeget feltölteném adatbázisba, elvégzek olyan műveleteket, mint a kép vízjelezése, felbontás kiíratása, thumbnailek készítése, és egyben megmutatása (tehát hogy megjelenik a kép több elkészített verziója is a felhasználó számára az oldalon), valamint egyéb megadott adatok kiíratása, majd ezt követően történik csak meg az adatbázisba való feltöltés.
Érdekes lenne, ha még azelőtt átirányítanám a júzert, mielőtt ezekből a feliratokból, képekből bármit is látna.
Akkor hogyan kéne megoldani szépen?[ Szerkesztve ]
Sk8erPeter
Új hozzászólás Aktív témák
- Politika
- A Gigabyte is visszaveszi alaplapjainak alapértelmezett tuningját
- Házimozi belépő szinten
- Kempingezés és sátrazás
- Otthoni hálózat és internet megosztás
- Milyen SSD-t vegyek?
- Kés topik
- Google Pixel 3a teszt - a Nexus szellem-e?
- Google Pixel 3 - egyszerűen nagyszerű
- Mozilla Firefox
- További aktív témák...