- erkxt: A Roidmi becsődölt – és senki nem szól egy szót sem?
- Hold - SW Heritage - Auto üzemmód
- Luck Dragon: Asszociációs játék. :)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Fűzzük össze a szavakat :)
- MasterDeeJay: Noname 1TB-os SATA SSD teszt
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Gurulunk, WAZE?!
- droidic: YouTube videók és playlistek letöltése GUI-alkalmazással
- sziku69: Szólánc.
Új hozzászólás Aktív témák
-
válasz
Sk8erPeter #9998 üzenetére
Jó, jó! Köszi PazsitZ és Sk8erPeter!
-
CSorBA
őstag
Azta, hogy beírtuk ide hárman
-
Sk8erPeter
nagyúr
válasz
PazsitZ #9994 üzenetére
Aztán lehet ezt még kombinálni
SELECT *
FROM test_time
WHERE myunixtime
BETWEEN UNIX_TIMESTAMP( '2012-06-03 00:00:00' )
AND UNIX_TIMESTAMP( '2012-06-03 23:59:59' )Mondjuk ezt csak lehetőségként írtam, gondolom a tiéd gyorsabb.
(#9995) mobal :
PazsitZ a megoldásában átalakítja úgy, ahogy kell.
De legegyszerűbb, ha kipróbálod.===
Szerk.: egyébként kérdéses, hogy vajon ez a tárolás a jobb/hatékonyabb, vagy a MySQL saját timestampje, esetleg szétbombázva. -
PazsitZ
addikt
Adott unix time érték php-ban és mysql-ben is ugyanaz a unix time.
De használható, az sql UNIX_TIMESTAMP() function is akár. -
CSorBA
őstag
-
Sziasztok!
Olyanra lenne szükségem, hogy: int -ként (unix time) tárolom az adatbázisban az időt (mondjuk egy cikk kiadási dátuma). Ez tök jó, mert össze vissza tudom ugye formázni, éppen úgy ahogy nekem kell. Azt viszont nem tudom hogyan tudnék keresni közte (mondjuk adott napi cikk, ilyen url -ekre: http://valami.blog.hu/2012/06/03/elso-bejegyzes).
Ötlet? Vagy teljesen "rossz" ez a gondolatmenet?
mobal,
-
CSorBA
őstag
Ez lett végül ami jó nekem:
$egyezoek = array_values(array_intersect($tomb1, $tomb2)); -
CSorBA
őstag
válasz
Sk8erPeter #9989 üzenetére
Jaja
Én is néztem, hogy miért ellenkezel, mikor tökéletesen pont az amit akarok
szerk: Viszont az indexeket újra kell járnom, mert az marad.
-
Sk8erPeter
nagyúr
Nincs mit!
Szerk.:
"Nem, ebből 2 2 3 lesz"
De nem$egyezoek = array_intersect($tomb2, $tomb1);
Ez lesz (most próbáltam):
array (
0 => '2',
1 => '3',
)Szerk2.:
ÁÁá, bocs, én felcseréltem, mert azt hittem, neked az kő, sorry, nem szóltam.
Szóval ha így nyomatod:$egyezoek = array_intersect($tomb1, $tomb2);
Akkor az van, amit írtál.
-
CSorBA
őstag
válasz
Sk8erPeter #9987 üzenetére
biker: az array_dif nem ezt csinálja, az tuti nem lesz jó.
Sk8erPeter: Azaz, azt kerestem, nem akartam végignézni az array funcitons manualt, hátha tudja itt valaki kapásból. Nagyon szépen köszönöm!"Szerk.:
"Magyarán ezt várnám:
$eredmeny_tomb = array('2', '2', '3');"
Ebből csak array('2', '3') lesz array_intersecttel. Nem arra vagy kíváncsi?"Nem, ebből 2 2 3 lesz, ezt várom, ez jó
$tomb1 = array('1', '1', '1', '1', '2', '2', '3');
$tomb2 = array('2', '3');
$egyezoek = array_intersect($tomb1, $tomb2);Ez remek
-
Sk8erPeter
nagyúr
$tomb1 = array('1', '1', '1', '1', '2', '2', '3', '5', '6', '7');
$tomb2 = array('1', '2', '3', '4', '5');
$egyezoek = array_intersect($tomb2, $tomb1);
var_export($egyezoek);Az output:
array (
0 => '1',
1 => '2',
2 => '3',
4 => '5',
)Szerk.:
"Magyarán ezt várnám:
$eredmeny_tomb = array('2', '2', '3');"
Ebből csak array('2', '3') lesz array_intersecttel. Nem arra vagy kíváncsi? -
biker
nagyúr
köszönöm, megnyugodtam
-
Sk8erPeter
nagyúr
válasz
PazsitZ #9982 üzenetére
+1 : Jaja, az ilyenek rontják a PHP megítélését.
"Ez mondjuk 1 hónap után nem gáz, de több év alatt, igazi teljesítmény, hogy semmi nem ragadt rá."
Ez tényleg elég durva...
Amúgy szerintem az sem jó, ha valaki nem kóstol bele más nyelvbe, ahol szigorúbb megkötések vannak, mert akkor megszokja, hogy simán lehet gányolni, mert a PHP nem pampog érte, főleg, ha jól kikapcsolja még fejlesztés idejére is a hibajelzést, mert "zavaró". -
CSorBA
őstag
Van két tömböm:
$tomb1 = array('1', '1', '1', '1', '2,' '2', '3');
$tomb2 = array('2', '3');Hogy tudom az első tömbböl az összes olyan elemet visszakapni, ami megvan a másodikban? Van erre valami egyszerű funkció? Vagy ügyeskedjek?
Magyarán ezt várnám:
$eredmeny_tomb = array('2', '2', '3');
Köszi :$
-
PazsitZ
addikt
Ez nem rossz programozó, hanem egy kókler vérpistike.
A leírtak alapján a kérdéses személy, megrekedt a php24 óra alatt könyv szintjén. Ez mondjuk 1 hónap után nem gáz, de több év alatt, igazi teljesítmény, hogy semmi nem ragadt rá.Tény, hogy a kezdeti tanulási ideje rövid a nyelvnek és a nyelv lehetőségei is adottak a gányoláshoz, azáltal ki is termeli a tehetségtelen kóklereket, sajnos.
Na pont az ilyenek májer balf@szok miatt van meg a php fejlesztőkről az általános lenéző vélemény.
-
Sk8erPeter
nagyúr
"Mit adnátok annak, aki egyszerre használ magyar és angol neveket pl táblázatai fejlécében? é emiatt írja el a dolgokat?"
Ha már így kérdezted: sallert.
Amúgy a többivel is teljesen egyetértek, a változóneves problémát soha nem értettem, szerintem is sokkal jobb egy jó hosszú, de beszédes és félreérthetetlen változónév plusz karakterekkel, mint egy lerövidített szarság, amiből semmire nem tudsz következtetni, csak egy dolgot tudsz tenni, hogy visszamész a legelejére, ahol inicializálja vagy épp megváltoztatja a változó értékét, és megpróbálod kinyomozni, hogy mi a franc az, esetleg még debuggolást sem úszod meg. Aztán egy replace all valami értelmes változónévre.
Nem tudom, egyes önjelölt programozózsenik miért gondolják úgy, hogy pozitívan hat a teljesítményre vagy a munkatempóra, ha $a, $b jellegű változóneveket használnak.
Ez az initscreen/endscreen meg úgy gány, ahogy van. Nem véletlenül találták ki a template-ezést.
Sajnos vannak menthetetlen esetek, én is találkoztam már ilyennel (kedvelt kolléga volt), akinek hiába adsz elő normális érveket (lásd amiket mondtál is), ő akkor is jobban tudja (a legerőszakosabb, legokoskodóbb fajta). -
biker
nagyúr
Belefutottam egy kis jó-zsaru rossz-zsaru szindrómába. Értsd jó programozó vs rossz programozó.
Elkezdtem egy más által előre megírt kódot kijavítani. Konkrétan írtak egy egyedi rendszert, szarul, hibásan működik, ráhagyták.
Én fejeztem be anno, de most álltam neki feltárni a teljes kódot.
Az hagyján, hogy kiderült, jó szokás szerint, hogy van 3 olyan funkció, amik el vannak kezdve, de elérése sehol, el is felejtette a megrendelő, hogy kérte, és van olyan, ami soha nem is működött, de mivel egyelőre nem is használták, nem zavarta őket, de...Kicsit felqrtam egyszer az agyam, amikor aki írta, közölte, ne szóljak már bele, mert ő mekkora májer, én akkor 2 éve nyomtam csak.
De ti hogy vagytok vele, ha olyan kódot láttok, ahol minden ugynevezett szabványrövid változós, minden lekérdezés $res és $row az eredmény, ahol egy lapon 3 lekérdezs van, ott $res1 $res2 $res3 van?
ha lehet $ebbe_vannak_az_egyik_adatok változót is lehet írni???
miért használ valaki nonstop kétbetűs változókat?
Mit adnátok annak, aki egyszerre használ magyar és angol neveket pl táblázatai fejlécében? é emiatt írja el a dolgokat?
pl egyik sql tábla btNAME vagyis bérlet neve, másikban gyNEV a gyerek neve, persze a balfarok beírja updatebe utána gyNAME és persze nem ír felül semmitde annak mit adnátok, aki ilyet ír?
include_once("class/screens.class.php");
$SCR = new screen;
$SCR->initScreen();majd a screens.class.php tartalma:
class screen {
function initScreen() {
echo("
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
<link href=\"style/main.css\" rel=\"stylesheet\" type=\"text/css\">
</head>
<body bgcolor=#FFFFFF>
<div align=center>
");
}
function endScreen() {
echo("
</div>
</body>
</html>
");
}
}Most ennek sok értelme van, nem? pont 2x annyi karaktert írt mint kellene, mert oda direktben is beírhatta volna a header printet.
Én vagyok a hülye, ha az ilyet hülyének nézem???
-
bazsi44
tag
válasz
Sk8erPeter #9977 üzenetére
igazából már nyolcadik óta leköt az ilyen. de eddig csak rainmeteres kis skineket írtam. nem tudom mennyit mond neked ez.
bírom ahogy több 100 sor 'más számára értelmetlen ökörség' hogy alakul át látható, irányítható,hallható dolgokká.. annyira érdekes
ezt most megint jólmegaszontam. -
Sk8erPeter
nagyúr
válasz
bazsi44 #9976 üzenetére
Igazából annyi a lényeg, hogy ne add fel, ha elsőre nem sikerül valami, olvass utána, gyakorolj sokat (fontos, hogy amit olvastál, próbálgasd is ki, mert szerintem csak akkor lehet jól megérteni a működését), stb. Szóval kitartás, ugyanez vonatkozik a többi nyelvre is.
Ha a tanárod meg utálja az egészet, akkor lehet, hogy jobb is, hogy nem tőle tanulsz.
Egyébként becsülendő, hogy már középiskolában ennyire ráfeküdtél a témára, csak így tovább!
-
bazsi44
tag
válasz
Sk8erPeter #9975 üzenetére
azt hittem majd css meg html készít ki, de azok fényévekkel könnyebbek ennél!
javascripthez meg hozzá se merek nyúlni. majd szeptembertől emelt infó fakton. talán.
annyira bánom, hogy infótanárom pofámba vágta, hogy ha programozni akarok, akkor nem ő az emberem, mert utál, és NEM IS TUD programozni...amúgy meg. fejben nem is olyan bonyolult egy weboldal.
gondolom pár év tapasztalattal mér gépen sem nehezebb megvalósítani...
majd meglátjuk leszek-e híres weblaptervező -
bazsi44
tag
válasz
Sk8erPeter #9971 üzenetére
megoldva. mára ennyi elég. köszi mindent. lehet nektek nem sokat értem, sőt talán csak rontottam a levegőtök, de nekem nagy segítség.
-
PazsitZ
addikt
Alapvetően igazad van.
Visszaolvasva mondjuk tényleg hülyeséget írtam ezzel. Akkor page változóban lesz az nike érték.
De a fent említett hiba, hibaüzenet nem emiatt van.(#9969) bazsi44 :
Én mondtam, hogy ne csak másolj
CTRL+C, CTRL+V veszélyes jószág(#9973) Sk8erPeter:
Nem tudom követni ezt a szerkesztgetéses tempót -
Mad_nv
csendes tag
válasz
bazsi44 #9966 üzenetére
Valószínűleg azért dob ott hibát, mert érvénytelen a query eredménye, vagyis hibás a lekérdezés. Nézd meg hogy a tábla neve valóban "table"-e, és az oszlop neve "name". Ilyenkor egyébként legjobb az, ha előtte pl. phpmyadminba beírod a lekérdezést és ott leellenőrzöd a helyességét, aztán ha működik, akkor beírod a PHP kódba.
-
bazsi44
tag
válasz
Sk8erPeter #9965 üzenetére
kivan az töltve. nem mintha tudnátok kezdeni valamit az adatbázisommal, csak nem kötöttem az orrotokra
-
Sk8erPeter
nagyúr
válasz
bazsi44 #9962 üzenetére
Én egy szóval sem mondtam, hogy ne kérdezgess.
Csak kértem, hogy használd a válasz linket, azt' annyi.
Nem választottál ki adatbázist.
Egyébként normális esetben így kéne kinéznie, ahogy itt a példakódban látható: [link]
hosttal, felhasználónévvel, jelszóval...aztán kiválasztva a megfelelő adatbázist. -
bazsi44
tag
válasz
PazsitZ #9963 üzenetére
próbálom.próbálom. de példákon keresztül szerintem jobban megy. olvastam már könyvet, de félúton abbahagytam. 1 hete csak innen onnan kopizok, és többet haladtam mint eddig.
na ezt most jól megaszontam
Nem tartom magam annak a segghülye,értelmetlen emberkének, csak lehet túl sokat akarok egyszerre
EDIT: a hibádat ki is javítottam, mert észrevettem
-
PazsitZ
addikt
válasz
bazsi44 #9960 üzenetére
Egyébként elírtam:
echo '<div>'. $result['description'] . '</div>';
helyett:
echo '<div>'. $row['description'] . '</div>';Bár a jelenlegi hiba nem emiatt van, egyébként tényleg nem kötözködés, csak ne csak másold, hanem értsd is meg, amit írsz.
Feltehetőleg valami a lekérdezéseddel van, mert nem resource-t kapsz vissza.
próbáld lekérni mi a hiba:echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
Magyar leírás: [link]
-
bazsi44
tag
válasz
Sk8erPeter #9961 üzenetére
bocsi.
<?php
$con = mysql_connect("","","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("", $con);
if ($page == 'nike') {
$result = mysql_query("SELECT * FROM table WHERE name='nike'");
} else {
$result = mysql_query("SELECT * FROM table WHERE name='adidas'");
}
while ($row = mysql_fetch_assoc($result)) {
echo '<div>'. $row['name'] . '</div>';
}
mysql_close($con);
?>
annyira hülyének érzem magam, akkor is, ha most kezdetm. és elnézést. szóltam előre. ha nem akarod, hogy földig romboljam ép elméd, szívesen elmehetek. -
bazsi44
tag
bekopiztam amit PazsitZ írt.
-
bazsi44
tag
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in ***/webshop.php on line 76
a 76. sor:
while ($row = mysql_fetch_assoc($result)) { -
PazsitZ
addikt
válasz
bazsi44 #9954 üzenetére
Ha jól értem a kérdést: mondjuk az urlt így adod meg: webshop.php/?page=nike
Akkor page változóban lesz az nike érték.
A kódban ezután pedig eldöntheted melyik tartalmat jeleníted meg:if ($page == 'nike') {
$result = mysql_query("SELECT * FROM table WHERE name='nike'");
} else {
$result = mysql_query("SELECT * FROM table WHERE name='adidas'");
}
while ($row = mysql_fetch_assoc($result)) {
echo '<div>'. $result['description'] . '</div>';
}Az url szépítéséhez meg htaccess, és vagy url routing használható.
-
bazsi44
tag
egy magyar oldalt kezdőknek tudnál esetleg ajánlani?
-
Sk8erPeter
nagyúr
válasz
bazsi44 #9954 üzenetére
Igazából nem értem a kérdést. Van már egy nike menüpontod, az megnyit egy oldalt, azon az oldalon kell megjeleníteni ezt az adatbázisból lekért tartalmat.
Amúgy ez most csak egy ujjgyakorlat? Csak próbálgatod? Ha éles webshopot szeretnél, akkor azt ne Te írd meg, használj kész alkalmazásokat (lásd biztonság és egyebek). Ha csak gyakorolsz és tesztelsz, akkor nem szóltam egy szót sem, bár én a helyedben nem pont webshoppal kezdeném a gyakorlást, mert az túl komplex lehet, hanem mondjuk formok feldolgozásával, adatbázisba feltöltésével, az oda felvitt adatok megjelenítésével, sessionökkel, biztonsági kérdésekkel, stb.
Persze ez csak magánvélemény. -
bazsi44
tag
és hogy hivatkozzak rá a főoldalon?
-
Sk8erPeter
nagyúr
válasz
bazsi44 #9952 üzenetére
Végig is kell rohangászni a lekért eredményeken.
A php.net-es oldalon is van példa: [link].Valahogy így:
$nike_result = mysql_query("SELECT * FROM table WHERE name='nike'");
while ($row = mysql_fetch_assoc($nike_result)) {
echo '<div>'. $row['description'] . '</div>';
}Itt persze a $row['description'] csak egy példa, attól függ, mik a mezőnevek a tábládban.
-
bazsi44
tag
üdvözlet!
ahogy olvasgatok erre, hát. lehet elég lámát fogok kérdezni, de 2hete(ebből is csak hétvégék, mert hétközbe suli) foglalkozom weblapkészítéssel, és igazából csak próbálgatom a dolgot.segítség kéne az alábbi oldalhoz:
[link]a bal oldali menüben szeretnék létrehozni olyan menüpontokat, amikre kattintva egy lekérdezés eredményét jeleníti meg az oldal.
pl.
1.
adott egy link bal oldalt, legyen "nike"
erre kattintva, a "webshop.php/nike" oldalra továbbítódunk, ahol egy olyan lekérdezés látható, ahol a nike termékek szerepelnek.
2.
adott egy link bal oldalt, legyen "adidas"
erre kattintva, a webshop.php/adidas oldalra továbbítódunk, ahol egy olyan lekérdezés látható, ahol az adidas termékek szerepelnek.
és így tovább..webshop.phpban elkészítettem a lekérdezéseket, amik valahogy így néznek ki:
<?php
$con = mysql_connect("***","***","***");
if (!$con)
{die('Could not connect: ' . mysql_error());}
mysql_select_db("***", $con);
{$nike = mysql_query("SELECT * FROM table WHERE name='nike'");}
{$adidas = mysql_query("SELECT * FROM table WHERE name='adidas'");}
mysql_close($con);
?>a link pedig a főoldalon így néz ki:
<a href="webshop.php/nike">nike</a>
<a href="webshop.php/adidas">adidas</a>Aki hajlandó lenne segíteni annak ellenére, hogy ilyen kezdő vagyok, azt nagyon
megköszönném,
amennyiben további kérdés lenne, hallgatom, és PM is jöhet.előre is köszönöm.
-
Sk8erPeter
nagyúr
httpd.conf
Mondjuk tesztelésig érdemes lehet létrehozni csak erre egy VirtualHostot, és azonbelül alkalmazni, a httpd-vhosts.conf-ba betéve.====
Egyébként most nálam sem működik IIS+FastCGI PHP+XDebug+NetBeans kombóval a debuggolás, nem vágom, miért.
A breakpointnál megáll, de b@szik kiírni bármit is, az említett beállítások ellenére is. Na majd ha lesz időm, megkukkantom, mi a sz@r baja van. -
Mad_nv
csendes tag
Megpróbáltam, hogy az egyik echo után meghívtama flush() függvényt, de az outputon továbbra sem jelent meg semmi. A php.ini-ben átírtam ezeket: implicit_flush = On
output_buffering = 0, de semmi eredmény (természetesen az apache-ot újraindítottam az ini módosítása után). Nem tudom, hogy a phpinfo() függvény hogy éri el, hogy azonnal kiküldje az outputra az adatokat. Sajnos az általad javasolt SendBufferSize értéket nem tudtam módosítani, ugyanis nem nagyon értek az apache-hoz, azt sem tudom, hogy az XAMPP alatti változatnak, van-e valami konzolja, amin keresztül módosíthatnám. -
modder
aktív tag
ha még mindig nem megy, próbáld meg a webszerveren állítani az output buffert
pl Apachenál SendBufferSize 0Amúgy ha apache modulként van fönt a PHP, el tudom képzelni, hogy automatikusan flusholja az apache output bufferét is. (nálam működött ez annó). Ha nem apacheot használsz vagy fastcgi van, akkor lehet, hogy nem ilyen egyszerű a helyzet. mindenképpen nézz utána a webszerver output bufferének is.
(sőt, akár még a böngésző is bufferelhetni, azt mondják
)
-
Mad_nv
csendes tag
Hello!
A napokban úgy döntöttem, hogy már nem Notepad++ -ban írom a PHP kódot, hanem Netbeans-ben (7.1.2), mert abban lehet debugolni (kiegészítővel), és egyéb kényelmi funkciókkal is rendelkezik. Feltettem hát az xDebug 2.2.0 progit, beállítotam a PHP-t is (PHP 5.3.8, XAMPP). Írtam egy rövid próba kódot, szépen megáll a breakpointoknál, sőt a változók értékeit is folyamatosan nyomon követi. Már azt hittem tökéletesen működik, de az outpot nem jelenít meg semmit egészen addig amíg véget nem ér a kód.Írtam egy példaprogramot az output tesztelésére:
echo '1';
echo '2';
echo '3';
phpinfo();
echo '4';
echo '5';Ennek az az érdekessége, hogy az echo 1-2-3-nál nem jelenik meg semmi debugolás alatt mikor odaérek(sem az output ablakban, sem a böngészőben), viszont a phpinfo() kimenete azonnal látszik, majd a 2 utána jövő echo kimenete szintén nem látszik, csak ha már véget ért a futás.
Kérdésem az lenne, hogy ez normális működés szerintetek, vagy valami bug az xdebugban?
Nem találtam választ sehol erre sajnos. Az xdebug logja nem ír semmi féle hibaüzenetet egyébként. -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #9936 üzenetére
Érdekes, hogy MySQL-ben ezt meg tudták oldani rendesen...
SELECT NOW( )
2012-05-31 17:51:15SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)
2012-06-30 17:51:15Ahogy ez is jó:
SELECT DATE_ADD( '2013-01-30 17:51:15', INTERVAL 1 MONTH )
2013-02-28 17:51:15 -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #9935 üzenetére
Mondjuk igazából a saját témaköröm inkább arról szól a Stack Overflow-n, hogy a plusz egy hónap miért viselkedik ilyen érdekesen, nem is annyira fókuszál konkrétan a hónap utsó napjára, csak hogy miért b@szódik el, ha 31-én hozzáadok egy hónapot, most jövök rá.
De ez mindenképp nagyon hasznos segítség volt.Az is igaz, hogy azt mondjuk lehetne csekkolni, hogy amennyiben ez a hónap 31 napból áll, és épp 31-e van, akkor másképp viselkedjen, konkrétan így, ahogy mutattad, és akkor ezt a kódot már fel lehetne rakni SO-ra.
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #9932 üzenetére
Na várjunk, most fogom fel a tweet lényegét:
első:
http://twitter.com/rasmus/status/208157669452816384
második:
http://twitter.com/rasmus/status/208160760302538752Ezek szerint a PHP a GNU date-et használja, tehát igazából nem a PHP sara ez, hanem a GNU date függvényé?
-
PazsitZ
addikt
válasz
Sk8erPeter #9932 üzenetére
Valóban érdekes probléma
$date = new DateTime();
$date->modify('last day of next month');
$nextMonth = $date->format('Y-m-d H:i:s');
$nextMonthLastDay = $date->format('d');
echo "$nextMonth";
echo "$nextMonthLastDay";Ha $date->modify('1 month'); kódot próbálod az feltehetőleg az aktuális/kiinduló hónap napszámát adja hozzá, ami 31 így produkál 7. hónap elsejét, aminek azután a napszáma már ugye 31.
-
Sk8erPeter
nagyúr
Úgy tűnik, sikerült felfedezni egy érdekes hibát a PHP beépített dátumkezelő függvényeivel kapcsolatban: [link]
A lényeg: ma ugye május 31 van, lekértem a köv. hónap napjainak számát, 31-et ír, miközben június hónap 30 napból áll csupán. A másik: a mostanihoz képest plusz egy hónapra július 1-jét írja (07-01), pedig annak június 30-ának kéne lennie (06-30).
Úgy tűnik, már Rasmus is írt a problémáról, trükközni kell azzal, hogy adott hónapban 15-e utáni dátum legyen, ahhoz képest legyen számolva.Hát ez elég gáz, nem értem, eddig hogy nem sikerült ezt kijavítani. Én most konkrétan PHP 5.3.8-at használok.
-
Sk8erPeter
nagyúr
-
CSorBA
őstag
válasz
Sk8erPeter #9928 üzenetére
Én egy komoly e-learninges (itfactory, netacademia szerű) anyagra számítottam, ennek fényében lepődtem meg
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #9923 üzenetére
"Feltételezem, a kód C#-ból van"
Igen, rögtön gondoltam, de nem igazán volt világos, hogy ez most hogy jön ide, PHP-s témához, amikor kizárólag a PHP-re jól alkalmazható, itt érvényes mintákról beszéltünk korábban.
Éppen ezért mondtam, hogy most fel lehetne ilyen alapon hozni Singletonra az ablakkezelő objektumokat is, de mivel ilyen PHP-nél nincs, tök felesleges ilyenről beszélni.Lambda: jahh, oké, closure néven oké, most már ezen a néven is.
Ja, eddig is világos volt, hogy miről beszél, hogy nehéz hozzá unit testet írni. Én viszont azt mondtam, hogy vannak esetek, amikor erről felesleges beszélni, pl. most egy naplózó osztály esetén nem biztos, hogy valaki hatalmas bűnt követ el, ha nem passzolgatja inkább a controllereknek a már létrehozott példányt, hanem használ egy nyamvadt singleton-példányt, azt' kész.
Van, amikor úgy logikus, hogy 1 példány legyen valamiből, és azt csak macerás passzolgatni össze-vissza, ezért jól jön néha a Singleton minta, ennyit állítok. Aztán ha már unit testekről van szó, nyilván át kell gondolni, hogyan lehet ezt átvariálni.Egyébként az adatbázis-kapcsolódáshoz nem biztos, hogy egy request során csak egyet akarunk, ezért nem is biztos, hogy olyan jó "klasszikus" példának a Singleton alkalmazására, mert elképzelhető, hogy valaki egy request során több adatbázishoz is szeretne csatlakozni.
===================
(#9924) Athlon64+ :
ezek szerint elbeszélünk egymás mellett, nem értetted meg, miről magyaráztam. Most itt fentebb leírtam még egyszer. PHP-ről beszélünk, könyörgöm, ne keverjük már ide a C#-ot, meg a többi nyelvet, mert nyilván nagy különbségek lehetnek."A tervezési minták átívelnek a nyelveken."
Nem mondod komolyan, TÉÉÉNYLEEG??
Azért ne nézd már hülyének az embert. Inkább próbáld megérteni, miről beszél. Pl. arról, hogy attól még, mert mondjuk van értelme ablakkezelő objektumról beszélni egy másik nyelv, más jellegű felhasználása során, attól még nem biztos, hogy hasonló minta alkalmazható egy nyomorék PHP-s webalkalmazás esetén. -
CSorBA
őstag
Off:
Tudna nekem valaki mondani nyílt forráskódú, de nem ingyenes CMS-t?
-
Peter Kiss
őstag
válasz
Sk8erPeter #9922 üzenetére
IoC-nál jobb a DI, de egy DLL-t elég nehéz bootstrapelni.
A tervezési minták átívelnek a nyelveken. -
Tele von Zsinór
őstag
válasz
Sk8erPeter #9922 üzenetére
A service locator patternre hozott példát, hogy hogy működik ez .NET alatt. Feltételezem, a kód C#-ból van, ott van ilyen szintaxisa a template-eknek. Első ránézésre valahol a Factory és a Dependency Injection keverékének tűnik.
Lambda, vagy más néven névtelen függvények. A php világban leginkább closure néven ismertek.
Becsatlakozva kicsit az épp folyó témába: nagyon sokáig használtam én is singletonokat, leginkább a már említett adatbázis-kapcsolat miatt, mert hogy abból legfeljebb egyet akarunk egy request során. Aztán amikor elkezdtem belemászni a tesztelésbe, meg láttam, mennyire is nehéz az ilyenekre épülő kódhoz unit testet írni (avagy: lehetetlen), gyorsan leszoktam róla.
Jelenleg a Dependency Injection a leginkább használt mintám, erre egy gyors és könnyen érthető megvalósítás a Pimple. Pár sorral megoldható, hogy a $app["log"] első híváskor példányosítsa a logger osztályt, a többi meg ugyanazt kapja vissza - mock osztályokkal innentől nagyon könnyen tudom például azt tesztelni, hogy egy service x függvénye y paraméterekkel meghívja-e annyiszor a loggert, ahányszor kell. Analóg módon az adatbázist (mondjuk $app["db"]) is le tudom cserélni a tesztek alatt egy erre tökéletes (akár tömbökkel működő) implementációra, amivel pontosan azt tudom tesztelni, amit akarok: a controllereimet.
És ez csak a felszín. Nagyon érdemes utánaolvasni részletesebben, kezdésnek Fabien Potencier cikksorozatának első két részét ajánlom.
-
Sk8erPeter
nagyúr
válasz
Peter Kiss #9921 üzenetére
Várj, most PHP esetén milyen dll-ekről beszélünk?
"Lambdákkal"?Lehet, hogy sok volt a mai utazás, és fáradt vagyok, de most nem esik le.
Service locatorről fogalmam sincs, nem használtam még, de erről ezt találtam (nem javasolja).
Mivel már idekevertük a szezont is a fazonnal (dll-ek?), nem vágom, egyáltalán PHP keretein belül beszélünk-e a Singleton osztályok létjogosultságáról.Én szimplán azt állítottam, hogy pl. egy Logger osztálynál teljesen megfelelő megoldás egy Singleton használata, statikus metódusokkal, hogy mindenki hozzáférjen, tök felesleges bonyolítani egy ilyen osztályt. Mindent lehet még nyakatekertebben is megoldani, hogy aztán arra recskázhasson a fejlesztő, hogy ő milyen ügyes volt, de vannak esetek, amikor tökéletes időpocsékolás ilyennel rajoskodni.
-
Peter Kiss
őstag
válasz
Sk8erPeter #9920 üzenetére
Singleton-t még logger osztállyal sem használnék. Van mindenre sokkal okosabb és jobb megoldás, erre pl. egy service locator lenne az egyik (e mögé be lehet tenni, hogy csak egy instance lehet mindig, de ki hogyan szereti) lambdákkal. Ez egyébként nagy királyság, a már említett DLL-ből kintre csak ennyi látszik: DLL.GetService<TService>();
-
Sk8erPeter
nagyúr
válasz
Peter Kiss #9919 üzenetére
Találtam egy jó összefoglalót arról, hogy miért is NEM feltétlenül indokolt a Singletonok használata (amiről tulajdonképpen Te is beszélsz):
http://gooh.posterous.com/singletons-in-php
"Singletons are not unique snowflakes
In languages where objects live in an application server, Singletons can be used to keep memory usage low. Instead of creating two objects, you reference an existing instance from the globally shared application memory. In PHP there is no such application memory. A Singleton created in one Request lives for exactly that request. A Singleton created in another Request done at the same time will still be a completely different instance. And it will occupy it's own memory. Those instances are not linked to each other. They are completely isolated, because PHP is a Shared-Nothing architecture. You do not have one single unique instance, but many similar instances in parallel processes. Thus, one of the two main purposes of a Singleton is not applicable.Don't construct twice, it's all right
Advocates of the Singleton in PHP often argue it's still useful to be able to limit an instance within a single request. The aforementioned database classes being the most prominent example. But the much easier solution would be simply not to instantiate a second instance. If anyone can make sure there is just one instance, it's the developer. If you need to have the same instance in many classes, use Dependency Injection. Just create one, inject everywhere. That will also save you the hassle of deconstructing your Singleton once you notice you need a second instance of it all of a sudden.
Another example where Singletons are often applied but don't make sense is classes like FrontControllers. While conceptually it makes sense to say "There may be only one FrontController", it is superfluous to ensure it from an architectural viewpoint. A FrontController is usually instantiated only once in your application's control flow anyway. If you don't write a new Foo; anywhere else, you already made sure there is just one instance. So you ain't gonna need the Singleton here. Don't express concepts in your code that are never used.Don't shoot yourself in the foot
The Singleton's other purpose (to have a global access point to the instance) is undesirable in PHP. The desire for that usually stems from having an architecture where objects pull in their dependencies. Like any globals and statics, the Singleton's getInstance() method creates coupling to the global scope. This makes Unit-Testing harder. There is ways to mitigate this, but in general, the cost to mitigate is higher than to simply avoid the Singleton in favor of Dependency Injection. This is especially true in those situations, where the Singleton is applied but never instantiated twice anyway."Itt van egy hosszabb témázás magyarul erről:
http://weblabor.hu/blog/20100727/php-egyke-ososztaly============
Hadd mondjak ellenérvet is (már úgyis megszokhattátok, hogy ez a rész is mindig jön a hsz.-eimben
):
[link]
Pont ez jutott nekem is eszembe elsőként, amit itt írnak az elfogadott válaszban, hogy pl. egy Logging class esetén tipikusan jól használható egy Singleton osztály, mert ott felesleges tesztelésekről beszélni (valszeg nem a naplózásért felelős osztály a legfontosabb, amit tesztelni kellene), plusz teljesen elfogadható lehet ennek a mintának az alkalmazása, mert más módon szépen összehozni a rendszerrel feleslegesen macerás lehet.Saját példa az, hogy bizonyos esetekben csak nagyon macerás módon, adott esetben a teljes rendszer újratervezésével lehetne normálisan beépíteni a rendszerbe egy több helyen szükséges változó Singleton nélküli használatát - tipikusan olyan rendszerekre gondolok, ahol jelenleg még nem elsősorban az OOP-szemléletet követik, hanem egyelőre inkább globális függvényekét (bár van elmozdulás az OOP irányába): mint a Drupal.
Más megoldás nyilván a globális változók használata, ami tulajdonképpen hasonló lehet a Singletonokhoz, de kicsit mégis más. Pl. Drupalnál szükségem volt már ilyenre: [link].A másik: csak hogy egy kicsit pontosítsunk, a Singleton-osztályok használata elsősorban PHP-nél felesleges. Aztán más nyelveknél vannak bőven kivételek, mint pl. egy ablakkezelő objektum használata.
Ettől függetlenül tényleg fennáll, hogy a lehető legritkább esetekben szabad használni, alapvetően a már említett szempontok miatt kerülendő. Főleg PHP-nél (lásd az idézett cikket).
===
DE további ajánlott linkek:
http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons -
Peter Kiss
őstag
válasz
Speeedfire #9918 üzenetére
A felsoroltak közül az átláthatóság és a továbbfejleszthetőség a fontos, de már említettem azt is, hogy nem tesztelhető a logika, valamint felborítja az OO elveket némileg*.
*Attól, hogy valaki osztályokat ír, még nem feltétlenül fejleszt objektum-orientált módon. Tudom, én is bejártam az utat.
-
Speeedfire
félisten
válasz
Peter Kiss #9916 üzenetére
Lehet, hogy csalóka. De mi számít akkor ezekben az esetekben?
Átláthatóság? Sebesség? Továbbfejlesztés? Vagy miért nem "előnyös" a static és a singleton? -
Peter Kiss
őstag
válasz
PazsitZ #9912 üzenetére
A Singleton anti-pattern, tesztelhetetlen alkalmazást eredményez, illetve fogalmad sem lesz arról, hogyan működik az alkalmazás.
Elég csak arra gondolni, mi van akkor, ha kapsz egy egyébként működő kódhalmazt, amit használni szeretnél, de rejtett dependency-k vannak benne a singletonok miatt. Sosem szabad ilyet csinálni.
Példa:
<?php
/* ... */
$controllerFactory = $this->_controllerBuilder->GetControllerFactory($this->HttpContext);
$controller = $controllerFactory->CreateController($this->HttpContext);
if (!$controller->GetType()->ImplementsInterface("\\System\\Web\\Mvc\\IHttpHandler") || !$controller->IsStateLess()) {
$sdsf = new SessionProviderFactory();
$this->SessionManager = new SessionManager($this->HttpContext, new UsersAndGroupsDataContext(), $sdsf);
$this->SessionManager->Validate();
$this->HttpContext->Session = $this->SessionManager->GetCurrentSession();
}
if (!$controller->Execute($this->HttpContext, $this->_actionInvokers->GetActionInvoker(typeof($controller)))) {
throw new \Exception("Failed to execute action: " . $this->HttpContext->Route());
}
/* ... */Itt mondhatnám én is a $this->HttpContext átadása helyett, hogy akkor HttpContext::Instance() az egyes helyeken (kihagyva a metódusok paraméterlistájából), mert itt ugyanazt jelenti, de azt eredményezné, hogy még számomra se lenne világos, minek mire van szüksége.
A példában szereplő if block egyébként még javításra szorul.
-
Peter Kiss
őstag
válasz
Sk8erPeter #9914 üzenetére
Igaz, de azzal nem fog tudni mit kezdeni.
---
@Speeedfire
Az egyszerűbb út csalóka. Cégnél is azt választották mindig, egy DLL kódját már több, mint egy hete hegesztem, hogy kimossak mindent a szarból (abban pl. mindig ilyenek voltak: [akármilyen]DAL.Instance(), pff(mindez mint metódushívás paramétere is akár)).
-
Speeedfire
félisten
válasz
Peter Kiss #9911 üzenetére
Ezt a staticet nem sűrűn használom, csak ha valami egyszerű értéke van csak. Igaz/hamis vagy ha esetleg szám, mint pl a user id.
Alapvetően én is példányosítok.A role based nem rossz dolog, de ennyire még nem ástam bele a témába magamat sajnos. Pedig kellene, drupalban szerettem.
A user modul is megtudja mondani végül is, de modulban is meg kellene néznem még, hogy nem-e guest. Így meg egyszerűbbnek tűnik.
PazsitZ: Az a baj, hogy ez a controller access részénél használom az expression részéhez, mivel még nincs meg a rb dolog. Oda meg hiába írom meg a setState részt, mert ugye attól még nem tudom, hogy guest vagy sem az illető.
De lehet ma nekiesek ennek a rb dolognak és megoldom azzal.
Igazából csak 3 kellene a mostani dologhoz.
guest, authenticated és admin -
Sk8erPeter
nagyúr
válasz
Peter Kiss #9911 üzenetére
"Yii::app()->user->admin; és nincs ez a static borzalom benne a rendszerben."
De még mindig ott a public static function app(). -
Sk8erPeter
nagyúr
válasz
papa019 #9868 üzenetére
Hátha másnak is hasznos lesz, közben privátban megoldottuk a dolgot, olykor a MultiViews letiltása csodákat tesz.
Példa, ami itt többek közt a problémákat okozta: megnyitottuk az example.com/xyz címet, de közben aktív RewriteRule is volt, plusz MultiViews bekapcsolva, de eközben - mint kiderült - volt a gyökérkönyvtárban egy xyz.php fájlunk is, így az example.com/xyz betöltésére egyből 500 Internal Server Errort kaptunk. A MultiViews bekapcsolt állapota esetén egyébként elkezd az Apache kutakodni a megfelelő kiterjesztésű fájlok után: [link]..htaccess-ben:
Options +FollowSymLinks
HELYETT:
Options +FollowSymLinks -MultiViews... és máris nem volt 500-as error.
-
PazsitZ
addikt
válasz
Speeedfire #9905 üzenetére
Ha már bejelntkezett userről van szó miért nem állítod be belépéskor a setState-el hogy a user isAdmin true vagy false. Bár ekkor még implicit nincs lekezelve a belépett kilépett kérdés, de jobb esetben ezt önmagában rbac szabályokkal gondolom lekezeled a controller hívás előtt.
Jah most olvasom csak végig, hogy gyakorlatilag Athlon64+ is ezt javasolja.
(#9911) Athlon64+:
Azért a singleton se ördögtől való dolog. -
Peter Kiss
őstag
válasz
Speeedfire #9910 üzenetére
Static dolgok használata könnyen gyorsan spagetti kódot eredményez, fogalmad sem lesz, mi zajlik a rendszerben, tesztelhetőségről ne is beszéljünk.
A másik, hogy ha ezt a kérés során folyamatosan használod mondjuk 5 alkalommal, akkor ötször fog ez így lefutni?
Kódírás folyamán mindig érdemes lefektetni pár szabályt, amit betartasz, pl.:
static változóba nem rakok semmit, ami állapotot tárol (singleton is kinyírva)
static csak olyan lehet, ami valamilyen service-szel kapcsolatos (nálam ilyen a Path osztály, ez csak a mappák, fájlok neveit machinálja string-ként, az IsAdmin cuccod ilyesmi, de rossz a megközelítés*)Ezeket igyekszem mindig betartani, de a saját kis reflection kiegészítésem miatt én is tárolok dolgokat static változóban, de azok nem is változnak, amíg az osztály maga nem változik meg. Érdemes úgy tekinteni a static elemekre ilyen szempontból, mintha a PHP nem shared nothing elveket vallana.
---
Static cuccokkal van olyan gond, hogy simán keresztülhúzod az OO elveket. Most egy felhasználóról akarod megmondani, hogy admin avagy nem admin úgy, hogy gyakorlatilag kiszeded az egészet a rendeltetési helyéről, hiszen maga a User meg tudja mondani magáról az-e, ahogyan ez látszik is.
A kereted ad hozzáférést egy user nevű field-hez, az mi? Nem tudod egész véletlenül megmondani a rendszernek, hogy oda egy profibb objektumot toljon be? Mert akkor ennyi lenne: Yii::app()->user->admin; és nincs ez a static borzalom benne a rendszerben.Maga a design is lehet rossz: nem egy bit kell arra, hogy admin-e, hanem hegeszteni kell olyan Role rendszert, amibe ezt szépen bele lehet kódolni.
---
Én is használtam Singleton-t, de utána alig bírtam kiírtani a rendszerből, nagyon rossz ötlet. Nem tudom, mennyire jött át a dolog, de ha most nem, majd rájössz.
-
Speeedfire
félisten
válasz
Peter Kiss #9909 üzenetére
Az utolsó mondatodat nem értem, miért nem jó ötlet és miért hányás?
A kód amit írtál meg teljesen jogos. -
Peter Kiss
őstag
válasz
Speeedfire #9905 üzenetére
Ha már a kód szépségéről volt szó:
<?php
class Auth{
public static function isAdmin() {
if(Yii::app()->isGuest) {
return false;
}
$user = User::model()->findByPk(Yii::app()->user->id);
return $user->admin == 1;
}
}Persze ez a statikus összehányás nem jó ötlet.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9907 üzenetére
Na jó, befejeztem, amúgy nincs mit, és én is köszi.
-
Speeedfire
félisten
válasz
Sk8erPeter #9906 üzenetére
Na, ma is tanultam valami.t
Köszi.Stewie a nagyÚr, te Chewbacca vagy!
Grat! -
Sk8erPeter
nagyúr
válasz
Speeedfire #9905 üzenetére
http://the-echoplex.net/log/php-case-sensitivity
class constructors - ez is case insensitive. Régebben meg ugye az volt a módi, hogy a konstruktor neve egyezik az adott osztály nevével. Most már a "mágikus" __construct()-ot érdemes ugye használni. Na de ettől függetlenül működik a régi módszer is.
Röviden: konstruktornak minősül, mert azonos a neve az osztályéval (case insensitivity), konstruktor meg nem lehet statikus (ahogy a hibaüzenet is elmondja).
Megoldás: adj más nevet a metódusnak, és annyi.Szerk.: jé, most lettem "PH! nagyúr".
Ezt is megértem. Mindenki vendégem egy virtuális sörre.
-
Speeedfire
félisten
Szerintem ezt így nem fogod tudni.
Más:
Adott egy ilyen kód:<?php
class IsAdmin{
public static function isAdmin() {
if(Yii::app()->isGuest) {
return false;
} else {
$user = User::model()->findByPk(Yii::app()->user->id);
if($user->admin == 1) {
return true;
} else {
return false;
}
}
}
}Megszeretném hívni, de nem akarja...
IsAdmin::isAdmin();Ezt kapom rá. A 16. sor meg a fájl vége.
Fatal error: Constructor IsAdmin::isAdmin() cannot be static in on line 16
-
cass
aktív tag
Na az IP cím már megvan, ezzel most mit tudok kezdeni? Valahogy nem lehet kideríteni, hogy hova regisztráltak vele, vagy milyen oldalakat látogattak?
-
cass
aktív tag
Sziasztok! Lehet, hogy rossz helyre írok, de szerintem itt vannak az ilyen programozó zsenik akik segíthetnek nekem. Először is egy IP címet szeretnék megtudni egy darab e-mail alapján. Az illető után szeretnék egy kicsit nyomozni. Ha megvan az IP cím onnan meg ki lehet valahogy szerintem deríteni, hogy milyen oldalakat látogat. Javítsatok ki ha tévedek nem értek hozzá. Előre is kösz a segítséget!
-
Sk8erPeter
nagyúr
válasz
Peter Kiss #9899 üzenetére
"Királyság", de nem abban a formában, ahogy írták abban a kódban, amit Speeedfire itt "idézett".
Új hozzászólás Aktív témák
- OFF TOPIC 44 - Te mondd, hogy offtopic, a te hangod mélyebb!
- Házimozi haladó szinten
- Milyen egeret válasszak?
- Autós topik
- Gitáros topic
- Viccrovat
- Macska topik
- Steam, GOG, Epic Store, Humble Store, Xbox PC Game Pass, Origin Access, uPlay+, Apple Arcade felhasználók barátságos izgulós topikja
- Vezetékes FEJhallgatók
- Kerékpárosok, bringások ide!
- További aktív témák...
- Beszámítás! Apple Mac mini 2023 M2 Pro 16GB 512GB SSD számítógép garanciával, hibátlan működéssel
- Csere-Beszámítás! Sapphire Pure RX 7700XT 12GB GDDR6 Videokártya! Bemutató Darab!
- MacBook, Apple M1 / M2 kompatibilis dokkolók, DisplayLink 4K, USB-C, Type-C
- Bomba ár! Lenovo ThinkBook 14s Yoga - i5-1135G7 I 16GB I 256SSD I 14" FHD Touch I Cam I W11 I Gari
- Lenovo Thinkpad P16 G2 - i9-13980HX, 64GB, 1TB SSD, 16" WQUXGA (3840 2400), RTX 4090 (ELKELT)
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest