Hirdetés
- Mobil flották
- iPhone topik
- Samsung Galaxy S21 FE 5G - utóirat
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Apple iPhone 13 - hízott, de jól áll neki!
- Google Pixel topik
- Apple iPhone SE (3. generáció) - szélsebes múltidézés
- Telekom mobilszolgáltatások
- Motorola Edge 50 Ultra - szépen kifaragták
- Google Pixel 9 Pro XL - hét szűk esztendő
Hirdetés
-
Végre a Logitech is bemutatott egy analóg klaviatúrát
ph A dolog már eléggé időszerű volt, mindenesetre a három színben készülő, TKL-es megoldás nem dúskál a hobbistáktól ellesett okosságokban.
-
Kidobja a Slacket a Disney
it Miután több mint 1 TB céges adatot szivárogtattak ki egy hackertámadás után, a Disney úgy döntött, hogy beszünteti a Slack használatát.
-
Kiderült, mekkora aksi van az iPhone 16-okban
ma Mindegyik telep nőtt, legtöbbet az iPhone 16 Pro hízott.
Új hozzászólás Aktív témák
-
Tele von Zsinór
őstag
válasz lamajoe #2649 üzenetére
Ellentétben a c++al, ami fordított nyelv, a php scriptnyelv. Röviden ez annyit tesz, hogy az előbbinél a fordító létrehoz egy binárist és később azt használod, a php futtatásához mindig kell az értelmező (bár ezzel is képes fordított változatot cachelni, de ezt talán majd később )
Nem feltétlen szükséges webszerver a php használatához (ha parancsorba beírod, hogy "php filenev.php" az is lefut), de a messze legnépszerűbb használata a weboldalak előállítása, ehhez kell neked a webszerver (apache).
Ma már nagyon kevés oldal működik valamiféle adatbázis nélkül, nagyon hasznos és egyszerű megoldást jelentenek strukturált adattárolásra, az összes rdbms közül pedig php-val párban a legnépszerűbb a mysql, a legtöbb ingyenes tárhelyen is ezt találod tepelítve.Ha most kezded, mindenképp a php5-öt tanuld, a négyest augusztus óta nem is fejlesztik.
-
Tele von Zsinór
őstag
válasz lamajoe #2655 üzenetére
Mielőtt kérdezel, mindig nézz körül a php.net-en (gyorskeresés: php.net/amitkeresel), általában megleled ott a választ, illetve sok egyebet is, amit ha nem is jegyzel meg, emlékezni fogsz, hogy volt valami ilyesmi arról nem is beszélve, hogy így jobban megmarad, mintha valaki más mondta volna meg.
-
Tele von Zsinór
őstag
válasz ArchElf #2669 üzenetére
Nusphere phped. Sajnos fizetős, 209 usd. Régóta használom nagyjából teljes megelégedéssel, néha az autocompletevel összeveszünk, de nagyjából azt csinálja, amit én akarok. Sokkal gyorsabb, mint az eclipse, phpdocot is berántja completenél helpnek.
Step-by-step debugot tud, akár távoli hoston is, de egy php modult telepíteni kell hozzá.
JShez nem ért egy syntax highlightnál jobban, de nézd meg a firebugot (a jóságát remekül mutatja, hogy kiterjesztés létére is megvannak a saját kiterjesztései, mint a firecookie, a firephp vagy a yslow). -
Tele von Zsinór
őstag
válasz Odiepapa #2705 üzenetére
A te $eredmeny változód nem egy tömb lesz, hanem egy mysql erőforrásra való mutató. Egy-egy sort a mysql_fetch_* függvények valamelyikével tudsz lekérni, ha az egészet tömbbe akarod, akkor valahogy így:
$tomb = array()
while (false !== ($row = mysql_fetch_array($eredmeny))) { $tomb[] = $row; }Ahol a $eredmeny az, amit te beállítottál neki a függvényed első sorában, a $tomb pedig az összes sort fogja tartalmazni asszociatív és számokkal indexelt tömbökként.
Más: a $service és a $id már escapelt? Ha nem, komoly biztonsági kockázatot jelent csak így berakni őket a querybe, használd előbb rajtuk a mysql_real_escape_string() függvényt!
-
Tele von Zsinór
őstag
$list = array("címek");
$key = array_rand($list);
header("Location: " . $list[$key]);A lényeg ennyi, beolvasást úgy oldod meg, ahogy jólesik (akár adatbázisból, akár txtből mondjuk a file()-al), illetve illik némi html kimenetet is adni, ha a http átirányítás tiltva volna.
-
Tele von Zsinór
őstag
Kb. ez kell neked akkor:
if (false !== ($list = @file("lista.txt") && count($list)) {
$key = array_rand($list);
header("Location: " . $list[$key]);
die(sprintf("<a href=\"%s\">Átirányítva ide: %s</a>", $list[$key], $list[$key]));
}Ha nem sikerül megnyitni a filet, vagy üres, nem csinál semmit.
-
Tele von Zsinór
őstag
válasz Odiepapa #2736 üzenetére
Miért "sajna"? Ez annyit tesz, hogy a kliens böngészője ismeri és engedélyezi a sütik fogadását, nem urlben kell átadnod a sessionid-t.
Ezzel visszaélni akkor lehet, ha elkapja valami köztes fél, beállítja magánál sütinek és meglátogatja az oldalad - persze az is kell, hogy nálad ne legyen ip, user-agent, stb. ellenőrzés. -
Tele von Zsinór
őstag
Első javaslatként azt mondom, gondold át ezt a txt dolgot, hogy tényleg akarod-e. Sokkal jobb lenne mindezt adatbázissal megoldani.
Ha mindenképp maradsz ennél, a következő módszerrel időben csökkenő sorrendet tudsz tartani: mikor új bejegyzést kapsz, kiolvasod a file eddigi tartalmát, ennek az elejére berakod az új bejegyzést, majd kiírod az egészet. Függvényeknek lásd: file_get_contents() és file_put_contents().
-
Tele von Zsinór
őstag
Windows: ha feltelepítetted, akkor keresd a php.exe n. filet, ennek a helyét tedd bele a $PATH környezeti változóba, és akkor mindenhonnan eléred. A saját scriptjeid futtatása így megy: `php filenév`
Linux: disztrótól függ ez a rész, ubuntu és debian alatt a `php5-cli` csomagot kell felraknod, gentoo alatt a `dev-lang/php`-t, és kész is vagy. Futtatás ugyanúgy.
-
Tele von Zsinór
őstag
válasz Gergello #2840 üzenetére
$exp = explode(";",$query);
Olyankor mit csinálsz, ha valahova pontosvesszőt tartalmazó értéket kell beírnod?
A mysql password() függvénye helyett saltolt md5-öt vagy sha1-et ajánlok.
Egy queryvel illene megoldani az ellenőrzést és az adatok betöltését, az egyik felesleges. Legyen egyetlen select *-os, ahol where-ben meg van adva a felhasználónév és a jelszó, és mysql_num_rows()-al ellenőrizd, hogy van-e ilyen felhasználó, ha igen, belépteted, és rögtön tudod is feltölteni a profilját, újabb query indítása nélkül.
$usr = $sql -> getOne("SELECT username FROM XX WHERE username='".$user."' AND password=password('".$pass."')");
if($usr == $user){ //okA getOne() kódja nélkül ez vaktában, de tippem szerint egy tömbbel tér vissza, ami az adott sort tartalmazza, azaz az ifben te egy tömböt és egy stringet hasonlítasz össze. Ráadásul felesleges, azt mondtad, hogy az $user nevű felhasználót kéred ezzel a jelszóval, utána az eredményben a nevet összehasonlítani az eredeti kérés paraméterével értelmetlen, mindig igaz lesz. Vagy volt már olyan, hogy a smarty az "Ezt aztán" kezdetű szöveget írta volna ki?
Látom, osztályokat használsz. Én a Userbe pakolnám a logint: kap két paramétert, a postból a felhasználónevet és a jelszót, és akár bool értékkel jelzi, hogy sikerült-e, vagy hibát dob, de mindenesetre a sessiont megfelelően feltölti a user adataival, jogaival, stb.
A User osztálynak készítettél __sleep és __wakeup függvényeket? -
Tele von Zsinór
őstag
válasz Gergello #2842 üzenetére
A pontosvesszős explode és egyéb trükközések helyett add át neki a queryket egyesével, vagy tömbként. Akár a függvény nézze, ha tömböt kapott, foreach-el menjen végig rajta, ha nem, akkor csak simán hajtsa végre.
A __sleep() és a __wakeup() azért kéne, mert sessionbe objektumot raksz. Röviden: amikor az scripted véget ér, a session adatok serializálva kerülnek mentésre, objektumokon ilyenkor meghívódik a __sleep(), ahol egyrészt takaríthatsz (leírók zárása, akármi), valamint egy tömbben megmondhatod, hogy melyik tagváltozókat mentse a php. A __wakeup() akkor hívódik meg, amikor a következő oldalnál betöltődnek a session adatok, a __sleepben() visszaadott értékek már be vannak töltve, ilyenkor lehet a korábban zárt leírókat újranyitni, teszemazt kapcsolódni az adatbázishoz, szükséges fileokat megnyitni, amit akarsz.
Hosszútávon a saját DB osztályok helyett jobban jársz valami olyasmivel, mint az említett Pear adatbázisosztály, az ADOdb, esetleg komolyabb vonalon mozogva Doctrine vagy Propel. -
Tele von Zsinór
őstag
válasz Sk8erPeter #2862 üzenetére
Helyesbítek: a fileműveletek lassúak. Ha 1-2-10 includeod van csak, ez nem fog feltűnni, ha sokkal több, akkor viszont már jelentős visszafogó tényező.
Például a symfony framework ez ellen úgy védekezik, hogy cacheli a teljes core rendszerét egyetlen masszív php fileba, így éles rendszerben csak az van includeolva. -
Tele von Zsinór
őstag
válasz Odiepapa #2939 üzenetére
Mintha *nix szervereken az aktuális usert helyettesítené be, de nem vagyok rendszergazda, szóval google. Másrészt pedig a mailnek van egy additional headers paramétere, oda tegyél egy From-ot, és jó lesz.
Állítsd be rendesen a szervert, hogy ne csak az index.html-t, hanem a .php-t is indexnek tekinse. A böngésző úgyis csak úgy kéri, mint "/".
Használj get helyett post-ot. -
Tele von Zsinór
őstag
A php.net nem tud olyanról, hogy ob_get_end(), szerintem az ob_get_clean()-ra gondoltál.
Headerben azt mondod, hogy gzip tartalom jön, de sehol nem zömöríted.
Amúgy a hálózati forgalom csökkentésére jó, de általában nem ez szokott lenni a szűk keresztmetszet, inkább az adatbázis. -
Tele von Zsinór
őstag
válasz Sk8erPeter #3052 üzenetére
Úgy emlékszem, képfeltöltésről van szó, legalábbis korábban esett itt szó az átméretezéséről.
Ahogy írták már, a böngésző által küldött mime megbízhatatlan. Ha azt akarod ellenőrizni, kép-e, használd a getimagesize() függvényt, képnél értelmes eredményt ad vissza, minden másnál hibát. -
Tele von Zsinór
őstag
válasz Sk8erPeter #3061 üzenetére
Miért olvas ki a fájlból esetlegesen rossz információt?
Nem arról van szó, hogy a böngésző szúrja el, bár erre is láttam már példát; sokkal valószínűbb az, hogy egy rosszindulató látogató hamisít bele. Ha csak a mime alapján ellenőriznél, akkor mondjuk fel tudna tölteni egy .php filet, ha azt mondja, image/jpeg. Innen általában egyszerű kisakkozni, hova lett mentve és voilá: saját php kódját futtatja a te szervereden.
Az ékezetes, egyéb karakterekre valami ilyesmit ajánlok:
static public function slugify($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text))
{
return 'n-a';
}
return $text;
}Ha van iconv modulod, ez a legjobb megoldás: utf8-ból alakít sima ascii-vá úgy, hogy transliterál (van erre magyar kifejezés? ), azaz az á-ból a-t csinál, de a ä-ból is, ë -> e, ç -> c, satöbbi.
-
Tele von Zsinór
őstag
válasz Sk8erPeter #3068 üzenetére
Nem böngészőfüggő, a php kód a szerveren fut
Nálam ilyen egy próbafuttatás:tibia@sziget:~$ php --run 'echo iconv("utf-8", "us-ascii//TRANSLIT", "Gyémánt") . "\n";'
Gye'ma'nta fontos különbség: iso-8859-1 vs. us-ascii. Előbbi esetén nálam is furaság lesz a végeredmény
A preg_replace()-s sor, amit bemásoltál eltávolítja a nekem nem kellő karaktereket (url komponenst állítok elő), azaz mindent, ami nem szám vagy betű. Utána jön az iconv, majd megint egy preg_replace, hogy az iconv által berakott felesleget eltávolítsa. Emiatt elnézésed kérem, korábban azt mondtam, elég az iconv az ékezetek eltávolításához, de kell mögé az a preg_replace is.
[ Szerkesztve ]
-
Tele von Zsinór
őstag
[...]
if ($_POST[op] != "ds") {
$a = rand(1,9);
$b = rand(1,9);
$_SESSION['c']=$a+$b;
echo "<form method=\"post\" action=\"$PHP_SELF\">
<p><strong>Your name:</strong><br>
<input type=\"text\" name=\"name\" size=30 value=\"$_POST['name']\"</p>
<p><strong>Your email:</strong><br>
<input type=\"text\" name=\"email\" value=\"$_POST['email']\"size=30</p>
<p>$a + $b = <br>
<input type=\"text\" name=\"szam\" value=\"$_POST['szam']\"size=30</p>
<p><strong>Comments:</strong><br>
<textarea name=\"comments\" cols=30 rows=5 wrap=virtual>$_POST['comments']</textarea></p>
<input type=\"hidden\" name=\"op\" value=\"ds\">
<p><input type=\"submit\" name=\"submit\" value=\"Mehet\"></p></font>
</form>";
} [...] -
Tele von Zsinór
őstag
válasz Sk8erPeter #3143 üzenetére
MySQL esetében nem ajánlott a perzisztens kapcsolat, maradj a sima _connect()-nél.
Kapcsolatot bezárni szép, de ha úgyis a scripted végére tennéd, felesleges: a futás végén a php felszabadít minden erőforrást, így a kapcsolatot is. Használata ott ajánlott, ahol sok konkurrens felhasználó van: gyorsan összeszeded adatbázisból, ami kell, zárod a kapcsolatot, és csak utána foglalkozol a kiiratással. -
Tele von Zsinór
őstag
Ha timestampként kell, akkor UNIX_TIMESTAMP(), ha formázott dátumként kell, akkor DATE_FORMAT().
-
Tele von Zsinór
őstag
Nem maradhat úgy, ahogy van, de a select querydben például úgy legyen, hogy
SELECT UNIX_TIMESTAMP(`mezonev') AS `asdf`;
És ezután nyugodtan átadhatod a date-nek. Hasonló módon kell használni a másik függvényt is, csak annak kell egy másik paraméter is, analóg módon a php date függvényével.
-
Tele von Zsinór
őstag
válasz pumatom #3241 üzenetére
$dir_objektum = dir("pics/");
$tomb = array();
while (false !== ($bejegyzes = $dir_objektum->read())) {
if (!is_dir($bejegyzes)) $tomb[] = $bejegyzes;
}
$dir_objektum->close();ez egy tömbbe pakolja a mappában levő fileokat, ebből kell neked egy random elemet kiválasztani.
jobb megoldás, ha adatbázisban tárolod, milyen filejaid vannak, és onnan választasz ki egy elemet, mysql esetén ez például
order by rand() limit 1
[ Szerkesztve ]
-
Tele von Zsinór
őstag
-
Tele von Zsinór
őstag
-
Tele von Zsinór
őstag
válasz Louloudaki #3346 üzenetére
A levél is utf8-ként megy el?
Új hozzászólás Aktív témák
Hirdetés
- Apple iPhone 13 128GB,Átlagos,Dobozával,12 hónap garanciával
- Nintendo Switch Joy-Con Pair Gamepad, kontroller
- GAMER PC: i5-12400F/13600KF - RX 6700 XT 12GB GDDR6 - 1TB-4TB NVMe SSD - 16/32GB DDR4- GAR/SZÁMLA!!!
- Lenovo IdeaPad S145-15API
- Playstation 5 Slim digital version(számlával és több mint 1,5 év garival)
Állásajánlatok
Cég: Ozeki Kft
Város: Debrecen
Cég: Ozeki Kft
Város: Debrecen