- UHD filmek lejátszása
- Videós, mozgóképes topik
- Amazon Kindle
- Átlátszó, vezetékmentes YUNZII klaviatúra numerikus paddal
- Nem tetszik a Procon-SP-nek, hogy a Nintendo távolról kivégezheti a Switch 2-t
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Milyen egeret válasszak?
- Steam Deck
- Milyen RAM-ot vegyek?
- ThinkPad (NEM IdeaPad)
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz
Speeedfire #5418 üzenetére
Basszus, jobb lett volna, ha előbb jobban körbenézek.
Most találtam meg a Jeditable oldalán, hogy el lehet küldeni extra paramétereket is a köv. módon:
$(".editable").editable("http://www.example.com/save.php";, {
submitdata : {foo: "bar"};
});Így pedig a $_POST tömbbe új elemeket pakolhatok, vagyis a gond megoldva: ilyen módon elküldöm az eredeti nevet, id-t, és akármit, amit csak szeretnék...
Ráadásul biztonságosabb megoldás.
Szóval a gond megoldódott.Az admin oldalt nem véletlenül validálom: az eddigi részek mind validak, így ez már egyrészt szinte presztízskérdés
, na de ami sokkal fontosabb, hogy a validálással rengeteg hibát is fel lehet fedezni, pl. sokszor előfordult, hogy a PHP által generált kódba sikerült belekutyulni olyan módon a HTML-kódot, hogy maga az oldal elcsúszott - a validálással viszont többnyire igen gyorsan rájöttem, hogy hol is lehet a hiba; ezenfelül nem véletlenül találták ki a valid kódot, mert így csökkentem annak az esélyét, hogy különböző böngészőkben különböző módon jelenjenek meg a dolgok, persze nyilván már amennyire szabványkövetők (ha nem is szabvány, csak ajánlás) a böngészők... (lásd IE, stb.)
De mondok még egy érvet: kis gyakorlattal és odafigyeléssel nagyon egyszerű valid kódot írni...Hidd el, nem haszontalan.
------------
A Te kérdésedre:
nálad az "ajaxload' osztállyal ellátott HTML-elemeknek van href-attribútumuk?
mutass rá példát, pl. így van, ahogy itt?
<a href="akarmi.html" class="ajaxload">...</a>A load() függvénynél felesleges a második paraméter, ha azt nem használod semmire.
Mutass konkrét példát, és akkor sztem tudok segíteni. -
Sk8erPeter
nagyúr
válasz
Speeedfire #5416 üzenetére
Hülyeségnek tűnhet, hogy admin-oldalt szeretnék validálni, de mégis.
Operából Direct Inputtal el lehet küldeni validálásra az oldalt (vagy más böngészőben beépülővel), szóval ez nem kérdés, tudom ellenőrizni a validitást.
A szóköz azért fordulhat elő az id-ben, mert lehet olyan név, amit lekérek adatbázisból, amiben előfordul szóköz (nem tudhatom, hogy a júzer milyen nevet tölt fel, de simán lehet, hogy olyat, amiben van szóköz).
Mondom, az eredeti nevet csak azért pakolom bele az id-be, hogy gyorsabb legyen ellenőrizni, nem úgy küldte-e el a júzer a "módosított" adatot, hogy valójában nem módosított semmit - ha nem módosított, megegyezik az eredetileg látott értékkel, minek nyúlkáljak adatbázishoz, úgysincs változtatás.Ja igen, ami fontos a megértéshez: a Jeditable úgy működik, hogy mondjuk megadsz egy CSS-osztályt (pl. "edit") egy HTML-elemnek (pl. egy div-nek), és onnan fogja tudni, hogy kétszeri ráklattyogásnál (lehet akár egyszeri is egyébként, több lehetőség van) módosítható legyen a mező, átalakítja form-má, azonbelül létrehoz egy input mezőt, majd egy Enter leütésével ezt a form-ot tudod elküldeni a feldolgozó fájlnak, majd az abból visszakapott adatot kiíratni - ha sikerült a módosítás, nyilván már a módosított adatot írod ki.
Maga a HTML-elem azonosítója (id) a $_POST['id'] változóval érhető el, a módosított érték pedig a $_POST['value'] segítségével (ez az input mezőből jön).Példa:
<div class="edit" id="nev_68_eredetinév">eredetinév</div>A példában szereplő "eredetinev" adatbázisból jön (ebben lehet szóköz is! Pl. "eredeti név"); a "nev" jelzi, hogy most mondjuk az adatbázisba feltöltött cuccnak a nevét szeretném módosítani, a "68" pedig az adott elem azonosítója.
Eszerint pedig szétrobbanthatom a $_POST['id'] változót mondjuk alsóvonás szerint (erre mondtam, hogy esetleg hibaforrás lehet, ha a júzer alsóvonás-karaktert ad meg, ez most átmeneti próbálkozás egyelőre), az új név pedig a $_POST['value'] változóban van:list($object_to_mod, $dog_id, $original)=explode("_", $_POST['id']);
$new=$_POST['value'];Ha a $new megegyezik az $original változóval, akkor visszatérek az eredeti névvel, és kész, nem vizsgálgatok tovább, így gyorsabb.
Remélem nem voltam túl zavaros.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #5414 üzenetére
Hali!
Sajnos az nem jó megoldás, mert az eredeti névre van szükségem. De az furcsa, hogy a HTML-kódra lecserélve sem fogadja el a w3c validitás-ellenőrzője.
Na, de jobb, ha elmondom, mire kell:
a Jeditable nevű jQuery-plugint használom egy admin-oldalon, ahol módosításokat lehet elvégezni egy adott névnél és egyéb adatbázisban szereplő elemeknél, de úgy, hogy a felhasználó csak kétszer ráklattyog a névre, és máris módosítható az elem, a módosítást pedig elküldi a feldolgozó PHP-fájlnak. Kényelmes, olyan jellegű, mint pl. Facebook-on a módosítható mezők (pl. a Magamról résznél, stb.), helyben módosítasz, nincs szükség az egész lap újratöltésére, stb.A HTML-elem (div, stb.) azonosító (id) attribútuma segítségével (többek közt ezt alakítja a Jeditable $_POST adattá, úgy, hogy a div-et formmá alakítja a ráklattyogáskor! Meg elküldi az input mezőbe beírt adatot) elküldöm az adott elem azonosítóját, ami alapján lecsekkolom az adatbázisban, tényleg van-e ilyen elem, valamint egy alsóvonással elküldöm az eredeti nevet is (ez viszont egyelőre hibaforrás lehet, ha a felhasználó alsóvonás-jelet ad meg a névben, mert explode()-dal bontom szét az elemeket, de ezt majd megoldom), hogy amennyiben megegyezik a módosított névvel, akkor egyszerűen visszaküldöm az eredeti nevet, és nem dolgozgatok fel, így gyorsabb.
Természetesen minden oldal elején ellenőrzöm, a felhasználó belépett-e (a módosító oldalon és a feldolgozó fájlban is), tehát valamelyest biztonságosnak mondható, még ha egyelőre vannak is lyukak benne...Ezért szeretném elküldeni az eredeti azonosítót és magát a mezőnevet is.
Többnyire nincsenek brutálhosszú dolgok, ami ne férne bele egy id-be, ezért gondoltam ehhez a módszerhez folyamodni...
Kerülő megoldás lehetne az, hogy csak az id-et küldöm el, de akkor minden alkalommal tényleg szükség van adatbázis-lekérésre, eddig ezt kerültem el azzal, hogy csekkoltam, megegyezik-e az eredetileg a mezőben szereplő értékkel, vagy sem, ha igen, akkor nem dolgozgattam fel, egyszerűen visszaadtam a júzernek ugyanazt a nevet (amit nem is módosított).Nem tudom, érthetően írtam-e le...
-
Sk8erPeter
nagyúr
Hali!
Kicsit OFF, de biztos tudtok segíteni.
Adatbázisból kérek le olyan adatot, amit egy HTML-elemnél az adott elem (div, p, stb., ez mellékes) azonosítójába szeretnék tenni. Ez oké, de lehet olyan adat, amiben szóköz szerepel, ami miatt az id-ben is szóköz van, ami XHTML Strict 1.0 szerint nem valid. Akkor sem, ha a szóközöket -re cseréltem, és még átnyomok rajta egy htmlentities()-t az egyéb karakterek miatt.
Tehát pl. <div id="akarmi 2_stb.">...</div> már nem valid az XTHML Strict szerint.
Van valami megoldási javaslatotok?Thx.
----------------------------------Szerk.:
Ja még egy: az XHTML Strict oldal esetén a w3c validitás-ellenőrzője nagyon sokszor pampog az elnevezési konvenciók miatt, tehát pl. az id-ben nem lehet tilde (~), vagy-jel (|) és ehhez hasonlók, van erről valami lista, hogy mik a megengedett karakterek? Így nem egyszerű valid oldalt készíteni, ha ennyi tiltott karakter van, és még a HTML-entitás (hogy mondjam ezt szebben) kódja szerint sem fogadja el.
-
Sk8erPeter
nagyúr
Bírom, hogy mindig az ilyen rendkívül fontos dolgokba kötsz bele...
(de ha a belekötésre reagálok is, az már nem érdekel) Miért nem érdemben szólsz hozzá?
Most speciel arra gondoltam, hogy ha mondjuk egy foreach-csel végigmászkál, és bizonyos dolgokat ellenőriz a $_POST tömbön (csak példa, ne keress ebben is hibát, ha kérhetem), akkor végül is tök felesleges másik változónak átadni, de a lényeg az volt, hogy az ilyen bemeneti értékeket lehetőleg ne módosítsa...erről is sikerült elterelned a figyelmet. Csak nem nagyon értem, mi a célod a kötekedéssel. -
Sk8erPeter
nagyúr
válasz
Speeedfire #5336 üzenetére
Az nem baj, ha dolgozol vele, felhasználod az értékeit (nem muszáj átadni másik változónak, sőt, sokszor felesleges - pl. végigrohangászhatsz egy foreach ciklussal a $_POST értékeken, átadni az értékeket másik változónak meg csak felesleges időveszteség (már amennyiben ez egyáltalán érzékelhető ideig tart)) csak az a furcsa, ha módosítod. Én nem tenném, persze mindenki azt csinál ezekkel a változókkal, amit csak akar.
Most megtaláltam cucka egy régi hsz.-ét, amire emlékeztem, ahol ő is pontosan ugyanerről ír, csak jóval több hozzáértéssel, mint ahogy én vakerászok: [link]A switch nagyon egyszerű, és megkímél a sok-sok if-elseif-else ág írogatásától, pl. a Te kódod esetén jelenleg így néz ki:
if-elseif-else megoldással:
if ($_POST['tipus'] == 'navigacio') {
// ...
}
elseif ($_POST['tipus'] == 'tartalom') {
// ...
}
elseif ($_POST['tipus'] == 'felhasznalo') {
// ...
}
// ...
else{ //ha egyik sem a fentiek közül
// ...
}ugyanez switch-case megoldással:
switch($_POST['tipus']){
case 'navigacio':
//...
break;
case 'tartalom':
//...
break;
case 'felhasznalo':
//...
break;
//...
default: //ha a fentiek közül egyikkel sem egyezik meg (ez az if-elseif-else ágból az utolsó, az else ág)
//...
break;
}(amúgy most nézem, nálad nincs az if-elseif után egy végső else, ami arra vonatkozik, ami egyik korábbi feltételre sem igaz, persze nem kötelező, de nem árt)
Szerintem legalábbis utóbbi átláthatóbb, jobban egységbe foglalja a feltételvizsgálatot.
Ezek tényleg csak tanácsok, nem kötekedés.
------
(#5324) nuendo: tényleg egész szépen elrendezi a kódot ez a PHP Formatter.
-
Sk8erPeter
nagyúr
Az a "bajom", hogy ez a "nyomorult" változótípus olyan változótípus, aminek a $_POST, $_SERVER, $_REQUEST, stb. változókhoz hasonlóan nem illik értéket adni, mivel ez a szkript bemeneti adata, és ha hozzányúlkálsz, akkor adott esetben előfordulhat, hogy saját magaddal szúrsz ki. Akkor már érdemes ezeket a bemeneti adatokat átadni egy másik változónak, és azt már tetszőlegesen módosíthatod. Persze megteheted, hogy ezeket a bemenetként kapott adatokat is módosítod, de azt úgy nevezik, hogy gányolás.
Ez hasonló ahhoz, mintha mondjuk C-ben az argc, argv változókat módosítanád. Az is gányolás. -
Sk8erPeter
nagyúr
válasz
Speeedfire #5313 üzenetére
a rengeteg elseif helyett megoldhattad volna switch-csel, így nagyon átláthatatlan
szerk.: amúgy bocs a kötekedésért, csak rég voltam a topicban, kicsit visszaolvastam, és szemet szúrt ez meg az előző -
Sk8erPeter
nagyúr
válasz
Speeedfire #5251 üzenetére
Ez aztán jó ronda megoldás...
($_GET változónak értéket adni? Hmm...
)
-
Sk8erPeter
nagyúr
válasz
fordfairlane #5028 üzenetére
Köszi szépen!
-
Sk8erPeter
nagyúr
válasz
fordfairlane #5026 üzenetére
Már PHP 5.3.0-tól is deprecated, a történelmi előzmény érthető is, meg nem is, de ez nem változtat az eredeti kérdésen.
Továbbra sem jut eszembe más, mint bent hagyni a mysql_real_escape_string() fv.-t, mert én adatbázisba töltök fel, de mivel a magic_quotes_gpc beállítás továbbra is úgy marad, először el kellene tüntetni belőle az escape-elt karaktereket, hogy ne legyen duplán escape-elve... Később egyszerűbb lenne a stripslashes()-t eltávolítani, mint most kihagyni valamelyik lépést (pl. a mysql_real_escape_string()-et), ami amúgy sem lenne praktikus szerintem. Nem?
Szerk.: látom miközben írtam a hsz.-t, szerkesztetted a sajátodat.
"a stripslashes-t kell feltételes módban és tömbre rekurzívan meghívni"
Hogy érted, hogy "feltételes módban"? Mit kellene vizsgálni?Amúgy lehet, hogy késő van, de most az sem esik le, hogy tömbre miért rekurzívan? Pl. sima foreach-csel bejárom. Vagy lehet, hogy félreértelek.
-
Sk8erPeter
nagyúr
válasz
fordfairlane #5021 üzenetére
Akkor magyarul ilyen esetben csak az a megoldás, hogy ha automatikusan escape-elődik pl. az összes $_POST érték, és ezzel tisztában vagyunk, akkor először alkalmazzuk a stripslashes() fv.-t, majd a mysql_real_escape_string() fv.-t az adatbázisba való feltöltéshez (amit amúgy is kellene, csak a stripslashes() nélkül már duplán lenne escape-elve)?
Csak mert nálam is van egy hasonló probléma, de a mysql_real_escape_string() fv.-t nem szeretném elhagyni, mert ki tudja, később nem lesz-e PHP-verzió-váltás vagy egyéb módosítás (pl. az általad említett opció kikapcsolása).
Így elsőre gánynak hangzik, de nem jut eszembe jobb megoldás. -
Sk8erPeter
nagyúr
válasz
Speeedfire #4962 üzenetére
"Azért van ott az ob_start() mert már megszoktam a használatát, akár milyen kicsi is a program használom."
Csak akkor használd, ha nagyon muszáj, mert egyébként nagyon rossz programozási gyakorlathoz vezethet, és más számára is kevésbé áttekinthető a program.
Ezenkívül tök felesleges ott alkalmazni, ahol egyáltalán nincs rá szükség (pl. nem akarsz az output után még átirányítani header()-rel), na meg ellenkezik az MVC-szemlélettel.
(Egy szóval: gányolás!)
"Miért baj echo-zni a statikus dolgokat?"
Felesleges lassítani a megjelenítést, ha gyorsabb is lehet. És megint csak az átláthatóság..."így olvastam a leírásokat a neten"
A net tele van szeméttel...--
Geshi-vel kapcsolatban: már eleve az example.php sem megy? Nem néztem bele a kódjába, de elvileg nem kéne, hogy baja legyen magasabb számú PHP-verziókkal, de esetleg adhatnál neki egy próbát, hogy kipróbáld korábbival, mint az 5.3.0. Bár szerintem valahol máshol lesz a hiba.
A MySQL-rész NÉLKÜL is kipróbáltad már a kódodat? Ha anélkül sem megy, akkor nem az adatbázissal hozható kapcsolatba, legalább akkor ezt ki lehet zárni.Szerk.: ja, amúgy a kódodban az hibás, hogy a megjelenítés során is escape-elve jelennek meg az idézőjelek, aposztrófok és egyéb speciális karakterek (pl. echo \"valami\"
. Ettől függetlenül működik, csak rosszul jelenik meg a kód.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4960 üzenetére
nálam most localhoston:
PHP 5.2.6
Apache 2.2.8Kipróbáltam a Te kódodat is (kiszedve az adatbázis-műveleteket), az is jól működik nálam.
Konkrétan nálad mi a hibajelenség?Szerk.: amúgy a kódodban tök feleslegesen használod az ob_start(); függvényt, nyugodtan pakolhatnád még az output elé az átirányítást, megfelelően átírva a kódot.
Amúgy is értelmetlen az egész HTML-részt echo-val kiíratni, mivel annak többsége mindig statikus. Válaszd szét jobban a kódodat (pl. a MySQL-csatlakozást is tedd még az output elé), mert így nehezen átlátható, ráadásul nem túl elegáns. -
Sk8erPeter
nagyúr
válasz
Speeedfire #4958 üzenetére
Kipróbáltam, tökéletesen működik localhoston.
Egy 1300 soros kóddal próbáltam ki...Szerk.: a contrib/example.php segítségével próbáltam ki.
-
Sk8erPeter
nagyúr
Na de lehet, hogy a korábban feltöltött adatok nem UTF-8 kódolással kerültek az adatbázisba, így utólag kellene javítani őket. De ezt könnyen ki tudod deríteni, hogy az volt-e a gond, ha ugyanazzal a módszerrel, amivel a korábbi adatok bekerültek, feltöltesz valami új bejegyzést az adatbázisba, csak annyi különbséggel, hogy az általam előbb írtakat is beleteszed, majd azt is lekérdezed, megnézve, hogy javult-e. Ha igen, akkor ki kell javítani a korábbi bejegyzéseket.
-
Sk8erPeter
nagyúr
Győződj meg róla Notepad++-ban, hogy biztosan UTF-8 kódolásúak-e a fájljaid, és mielőtt adatbázis-műveleteket hajtasz végre, a MySQL-csatlakozás után küldj ki egy ilyet:
mysql_query('SET NAMES utf8');Az oldal legelejére, minden output előtt pedig állítsd be a fejlécet UTF-8-ra:
header('Content-Type: text/html; charset=utf-8'); -
Sk8erPeter
nagyúr
"Én úgy szoktam csinálni, hogy nem használok echo-t, hanem egy $html vátozóba írom a html outputot."
Én is így csinálom két oldalnál is, de pont azt mondta pár hónappal ezelőtt Tele von Zsinór, hogy PHP-ban a stringműveletek relatíve lassúak. -
Sk8erPeter
nagyúr
válasz
Speeedfire #4911 üzenetére
Bár nem igazán értem az értelmét a kódodnak, reguláris kifejezéssel ilyen lenne:
elseif ( isset($_GET['sorszam']) and (!preg_match('[\/admin\/.*]', $oldal) ) ){
...
}Remélem stimmel, nem teszteltem túl hosszan, de 3 dologra jól működött.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4879 üzenetére
Most nincs időm átnézni a kódot, de az ilyen mennyiségű idézőjel-escape-eléseket elkerülhetnéd (így nagyon áttekinthetetlen szerintem):
echo "<div class=\"margo\"><table><tr><td class=\"num\">\n$lines\n</td><td>\n$content\n</td></tr></table></*div>";
(Itt ez a </*div> amúgy hibás)
sima aposztrófok használatával:
echo '
<div class="margo">
<table>
<tr>
<td class="num">'.$lines.'</td>
<td>'.$content.'</td>
</tr>
</table>
</div>'; -
Sk8erPeter
nagyúr
válasz
Speeedfire #4796 üzenetére
Kicsi projektnél is van értelme az átláthatóság növelésének.
A notice szerint már van valahol egy session_start(); hívás. Ha require_once-szal az általad mutatott kódot mindenhol include-olod, ahol szükség van session elindítására és MySQL-csatlakozásra, akkor az összes többi session_start();-ot és MySQL-csatlakozást kiveheted! Akkor már nem fogja dobni a notice-t.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4787 üzenetére
Csináld úgy, ahogy Tele von Zsinór mondja, de azért azt is mondhattad volna, hol vannak notice-ok, és mi az üzenet tartalma, mert szerintem kizárt, hogy valaki elejétől végéig átböngészi a kódot, hibákat keresve.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4784 üzenetére
tudsz mutatni komplett kódrészletet? nem nagyon olvastam vissza, de kicsit egyszerűbb lenne látni, miről van szó.
a session_start()-ot a kódod legelején add ki.echo "session_start();"
ennek semmi értelme, ez jól kiírja, hogy session_start();, és annyi. -
Sk8erPeter
nagyúr
válasz
Speeedfire #4757 üzenetére
Eddig azt hittem, az már megvolt, hogy maga a fájlod UTF-8 kódolású...
Ha az nincs meg, akkor tök feleslegesen erőlködsz, össze-vissza kódolásokkal mindenképp szar lesz a karakterkódolás.
Ragaszkodj egyféle karakterkódoláshoz következetesen, különben szívni fogsz vele (mint látható).
Notepad++ » Kódolás » "Átalakítás UTF-8 kódolásra BOM nélkül" menüpontra klikkelj az összes olyan fájlnál, ami nem UTF-8 kódolású (ld. DeltaPower hsz.-ét). (Itt fontos, hogy az "Átalakítás..." kezdetűre menj, különben megint csak rossz lesz.)
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4751 üzenetére
Azért a fájljaidba a <!DOCTYPE...> elé (!) beszúrhatnád a köv. sort:
<?php
header('Content-Type: text/html; charset=utf-8');
?>Lehetőleg a MySQL-csatlakozást is még előtte intézd el, és a
mysql_query('SET NAMES utf8');
sort is illene az elé pakolni.Ha fv.-be és külön fájlba pakolod a MySQL-csatlakozást, akkor ilyesmi lehetne pl. végeredményként:
<?php
header('Content-Type: text/html; charset=utf-8');
require_once('functions.php');
//MySQL-csatlakozás:
csatlakozas();
mysql_query('SET NAMES utf8');
//...
?>
<!DOCTYPE .....> -
Sk8erPeter
nagyúr
Egy darabig én is használtam a 000webhostot, de közel sem voltam elájulva a sebességétől - sőt, sokszor kifejezetten lassú volt. A szolgáltatások valóban nagyon széleskörűek, az nagy előnye.
Ultraweb gyorsaságával speciel még nem volt gondom. A reklámcsík mondjuk gáz, és valszeg itt kevesebb szolgáltatás elérhető, mint 000webhoston. -
Sk8erPeter
nagyúr
Igen, mert a böngészők átmenetileg tárolják ezeket az adatokat, és frissítésnél újból elküldik - Chrome és FF alapból figyelmeztet is erre, amikor frissítesz.
Úgy tudod megoldani, hogy a form feldolgozását nem ugyanabban a fájlban végzed, amiben a megjelenítés történik, hanem szétválasztod, a formot elküldésnél átirányítod egy külön fájlba, ahol feldolgozod az adatokat, ott esetleg session változókba lemented a siker/hibaüzeneteket, feldolgozás után visszairányítod az eredeti fájlba, ahonnan indultál, majd ott kiíratod ezeket az üzeneteket (előtte ellenőrizve, hogy be van-e állítva az adott session változó), majd az üzeneteket tartalmazó változókat rögtön kiíratás után meg is szünteted (hogy ne jelenjen meg minden oldalfrissítésnél). Ilyenkor frissítésnél nem fogja újból feldolgozni az adatokat.
Normális esetben ettől nem lesz észrevehetően lassabb (az átirányítások miatt) az egész feldolgozás. -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4679 üzenetére
Hát rögtön gondoltam, hogy "egy oldalra megy"...
Nem is értem ezt a választ, de te biztos tudod, mit akartál ezzel mondani.
-
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4675 üzenetére
Elég zavaró lesz, ha majd valaki megadja a termék nevét, és mondjuk ő, ú, ű betűket vagy ezek nagybetűs változatait fogja használni, és hibát fog dobni a rendszered...
Na meg ha már ilyen reguláris kifejezésekkel ellenőrzöl, akkor az összes szám kiírása helyett mennyivel egyszerűbb és rövidebb lenne egy tartományt megadni: 0-9 . Ehelyett: $adatok['termek'] == "" egyszerűbb lenne ez: empty($adatok['termek']) ... Az emailt és az eladónevet egyáltalán nem is ellenőrzöd...
A többit nem néztem. -
Sk8erPeter
nagyúr
Elképzelhető, hogy már a standalone.php fájlod előtt van valami kimenet.
Elvileg a hibaüzenet alapján már az index.php 3. soránál el van küldve header, a standalone.php 77. sorában pedig újra próbálkozol vele, a kettő között meg van valami kimenet. Próbáld meg elejére pakolni az ob_start()-ot, ha már muszáj ezt használni...
De jobb lenne látni az egész ide vonatkozó kódot tippelgetés helyett, hátha van jobb megoldás is. pastebin.com, codepad.org, ezekre szintaxiskiemeléssel tudod felpakolni a kódot, majd berakhatod ide a linket, és akkor rá tudunk nézni.
Mi szerepel az említett sorokban? -
Sk8erPeter
nagyúr
válasz
tgabi333 #4634 üzenetére
"Jó megoldás lehet méga session_start-helyett az ob_start is."
Téged idézve:
"Ez a hozzáállás az amit úgy hívok, hogy gányolás"
Na, most te lettél elővéve...Itt már volt szó róla, nem tudnám jobban leírni, mint cucka: [link]
(Mellesleg jó, hogy miután engem jól lefikáztál egy átmeneti tanácsért, végül az eredeti kérdést nem segítettél a srácnak megoldani.)
-
Sk8erPeter
nagyúr
Használd a stripslashes() függvényt ott, ahol a kiíratást elvégzed, és ha jól csinálod, megvagy.
-
Sk8erPeter
nagyúr
"A jelen esetben viszont a levél tartalma a weboldalon található form-ból jön, na itt már nem mindegy a weboldal kódolása."
Na ez az, éppen ezért volt ellentmondásos, amit írtál.
Mégpedig ez:
"Na látom még senkinek nem tűnt fel egy apróság, ezért beleszólok én is.
Egy dolog a weboldalad karakterkódolása és egy teljesen más dolog a php programod által elküldött email karakterkódolása. A weboldalad karakterkódolásának tulajdonképpen semmi köze az email küldéséhez."A többivel kapcsolatban teljesen egyetértek.
-
Sk8erPeter
nagyúr
Ez most lehet, hogy csak számomra tűnik ellentmondásosnak. Azt mondod, hogy az email végső kódolásának, a küldött adatoknak köze nincs a weblap karakterkódolásához, aztán kifejted, hogy mégis (pl. "- a weboldalad szövege megfelelő karakterkódolású legyen - a <head> részben töltsd ki a karakterkódolást. -..."). Vagy csak félreérthető volt a postod (számomra igen).
Szép dolog az előre megírt osztályok használata, de tulajdonképpen jó lenne rábírni, hogy rendesen működjön saját módszerrel is, abból lehet tanulni, ha Te írod meg. Múltkor nálam is volt valami probléma a levélküldésnél bizonyos karakterkódolásoknál, azóta mondjuk még nem volt időm foglalkozni a levélküldözgetésekkel, megoldottam más kódolással. Az előbb leírt megoldás problémájára kellene rájönni, az lenne a legjobb. -
Sk8erPeter
nagyúr
válasz
scott_free #4563 üzenetére
Egyáltalán beállítottál karakterkódolást a levélküldéshez?
Bocs, de pánikolás helyett inkább előbb olvass utána...ha nagyon nem találod a választ, majd akkor ijedj meg, hogy jujj, nem lesz megoldás, mi lesz veled...
Eddig nem közölted, hogy emailnél van (vagy annál is) a probléma.Cikk:
Levélküldés PHP-ben -
Sk8erPeter
nagyúr
válasz
scott_free #4561 üzenetére
Az "ÁTALAKÍTÁS" kezdetűre mentél?
(NE a simára...)
Mellesleg miért érdekel, hogy a fájlod nagyobb-e pár bájttal? Felejtsd már el azt a rakás szar Frontpage-et, nem értem, manapság hogy lehet még ilyen fos programot használni. Ha már fizetős program, akkor pl. Dreamweaver (többek közt)."pl. a Frontpage-es "©" jelet a Notepad++ átalakítja "©"-ra."
És szerinted a Frontpage-es kódban hogy szerepel?
Nézz utána a HTML-kódoknak ([link]), és akkor nem fog annyira zavarni... -
Sk8erPeter
nagyúr
válasz
scott_free #4559 üzenetére
Hát akkor elb×tam a menü nevét, épp nem volt megnyitva a Notepad++, amikor írtam. De ezek szerint sikerült rájönnöd.
Azt, hogy mit kell tenned, már mondtam ("Átalakítás UTF-8 kódolásra BOM nélkül"). Szóval nem értem, mi a problémád. -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4554 üzenetére
Miért akarsz 777 jogot adni? Hogy bárki hozzáférhessen? Nem túl jó ötlet, bár már önmagában az sem jó ötlet, hogy kiírod egy txt-fájlba ezeket az adatokat, főleg hash-elés nélkül. Nem is értem a célját.
Számtalan példa van a php.net-en az fwrite(), file_put_contents() függvények használatára, akár onnan ki is másolhatod (a fájlnevet átírva persze), elég egyértelműen vannak kommentezve.
Abba a fájlba tedd a fájlírást, amelyikben az űrlap feldolgozását végzed.Az egyik példa alapján lehetne a következő, persze ellenőrzések után (csak egy-két dolgot módosítottam a megtalálható példán):
<?php
$file = 'felhasznalo.txt';
// The new user to add to the file
$user = $_POST['username'] .' | '. $_POST['password'] . "\n"; // függőleges vonallal elválasztva név | jelszó formában
// Append the contents of $person to the file named by $file.
file_put_contents($file, $user, FILE_APPEND);
?>Ez mindig hozzáfűzögeti a megfelelő sorokat a fájlodhoz (ha nem akarod, hogy hozzáfűzzön, csak átírjon, akkor ne állítsd be a FILE_APPEND flaget).
De még egyszer mondom, ez ebben a formában nagyon nem jó ötlet, hacsak nem szeretnéd, hogy könnyedén hozzáférjenek a védett tartalomhoz! -
Sk8erPeter
nagyúr
válasz
scott_free #4552 üzenetére
Hali!
Hát igen, a php, html vagy egyéb kiterjesztésű fájlodat, amiben az oldal forráskódja található. -
Sk8erPeter
nagyúr
válasz
scott_free #4550 üzenetére
Na várj, maga a dokumentumod UTF-8 kódolású?
Notepad++-ban Formátum menüben tudod megnézni (melyik előtt van a pötty). Ami neked kell, az az "UTF-8 kódolás BOM nélkül", ha nem erre van beállítva, akkor menj az "Átalakítás UTF-8 kódolásra BOM nélkül" menüpontra (így nem kell újraszerkesztened a fájlodat az ékezeteknél). -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #4526 üzenetére
Valószínű tényleg ez az elgondolás volt az alapja, köszi.
(#4527) DeltaPower: remélem ez az 50 byte kód spórolás nem volt komoly...
Mellesleg annak semmi értelme, hogy megnézed, mit ad eredményül a trim, és ha az a feltételed nem teljesül, akkor ha létezik és van értéke a változónak (isset), akkor... Mellesleg az én kódom kb. pár karakterrel hosszabb, de legalább úgy már van értelme.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #4519 üzenetére
"a php4-féle konstruktort használtad (osztályneve függvény), ezt átírtam __construct-ra."
Amúgy vajon mi az oka, hogy ezt megváltoztatták __construct-ra? Csak annyi, hogy legyen teljesen egyértelmű, mit csinálunk? (C++-ból már megszoktam (bár nemrég tanulom), hogy az osztállyal azonos nevű a konstruktor)
Mondjuk állítólag visszafelé is kompatibilis a dolog:
"For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics." -
Sk8erPeter
nagyúr
válasz
DeltaPower #4523 üzenetére
Akkor már több értelme lenne inkább elsőként azt ellenőrizni, hogy egyáltalán be vannak-e állítva a megadott POST változók...
Pl. valahogy így:<?php
if(isset($_POST['acc']) && isset($_POST['jelszo']){
if ( trim($_POST['acc']) == "" || trim($_POST['jelszo']) == "" ) {
header('Location: reglap.php');
}
else{
require_once("muveletek.php");
}
}
else{
// ... ??
}
?> -
Sk8erPeter
nagyúr
válasz
PowerBuldog #4516 üzenetére
Mi az, hogy mit csinál?
Ide bemásolhatod copy-paste módszerrel a forráskódodat, a "Syntax highlighting" résznél meg bejelölöd, hogy PHP-kódot szeretnél kiemeltetni, címet is adhatsz neki, elküldhetheted a linkjét magadnak. Arra jó, hogy ilyenkor egy fórumra csak bedobod a linkjét a forráskódnak, és ott már szépen kiemelgetve látják a kódot, nem kell máshova bemásolnod az egész cuccot. -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4461 üzenetére
"Meg világost írtam nem vilagost...." Pff, ezt remélem nem gondoltad komolyan...
Segít neked, te meg így válaszolsz. Hallottál már olyanról, hogy valakinek nem magyar billentyűzete van?
-
Sk8erPeter
nagyúr
Esetedben mit jelent az, hogy "van-e megadva termék"? Hol? checkbox-szal kipipálva, radio buttont bejelölve, ... ? Az elég nyilvánvaló volt, hogy submit típusú gombbal küldöd el a formot, de igazából a lényeget nem mondtad el, hogy mit csinál a vegrehajt.php fájlod, meg hogyan kell megadva lennie a különböző termékeknek.
Ezenkívül az if(mysql_query(...)) sorral csak annyit csinálsz, hogy megnézed, hogy a lekérdezés sikeresen végrehajtódott-e, azt nem vizsgálod meg vele, hogy létezik-e ilyen elem az adatbázisban. A mysql_query() sikeres lekérdezés esetén mindenképp valamilyen eredményazonosítóval (vagy true-val) tér vissza, ez pedig azt jelenti, hogy akkor is a feltételvizsgálat igaz ága teljesül, ha a megadott lekérdezésre üres eredményhalmazt ad vissza a MySQL, hiszen szintaktikai és egyéb (táblanév, stb.) hibák nem fordultak elő, csak a megadott szempontok szerint nem létezik olyan elem az adatbázisban.
Érdemes lenne inkább azt vizsgálnod, létezik-e olyan elem az adatbázisban. Na meg azért azt is mondd el, mi a célod, úgy könnyebb segíteni. -
Sk8erPeter
nagyúr
Ez elég furcsa, lehet, hogy ott, ahol először próbálkoztál, alapértelmezettnek vette az ob_start()-ot...
Ez a kimeneti bufferelés viszont nagyon rossz programozói gyakorlathoz vezethet, és nehezebbé teszi az átláthatóságot, ráadásul bőven megoldható enélkül is mindenféle feladat.
cucka itt korábban leírta erről a véleményét: [link], szerintem igaza van. -
Sk8erPeter
nagyúr
include()-old a kívánt oldalakat a megfelelő helyen (vagy létezik még az include_ once(), ill. a require() és require_once() függvény is - a _once végződésűek esetén annyi a különbség az anélküliektől, hogy ha a kódban esetleg több helyen is include-oltad már valamilyen oknál fogva az adott fájlt, akkor ez az első include-olás után figyelmen kívül hagyja a parancsot; a require és require_once esetén pedig megszakad a programfutás, ha nem sikerült include-olni a fájlt [pl. nem létezik a megadott helyen]).
A frame-ek használata pedig tényleg kerülendő, sokat lehet szívni vele, és nagyon jól meg lehet lenni frame-ek nélkül is. -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #4357 üzenetére
Értem, thanx! Ilyen módon mondjuk tényleg egy biztonsági rést jelenthet.
-
Sk8erPeter
nagyúr
Nem tudom, lehet, hogy félreértettem, de az előbbi esetben most nem arról volt szó, hogy mondjuk egy cím mögé írt $_GET azonosítót elfogadva ellenőrizgetjük, hogy adott felhasználó belépett-e?
Azért az, hogy a felhasználónál tároljuk a session erejéig, talán akkor is kicsit megbízhatóbbnak tűnik, mintha bárhonnan hozzáférnek egy azonosítóhoz egy ilyen kis query stringgel...(#4351) Tele von Zsinór: ennek mi a lényegi funkciója?
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #4349 üzenetére
No de itt azzal kezdi, hogy "Most session fixation attacks are web based, and most rely on session identifiers being accepted from URLs (query string) or POST data."
Hát ki az az állat, aki URL-ben vagy POST-ban elküldött SID alapján elfogad egy belépési kísérletet? -
Sk8erPeter
nagyúr
Miért nem használsz inkább $_SESSION változókat, ha nem szeretnéd, hogy a felhasználó gépén tárolódjanak az adatok? A session időtartamára is igaz egy-két dolog, ezt már cucka korábban leírta, én nem írom még egyszer
: [link]
Megszüntetni hasonlóan a többi változóhoz az unset() függvénnyel lehet.
Miért ragaszkodsz ennyire az Internet Explorerhez?
A konkrét kérdéseddel kapcsolatban a PHP-kódod szempontjából nem igazán számít, melyik böngészőt használod...
-
Sk8erPeter
nagyúr
Igen, ez így rendben van, mivel mindig a legutolsó elemhez ad hozzá egyet, ez az AUTO_INCREMENT lényege.
Van mód rá, hogy újraszámozd a sorokat, ha ez nagyon zavar: [link]. De csak óvatosan a törlésekkel, előtte mentsd ki az adatbázist (ez csak az azonosítómezőt dobja el, de nehogy véletlenül mást is eldobj). -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4315 üzenetére
Nem érthetőbb, de mindegy.
Ha a MySQL-kódra vagy kíváncsi, akkor az valami ilyesmi:
SELECT power FROM users;Milyen powerről beszélsz??? Mi ez? Valami online játék? A játékosoknak különböző szintű "erejük" van? Vagy mi a frász ez?
-
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4313 üzenetére
Senkit nem vezettél félre, csak még mindig nem akarod megérteni, hogy a semmiből senki nem fogja neked kitalálni, hogy a users táblád pontosan hogy néz ki, milyen mezői vannak, jelenleg milyen paranccsal kéred le az adatbázisból, és mi nem stimmel. Eddig még egyszer sem mutattál olyan kódot, amiből ezt ki lehetne hámozni, mindig csak egy-egy PHP-kóddal vegyített többsoros HTML-kódot (!! nem PHP-kódot!!!) mutogatsz...
Ja, és még azt sem közölted, mi a t÷kömre való az a $power változó, egyáltalán minek kellene benne lennie... Fárasztó. -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4304 üzenetére
Pfff, legközelebb az ilyen b@szom nagy kódokat inkább tedd fel pastebin.com-ra, csak bemásolod oda a kódodat, "Syntax highlighting"-nál kijelölöd a PHP-t, és Submit, ennyi, aztán jöhet ide a linkje...
Abban a kódban, amit küldtél, szinte semmi PHP nincs, csak a változó-behelyettesítéseknél.
Pont ennek a template-nek a működését nem fogja neked kitalálni senki.
Olvasgasd szorgalmasan valamelyik PHP-könyvet. Az elejétől. -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4300 üzenetére
De könyörgöm, inkább azt mutasd már meg, hogy a $power változód HOL kap értéket?? Honnan kéne kitalálni?!
Ezenkívül ha kódot másolsz be, akkor jelöld ki a kódrészletet, és itt a hsz.-írásnál nyomd meg a "Programkód" gombot, akkor kissé átláthatóbb lesz...Szerk.: vagy Te úgy gondolod, hogy a PHP-nek ismernie kellene az általad kitalált $ved és $gyors változókat?
Szerk. 2.:
(#4302) Tele von Zsinór: ja jó, akkor megnyugodtam, azt hittem, csak én érzem úgy, hogy itt valami nem stimmel...Mellesleg komolyan, olyan, mintha a srác valami paródiát akarna csinálni a PHP topicból...
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #4295 üzenetére
Te amúgy tudod, miről van szó? Én valamiről lemaradtam?
Csak mert én egyáltalán nem látok kódot, ami alapján kisajtolhatnánk, hogyan van megvalósítva a progi.
Te viszont úgy tűnik, mintha értenéd, és nem tudom, honnan.
Vagy csak tippelgetsz?
-
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4284 üzenetére
És most hogy találjam ki, milyen "erő" van "belekódolva" a $power változódba?
-
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4282 üzenetére
OK, akkor no para.
Sajnos a neten sok fos kód kering, ezek szerint ez is azok egyike. -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4277 üzenetére
Ennek a két sornak:
$_POST['bullets'] = rand(1, 10);
$_POST['bullets'] = $own['kogels'];
Mégis mi a frász értelme van?
Mi értelme egy $_POST változónak értéket adni?
Segítek: semmi.Amúgy szólj nyugodtan, ha nem magyar nemzetiségű vagy, akkor megértem, hogy ennyire helytelenül fogalmazol.
-
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4275 üzenetére
"hogy az adott összeget elvegye"
Hol van itt összegzés?"csak nem tudom a randomba be tenni sehogy sem"
Mit akarsz betenni a randomba?
Miért nem lehet magyarul megfogalmazni a problémát, hogy ne kelljen feleslegesen 5 hsz.-t váltani arról, hogy mit is akarsz csinálni? -
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
Ez alapján kissé nehéz lesz kitalálni, hogy Te ellenőrzöd rosszul, hogy működik-e a .htaccess, vagy máshol van a gebasz... Egy darab részletet nem mutattál abból, hogy hogyan tesztelgeted egyáltalán, és mit... Miért jó az, ha egy problémát 20 hozzászólásban kell megoldani, ha lehet, hogy meg lehetne oldani 2-vel is?
-
Sk8erPeter
nagyúr
válasz
DeltaPower #4263 üzenetére
Azt nem értem, hogy a JavaScript miért engedi meg, hogy lehagyja az ember a sor, ill. összetartozó utasításblokk végéről a pontosvesszőt...
Pl. az utóbbi linknél borzalmasan néz ki a kód, így, hogy minden sor vége tök üres, sehol egy pontosvessző...sztem ez az engedékenység nagyon helytelen programozói szokások kialakulásához is vezethet, így lehet abszolút átláthatatlan kódot írni. Persze a linken szereplő még elmegy, de egyébként nagyon rossz, hogy nem lehet szemmel elkülöníteni, hol van az egyes különálló "blokkok" vége.
Ráadásul az ilayer sor vége is igen érdekes, sehol egy elválasztó idézőjel:
<ilayer id="slidensmain" width=&{slidewidth}; height=&{slideheight}; bgColor=&{slidebgcolor}; visibility=hide>
Pff, hát nem tudtam, hogy a dynamicdrive-ra is felkerülnek ilyen gány kódok. -
Sk8erPeter
nagyúr
Legegyszerűbb, ha checkbox-ok formájában jeleníted meg az összes fájlt, így többet is tudsz törölni. A következő módon képzeltem el (a könyvtár nevénél az általad írt nevet használtam fel):
legyen a megjelenítésért felelős fájl az index.php
index.php :<?php
session_start(); //sessiont indítunk
header('Content-Type: text/html; charset=utf-8'); //karakterkódolás
$dir = opendir("../ahol_torlok"); //könyvtár beállítása
while(false !== ($file = readdir($dir))){
if (strpos($file, '.txt',1)){
$file_array[]=$file; //fájlnév eltárolása tömbben
}
}
?>
<html>
<head><title>Txt-törlő</title></head>
<body>
<?php
if( isset($_SESSION['message']) ){ //ha létezik a változó, vagyis van törlésről szóló üzenet (siker vagy hiba)
echo $_SESSION['message']; //kiírjuk
unset($_SESSION['message']); //kiírás után töröljük
}
?>
<form method="post" action="torles.php">
<?php
//=0;
foreach($file_array as $i=>$file_to_delete)
echo '<input type="checkbox" name="file_select[]" value="'.$file_to_delete.'" id="'.$i.'" />'.$file_to_delete.'<br />';
?>
<input type="submit" name="del_files" value="Kép feltöltése" onclick="return confirm('Biztos, hogy törlöd a kijelölt fájlokat?')" style="height:50px;margin:20px;" />
</form>
</body>
</html>És legyen egy torles.php (az index.php-vel azonos könyvtárban), amelyik fájlba az űrlapot átirányítod, és amivel törlöd a kijelölt fájlokat (ez a feldolgozó fájl):
torles.php :
<?php
if( isset($_POST['del_files']) )
{
session_start();
$_SESSION['message']=''; //hibaüzenetekre és sikert jelző üzenetekre
$dir='../ahol_torlok';
foreach($_POST['file_select'] as $index=>$name_of_file){
$name_of_file=stripslashes($name_of_file);
if(true === unlink( $dir.'/'.$name_of_file ) )
$_SESSION['message'].=($index+1).'. sikeres törlés! A "'.$name_of_file.'" nevű fájl törlése sikeresen megtörtént! <br />';
else
$_SESSION['message'].=($index+1).'. Hiba! A "'.$name_of_file.'" nevű fájl törlése meghiúsult! <br />';
}
}
//Átirányítás az eredeti oldalra
header('Location: index.php');
?>Persze esetleg a fájlnevekre még be lehetne tenni valami ellenőrzést, de ezzel most nem foglalkoztam. De mivel pl. az idézőjel nem megengedett a fájlnévben, ezért nem lesz probléma.
Természetesen előtte kipróbáltam, működik.
Ha valami nem világos, kérdezz.
Remélem sokat segítettem. -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4233 üzenetére
Jahh, arra az előbb nem is figyeltem, hogy ott is van egy $username, bocsi. Igazából az alapján a gondolatmenet alapján kellett volna megcsinálnod a másik $username-et is.
Azóta 1ed megírta a jó választ.
(#4232) RoyalFlush: hajrá, hajrá!
Csak gyakorolj sokat. Eleinte valszeg szívni fogsz vele, készülj fel rá (szívás nélkül nem lehet igazán megtanulni semmit sem
), aztán megkedveled.
-
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4229 üzenetére
Nem az egyenlőségjel okoz problémát, hanem az idézőjel helytelen használata.
2 megoldás van:
1.) escape-eled az idézőjelet:
echo "<b>Nev:</b> <a href=\"viewprofile.php?viewprofile=$username\" target=\"_parent\">$username</a>" ;2.) Sima aposztrófot használsz az idézőjel helyett a sztring egységbe foglalására, csak ilyenkor arra kell figyelni, hogy a $username nem helyettesítődik be, de erre nagyon egyszerű megoldás a hozzáfűzés:
echo '<b>Nev:</b> <a href="viewprofile.php?viewprofile=$username" target="_parent">'.$username.'</a>' ;
Szerintem az utóbbi átláthatóbb. De egyéni ízlés kérdése.
Kezdetben sokáig használtam az első módszert, aztán rájöttem, hogy az utóbbi számomra sokkal kényelmesebb és átláthatóbb megoldás. -
-
Sk8erPeter
nagyúr
válasz
PazsitZ #4223 üzenetére
Na basszus, teljesen igazad van.
(Ezt az error_reporting = E_ALL beállítással lehet a legjobban tesztelni (persze csak teszteléshez szabad ezt így engedélyezni, különben nem biztonságos). Meg itt is szerepel, hogy lefedi az isset() esetet: empty().)
Köszi, hogy szóltál! -
Sk8erPeter
nagyúr
válasz
Inv1sus #4206 üzenetére
Azért azt se ártana ellenőrizni előtte, hogy létezik-e egyáltalán a $_SESSION['loggedname']:
if( isset($_SESSION['loggedname']) )
esetleg még kiegészítheted azzal is, hogy nem üres-e
if( isset($_SESSION['loggedname']) && !empty($_SESSION['loggedname']) )
Utóbbi mondjuk nem kötelező - de előbbiért, ha a display_errors be van kapcsolva, akkor amennyiben nem létezik az adott változó, dob egy hibanotice-t.
Egyébként így elsőre nem világos, hogy most itt miért hasonlítgatsz össze - az nagyon nem biztonságos, ha session változóban tárolod a jelszavadat. De ha pl. adatbázisból szeded, akkor oké. -
Sk8erPeter
nagyúr
válasz
Robb202 #4193 üzenetére
Egyébként itt is van egy jó leírás:
Apache és PHP telepítése kezdőknek Windows rendszereken (Weblabor) -
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4188 üzenetére
Hogy jön ez a PHP topicba?
Egyébként ha van egy ilyen sorod:
<link href="/img/favicon.ico" type="image/x-icon" rel="shortcut icon" />
akkor a href-ben szereplő elérési út stimmel, azt megváltoztattad a megfelelőre? Egyébként meg töröld a böngésző gyorsítótárát. -
Sk8erPeter
nagyúr
válasz
vancha2 #4179 üzenetére
Nem tudom, minek magyaráztad meg a teljesen egyértelmű részt, mivel elég könnyű volt felfogni, hogy az mire jó, nem is azt kérdeztem.
Az előző hsz.-ben csak összegeztem, hogy ezek szerint minden egyes oldallátogatást el szeretnél menteni, nem elég az új látogatók lekérdezése, arra is kíváncsi vagy, hogy az egyedi látogató hányszor kattintgatott az oldalon belül, ill. hányszor frissített. Ugyanezt írtam az előző hsz.-emben, csak másképp. Egyébként így már teljesen érthető, miért van szükség az $uj változóra, csak a legelső hsz.-ednél még nem volt világos, hogy minden "látogatást" tárolni szeretnél.
A duplikált bejegyzés elég furcsa, most így hirtelen nincs rá ötletem. -
Sk8erPeter
nagyúr
válasz
vancha2 #4177 üzenetére
Te egyetlen dologtól teszed függővé azt, hogy el kell-e tárolni, vagy sem:
if(eregi('(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)', $useragent)) { }
else {
mysql_query("INSERT INTO stat(pozicio, datum, ip, host, referer, useragent, egyedi) VALUES ('$ad_pozicio', '$time', '$ip', '$host', '$referer', '$useragent', '$uj')");
setcookie("wait", time(), time()+60);
}
Gondolom az $uj változót ezek alapján arra használod fel, hogy egy reklámot már megnéztek-e vagy sem, és minden egyes megnézést tárolni szeretnél, hogy tudj készíteni egy összesítést arról, hogy összesen hányszor ugrott az arcába a látogatóknak a reklám.
Az a probléma, hogy van, hogy pontosan ugyanabban az időpontban menti el azonos látogatást duplikálva, úgy, hogy az $uj változó 1 értékű? Mert ezt a duplikálást nem fejtetted ki bővebben.
Igen, az eregi() már deprecated lesz 5.3.0-tól. -
Sk8erPeter
nagyúr
válasz
Inv1sus #4173 üzenetére
És ez most miért lenne hiba? Sehol nem kötötted ki, hogy hány ilyen karaktert szeretnél engedélyezni, csupán escape-elve töltötted fel az adatbázisba. Pont azt csinálja, amit mondasz neki.
Mellesleg helytelen így használni a $_POST-ot: $_POST[ki],
helyesen $_POST['ki'] vagy $_POST["ki"]
Fontos, hogy használd az aposztrófot ( ' ) vagy az idézőjelet ( " ).
Ugyan az általad használt módon is működik, de bizonyos esetekben gond lehet belőle. -
Sk8erPeter
nagyúr
válasz
vancha2 #4172 üzenetére
Ha jól látom, az $uj változót csak arra használod, hogy amikor elmented adatbázisba a látogató adatait, akkor az adatbázisban az "egyedi" mezőben 1 vagy 0 lesz, attól függően, hogy a $_COOKIE["latogato"] be van-e állítva. Ennek szerintem semmi értelme. Akkor már miért nem teszed az egészet a cookie létének ellenőrzése alá? Ha még nincs beállítva a cookie változó, akkor tárolja el az adatbázisba: if(!isset($_COOKIE["latogato"]))...
Meg a feltételvizsgálatot is lehetne egyszerűsíteni. Az $uj szerintem felesleges. A setcookie("wait", time(), time()+60); pluszban történő beállításával mit szerettél volna?
Valahogy így képzeltem el egyszerűsítve (az $uj változó felesleges, az eregi-vel ellenőrzést korábbra is be lehet rakni, a második setcookie most így elsőre nem világos, miért szükséges):if(!isset($_COOKIE["latogato"]) && !eregi('(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)', $useragent) )
{
$uj = 0; //??? felesleges...
$ip = $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr($ip);
$referer = $_SERVER["HTTP_REFERER"];
$useragent = $_SERVER["HTTP_USER_AGENT"];
$nap = date('d', time())+1;
$ho = date('m', time());
$ev = date('Y', time());
$meddig = strtotime($ev.'-'.$ho.'-'.$nap)-(60*60);
setcookie("latogato", time(), $meddig);
mysql_query("INSERT INTO stat(pozicio, datum, ip, host, referer, useragent, egyedi) VALUES ('$ad_pozicio', '$time', '$ip', '$host', '$referer', '$useragent', '$uj')");
//itt az $uj változót valami célszerűbbre lehetne lecserélni...
setcookie("wait", time(), time()+60); //???
}Ezt az egész látogatószámlálást mondjuk sessionnel is el lehetne intézni, és akkor nem lenne olyan gond, hogy ha valaki tiltja a cookie-kat a böngészőjében, akkor nem tárolja el a látogatását. >> [link] Persze akkor a visszatérő vendégeket is újraszámolja (bár az nem hiszem, hogy probléma lenne, hiszen gondolom arra is kíváncsi vagy, hogy visszajönnek-e; meg egyébként is újraszámolná cookie-k törlése után).
-
Sk8erPeter
nagyúr
válasz
egyjotakaro2 #4165 üzenetére
Talán ha tudnánk, hogy egyáltalán milyen programot használsz (itt azt írtad, találtál másikat, de hogy melyiket, az rejtély számunkra), akkor lehet, hogy könnyebb lenne segíteni. Mondjuk csak úgy szórakozásból felrakni az általad használt chatprogramot szerintem senki nem fogja, legfeljebb tudunk segíteni tutorial keresésében... Bár lehet, hogy a program dokumentációjában leírják, hol lehet naplózni a beszélgetéseket, csak keresni kell.
-
Sk8erPeter
nagyúr
De ha valaki mégis szeretne órát a honlapjára, akkor az az ő dolga...
PHP-vel ezt megoldani azért hatalmas baromság lenne.(még ha csak a perceket íratná ki, akkor is kellene egy visszaszámláló, ami mondjuk 60 mp-enként frissíti magát, vagy valami hasonló, meg AJAX, meg anyámkínja, ki lehet hozzá találni okosságokat, de minek
)
-
Sk8erPeter
nagyúr
válasz
fordfairlane #4137 üzenetére
Köszönöm, szerintem megpróbálom, így elsőre elég könnyen kezelhetőnek és áttekinthetőnek tűnik.
(#4144) Inv1sus: nincs mit, tényleg egyszerű. A sessionnel való babrálás sokszor hasznos. Pl. látogatók számlálására is, ahogy cucka írta korábban: [link].
-
Sk8erPeter
nagyúr
Mondjuk az or die... rész jól jön teszteléshez, legalább jelzi, ha valamit elcsesztem. Persze ez már működő rendszernél nyugodtan elhagyható, de ha mondjuk saját gépen tesztelem, és elfelejtem módosítani az eredeti adatbázisneveket, akkor ez legalább jelzi, hogy valamit még kéne csinálni. Nem nézek, mint Jani a moziban, hogy most akkor mi van.
Mondjuk nagyon összetett lekérdezéseknél épp az eredeti mysql_query()-s megoldás tényleg jobb lehet. -
Sk8erPeter
nagyúr
válasz
Inv1sus #4134 üzenetére
ha sikeres volt a feltöltés, mondjuk csinálsz egy ilyet:
session_start(); //még a fájl elején!!!
// ...
$_SESSION['success']='Fasza, sikerült feltöltened.'; //lehet felőlem $_SESSION['sikerhurra']='blabla'; is, tehát a név tök mindegy, beállítod asszociatív tömbindexeléssel a tömb egyik elemét egy bizonyos értékre
// blabla, header-rel visszairányításItt pedig abban a fájlban, ahova visszairányítod a feldolgozó oldalt, kiíratod a session változót, ha az létezik (ami nyilván akkor lehet, ha a feldolgozó fájlban beállítottad), aztán megszünteted (hogy ne írja ki minden alkalommal, mindössze egyszer írja ki):
if( isset( $_SESSION['success'] ) ){
echo $_SESSION['success'];
unset( $_SESSION['success'] );
}Ennek analógiájára lehet kiíratni a hibaüzeneteket is, elég rugalmas a dolog, és a session erejéig bárhonnan elérhető, hacsak meg nem szünteted (unsettel).
-
Sk8erPeter
nagyúr
"Nem tudom, mitől szebb. Ha arra van szükséged, hogy 2 query-t lefuttass egymás után, akkor azt le kell futtatni egymás után, miért csúnya ez?"
Hát nem tom, szerintem jobban mutat.Pl. adott a következő:
$query = "DELETE FROM `adatb`.`tbl_egyik` WHERE `tbl_egyik`.`id` = 1 LIMIT 1;\n";
$query = @mysql_query($query)
or die ("Nem lehet lekérni az adatot a MySQL-táblából.<br />Hiba: ". mysql_errno() . ": ". mysql_error() ."<br />");
$query = "DELETE FROM `adatb`.`tbl_masik` WHERE `tbl_masik`.`id` = 1 LIMIT 1;";
$query = @mysql_query($query)
or die ("Nem lehet lekérni az adatot a MySQL-táblából.<br />Hiba: ". mysql_errno() . ": ". mysql_error() ."<br />");
$query = ""DELETE FROM `adatb`.`tbl_harmadik` WHERE `tbl_harmadik`.`id` = 1 LIMIT 1;";
$query = @mysql_query($query)
or die ("Nem lehet lekérni az adatot a MySQL-táblából.<br />Hiba: ". mysql_errno() . ": ". mysql_error() ."<br />");Ehelyett lehet így is:
$query = "DELETE FROM `adatb`.`tbl_egyik` WHERE `tbl_egyik`.`id` = 1 LIMIT 1;\n"
. "DELETE FROM `adatb`.`tbl_masik` WHERE `tbl_masik`.`id` = 1 LIMIT 1;\n"
. "DELETE FROM `adatb`.`tbl_harmadik` WHERE `tbl_harmadik`.`id` = 1 LIMIT 1;";
if ($mysqli->multi_query($query)) {
do { /* ... */ }while ($mysqli->next_result());Számomra utóbbi áttekinthetőbb...
Szerinted?
"Annak idején az első munkámat úgy kaptam meg, hogy lóf*szt se értettem az egészhez. Konkrétan javascript-et az első, beugró feladatomnál írtam először
."
Én is az első munkámnál tanultam meg a(z) (X)HTML, CSS, JavaScript, PHP, MySQL alapjait, haverom faterjának csináltam egy honlapot baráti alapon (nem fizetős), kutyatenyészetről volt szó, és meg kellett csinálni hozzá a szép, felhasználóbarát (és egyben foolproof) admin felületet is, hogy tudjanak képet hozzáadni, a kutyához törzskönyvet kitölteni, meg minden egyéb adatot, törlés, módosítás, a honlap szerkesztése és minden egyéb finomság belekerült, szoptam vele elég sokat. Szerencsére nem tűztek ki szoros határidőt (főleg mivel tisztában voltak vele, hogy ingyé' csinálom, meg csak most tanulom az egészet), szóval eltökölhettem vele egy pár hónapot, mire nagyjából fullos lett. A dizájnon mondjuk lenne mit csiszolni, de valahogy a dizájn egyáltalán nem érdekel.De majd ráérő időben ráfekszem arra is. Egyedül azért mindent megcsinálni kicsit sokáig tartott...
Most utólag javítgatom a kódot, és röhögök a saját hibáimon. És még mindig érzem, hogy az igazán komoly webfejlesztéstől elég messze vagyok, de folyamatosan tanulok."Senki sem fog fizetni azért, mert megspóroltál 0.3% processzoridőt, vagy hogy 0.2 másodperc helyett 0.13 alatt jön be a weboldal."
Ez igaz, de saját kíváncsiságom kielégítésére jó móka ilyenekkel szórakozni.Persze ha már komoly munkánál szoros határidő lesz, akkor valszeg nem apróságokkal fogok tökölni.
-
Sk8erPeter
nagyúr
"Microtime-al tudsz időt mérni, memory_get_usage-el tudsz memóriahasználatot mérni. Esetleg felrakhatod a zend szervert, ott kapsz pl. profile-ozási lehetőséget."
Köszönöm az ötleteket, erre voltam kíváncsi."Tehát ha lassú egy rendszer, akkor nem attól lassú, mert mysql helyett mysqli-t használsz, vagy fordítva."
Ebben igazad van, de most épp azért kellett a mysql_query-s lekérés helyett a mysqli osztály függvényeit használnom, mert még korábban elég csúnya módszerrel úgy oldottam meg a többszörös lekérdezést (pl. több elem törlésekor más táblákból, vagy több sima SELECT-es lekérdezés egymás után, majd az eredmények tárolása, kiíratása - persze itt is elválasztva az alkalmazáslogikát a megjelenítéstől, ahogy illik), hogy egymás utáni mysql_query-ket hajtottam végre, az a kódban meg elég csúful mutat, sokkal szebb, ha konkatenálom egy sztringbe a lekérdezéseket, majd egymás után végrehajtom MySQLi-függvényekkel, ahogy írtam. Pl. van olyan eset, amikor a júzer törölni szeretne az admin felületen egy képet az összes kategóriából, és ilyenkor magából a képtáblából is törölni kell, meg a kategória-kép-összerendelő táblából is, és ilyenkor jó rondán néz ki a kódban az egymás után mysql_query.Aztán ha már próbálgattam, kíváncsi voltam arra is, hogy vajon a két lekérdezés (sima mysql_query-vel vagy mysqli-s függvényekkel) között milyen időbeli különbségek vannak. A memóriahasználatbeli különbségekre is kíváncsi vagyok.
Meg egyébként még nem dolgozom komoly cégnél, mint honlapszerkesztő, most egyelőre szeretném magam minél jobban kiképezni, és megtanulni, hogy mik azok a megoldások, amik a lehető legkisebb erőforrást igénylik, és a leggyorsabb megjelenítést eredményezik.
Ezért foglalkozom esetleg apróságoknak tűnő kérdésekkel is.
Új hozzászólás Aktív témák
Hirdetés
- BESZÁMÍTÁS! ASUS B450 R7 1700X 16GB DDR4 512GB SSD RX 580 8GB Rampage SHIVA Corsair 450W
- iKing.Hu - Xiaomi 14 Ultra - Ultra White - Használt, karcmentes
- AKCIÓ! ASRock H310CM i3 9100F 8GB DDR4 240GB SSD 1TB HDD GTX 1060 3GB AeroCool Strike-X 500W
- BESZÁMÍTÁS! 1TB Kingston KC3000 NVMe SSD meghajtó garanciával hibátlan működéssel
- 137 - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4080
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest