- Motorola Moto Tag - nyomom, követ
- Ez lehet a legnagyobb akkuval szerelt Snapdragon 8 Elite telefon
- Motorola Edge 40 neo - színre és formára
- Honor 200 Pro - mobilportré
- Xiaomi 12T Pro - kétszínű, mint a kétszázas
- Motorola Edge 30 Neo - wake up, Jr...
- VoLTE/VoWiFi
- iPhone topik
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Xiaomi 13 - felnőni nehéz
Új hozzászólás Aktív témák
-
-
-
sztanozs
veterán
Amennyiben a 23-féle forrás 24 féle képen állítja elő a dolgokat, úgy célszerű bevezeti egy abszrakciós szintet és írni minden forásra egy-egy feldolgozót az absztrakciós szint (illetve néhány kulcs-feldolgozó-függvény) újrafelhasználásával. Persze meg lehet oldani egyetlen giga-feldolgozóval is, de ebben az esetben, ha bármelyik forrás változik, akkor a feldolgó fércelése kihatással lehet más (nem érintett) forrás rutinjának a szétesésével.
-
-
SUPREME7
őstag
$szoveg = "almafa";
function fuggveny1(){
global $szoveg;
echo $szoveg;
} -
Taci
addikt
Talán így átláthatóbb és egyszerűbb a kérdésem:
$szoveg = "almafa";
function fuggveny1(){
echo $szoveg;
}
function fuggveny2(){
fuggveny1();
}
Hogyan tudom eljuttatni a $szoveg változó tartalmát (paraméterek használata nélkül) a fuggveny1-be, miközben azt előbb a fuggveny2-nek kell meghívnia, csak azon keresztül fut le?
-
Mike
veterán
azért egy kis erro kezelés nem árt
$result = curl_exec($ch);
$result_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($errno = curl_errno($ch)) {
valami
}
curl_close ($ch);
én még tettem bele egy kis json átalakítést is, úgyis mindig abban jön vissza a válasz (kivéve a Gyevi bírót)
$res = array("result" => json_decode($result, true), "result_code" => $result_code);
return $res;
-
Taci
addikt
DOMDocument::load(): Extra content at the end of the document in xml_linkje, line: 1
Túl lett bonyolítva. Csak ezt a hibabejegyzést szeretném kezelni. Fogalmam sincs, mi okozta, valószínűleg "elírtak valamit" az xml-ben. (?) Innen jött az ellenőrzés ötlete, és onnan pedig minden más.De csak ezt szeretném kezelni, ha baj van az xml-el, akkor a foreach-ben kapjon egy continue-t (hibás fájllal ne dolgozzon), aztán majd javítják, a szkript meg pár perc múlva újra próbálja úgyis.
Ennek az 1 hibabejegyzésnek a kezeléséhez kérnek segítséget.
-
Taci
addikt
Na jó, ezt nem értem.
Csináltam egy eléggé overkill funkciót az ellenőrzésre:
function testIfValidURL($url){
$headers=get_headers($url, 1);
$url_valid_state = "";
if (stripos($headers[0],"200 OK")){
//URL Valid
echo "URL is Valid (200 OK): " . $url . "<br>";
$url_valid_state = TRUE;
return TRUE;
//exit();
} else if (stripos($headers[0],"301") || stripos($headers[0],"302")){
//URL Redirected (301 or 302)
echo "URL Redirected (301 or 302): " . $headers[0] . ". Checking Location link.<br>";
if (array_key_exists('Location', $headers)){
if (is_array($headers['Location'])){
//Array
echo "Headers Location type is array.<br>";
$location_count = count($headers['Location']);
echo "location_count: " . $location_count . "<br>";
$url_valid_state_check = 0;
foreach ($headers['Location'] as $headers_location_value){
echo "Checking headers_location_value: " . $headers_location_value . "<br>";
if(testIfValidURL($headers_location_value)){
$url_valid_state_check++;
return TRUE;
//exit();
}
}
echo "url_valid_state_check: " . $url_valid_state_check . "<br>";
if ($url_valid_state_check > 0){
$url_valid_state = TRUE;
} else {
$url_valid_state = FALSE;
}
} else if (is_string($headers['Location'])){
echo "Headers Location type is string. Checking.<br>";
if(testIfValidURL($headers['Location'])){
$url_valid_state = TRUE;
}
}
} else {
echo "URL header doesn't include Location. Setting URL valid state to FALSE.";
$url_valid_state = FALSE;
}
} else {
echo "URL status code is unknown: " . $headers[0] . ". Setting URL valid state to FALSE.";
$url_valid_state = FALSE;
}
return $url_valid_state;
}
Az eredeti linkkel próbáltam:
https://www.szeretlekmagyarorszag.hu/ime-a-tokeletes-toltott-kaposzta-receptje/A kimenet:
URL Redirected (301 or 302): HTTP/1.1 301 Moved Permanently. Checking Location link.
Headers Location type is array.
location_count: 2
Checking headers_location_value: https://www.szeretlekmagyarorszag.hu/rokaland/ime-a-tokeletes-toltott-kaposzta-receptje
URL Redirected (301 or 302): HTTP/1.1 301 Moved Permanently. Checking Location link.
Headers Location type is string. Checking.
URL is Valid (200 OK): https://www.szeretlekmagyarorszag.hu/rokaland/ime-a-tokeletes-toltott-kaposzta-receptje/
Mondom nagyszerű, nézzük meg egy direkt elrontott linkkel is, utána írtam egy 1-est:
https://www.szeretlekmagyarorszag.hu/ime-a-tokeletes-toltott-kaposzta-receptje/1A kimenet:
URL Redirected (301 or 302): HTTP/1.1 301 Moved Permanently. Checking Location link.
Headers Location type is string. Checking.
URL is Valid (200 OK): https://www.szeretlekmagyarorszag.hu/eletstilus/1-arany-5-ezust-2-bronz-es-8-olimpiai-kvota/
Hát ez az 1 arany 5 ezüst dolog hogy került oda?(Kínomban röhögök már.)
Kérem, valaki magyarázza el, mi történik itt.
Amúgy ha 123456-ot írok a végére, akkor meg megint a jó linkre dob tovább, és a korábban írt output lesz.Ez így megbízhatatlan, használhatatlan.
-
pelyib
tag
Mert az tenyleg nem "valid":
❯ curl -I https://www.hvg.hu/rss
HTTP/2 301
date: Sat, 22 May 2021 15:44:52 GMT
content-type: text/html
location: https://hvg.hu/rss
set-cookie: uid=AAseX2CpJvQogxXwVFngAg==; expires=Thu, 31-Dec-37 23:55:55 GMT; domain=hvg.hu; path=/
p3p: policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"
cf-cache-status: DYNAMIC
cf-request-id: 0a3659447b00004abdaf9e5000000001
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 65372b1a5c754abd-FRASzerintem ez a method nev becsapos, mert nem azt nezi, h valid e, hanem, h elerheto e. A ketto nem ugyan az.
A "https://ez.egy.valid.domain.com/valami/utvonal" valid URL, de nem letezik.update: masik link is 301
-
Taci
addikt
Azt találtam, hogy van benne (a load()-ban) ellenőrzés is:
Returnstrue
on success orfalse
on failure.Szóval akkor valószínűleg így jó lehet:
$xmlDoc = new DOMDocument();
if($xmlDoc->load($xml) === FALSE){
echo "hiba az xml-ben (content not valid). skip<br>";
}
És utána dolgozhatok az $xmlDoc-kal tovább, mert az if-ben így már a feltöltés (load()) is megvolt az ellenőrzéssel együtt.
Legalábbis remélem, jól logikázok.
-
pelyib
tag
Nem iterable a value annak a valtozonak, esetleg egy type casting, de jobb lenne ha el se jutna oda a program.
foreach ((array)${$dynamic_variable} as $value){
Ellenorzesre: is_iterable
-
Taci
addikt
Nagyon nyakatekert módon, de végül így oldottam meg:
0) Az ellenörző funkcióval kezdődik a szkript (lejjebb részletesebben, a 3. ponttól)
1) Logolás kezdetekor beszúr egy szöveget (pl. "Logolás kezdete")
2) Logolás végén ismét egy szöveg (pl. "Logolás vége")
3) Megvizsgálja a log fájlban a "Logolás kezdete" és "Logolás vége" sztringet ismétlődéseit
4) Ha megegyeznek (pl. 2 - 2 db), akkor az azt jelenti, hogy el lett kezdve, és le is lett zárva (azaz már nem fut), tehát indulhat újra a kód futása a szükséges feladatokkal.
5) Ha különböznek, akkor összehasonlítom a log fájl időbélyegzőjét, illetve a jelenlegi időbélyegzőt.
6) Ha kevesebb, mint a beállított limit (10 perc), akkor a php error.log fájljába ír, hogy ne módosítsa a szkript log fálját, de mégis legyen infóm arról, hogy megállt, nem fut tovább, és lássam az okát.
7) Amint 10 perc fölött van a különbség, attól függően, hogy a "kezdete" vagy "vége" sztringekből van kevesebb, beszúrja a logba a megfelelő sztringet a megfelelő mennyiségben, kvázi helyre állítva a logot.
Aztán fut tovább a szkript a normál módon, a kezdete és vége sztringek úrja párban vannak, megtörtént az esetleges szükséges "karbantartás" (ha mondjuk nem futott volna végig a szkript, és a "vége" bejegyzést nem tette volna meg).Egyszerűbb ötletem nem volt, és ezt most egyelőre bolondbiztosnak látom.
5 percenként fut a szkript, ha esetleg nem végezne a következő futtatásig, akkor nem indul, majd csak az azutáni 5. percnél.
Ha pedig valamiért nem futna végig (pl. szerverhiba), és elrontaná a log fájlt (és ezzel az ellenőrzést), max 10 perc múlva helyrehozza az ellenőrzéses szükséges sztringeket.Remélem, jó lesz.
-
Mike
veterán
na ez új info volt, mondjuk egy 65k-s mező mellett nincs másik, kivéve TEXT vagy BLOB
The length of a
CHAR
column is fixed to the length that you declare when you create the table. The length can be any value from 0 to 255. WhenCHAR
values are stored, they are right-padded with spaces to the specified length. WhenCHAR
values are retrieved, trailing spaces are removed unless thePAD_CHAR_TO_FULL_LENGTH
SQL mode is enabled.
Values inVARCHAR
columns are variable-length strings. The length can be specified as a value from 0 to 65,535. The effective maximum length of aVARCHAR
is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. See Section 8.4.7, “Limits on Table Column Count and Row Size”. -
Mike
veterán
én sem
igen
ugye utf8 az 3 byte egy karakter
inkább úgy mondanám az strlen azt hiszi egy karakter egy byte
de végeredményben igenaz sql-n az utf8 varchar 255 karakerek száma
mostanában kezdek áttérni a json-re, főleg amit nem akarok indexelni, abban keresni
igaz a Mysql 8-asban van json támogatás, és azt hiszem indexelni is lehet az egyes kulcsokat
még a PDO-ba kellen natív json támogatás, hogy ne kelljen kézzel visszakódolni -
Mike
veterán
nem akarok kötözködni de maga a string is indexelt tehát elég végigmenni rajta egy for-ral
$a = "almafa";
for($i=0;$i<strlen($a);$i++)
echo '<br>'.$a[$i];
Mr. Y arra figyelj, hogy ha UTF-8-at használsz akkor a multibyte extension legyen a php-ra felrakva, és strlen helyett mb_strlen-t kell használnii -
-
sztanozs
veterán
1) The difference between utf8 and utf8mb4 is that the former can only store 3 byte characters, while the latter can store 4 byte characters. In Unicode terms, utf8 can only store characters in the Basic Multilingual Plane, while utf8mb4 can store any Unicode character.
Ez alapján a kiterjesztett karakterkészletbe tartozó unicode karakterek (vsz emoji, extended chinese meg más távolkeleti nyelvek) támogatottak pluszban.2) karakterszám nem változik, a tábla mérete fog nőni (bájtban), de jelentősen csak akkor, ha ki is használod.
A SO-s probléma pedig ez volt:Mistery solved! There was a bad installation/upgrade/config with mysql and utf8mb4 was not properly installed.
...
Sorry for the delay, I was enjoying my holidaysMySQL (in my case MariaDB) was lacking the neccesary files so the encoding didn't exist. The files need to be compiled (I think recompiling with necessary flags) or reinstall a recent version. This happened on an old cent os 5 server, so in more recent versions this shouldn't happen, in fact I installed cent os 6.7 and utf8mb4 was detected without problems.
3) ez jó, de ha _as keresést akarsz, akkor kénytelen leszel mégiscsak a _bin-t használni, ha az általad használt verzió még nem támogatja az _as_ci-t, és a _bin meg ugye nem _ci. Szóval azt kell eldöntened melyik fáj kevésbé.
-
pelyib
tag
Mivel en se tudtam a valaszt, viszont erdekelt, ezert kicsit olvasgattam es ezeket talaltam:
For nonbinary collation names that do not specify accent sensitivity, it is determined by case sensitivity. If a collation name does not contain_ai
or_as
,_ci
in the name implies_ai
and_cs
in the name implies_as
. For example,latin1_general_ci
is explicitly case-insensitive and implicitly accent-insensitive, andlatin1_general_cs
is explicitly case-sensitive and implicitly accent-sensitive.
[LINK]Illetve ezt a kerdest S0-n
If you need "beyoncé" and "beyonce" to be considered different, then ideally you would use a case-sensitive (and either explicitly-stated or implied accent-sensitive) collation. However, it looks like this is not available in MySQL 5.6 (or even 5.7), while MySQL 8.0 does haveutf8mb4_0900_as_cs
, or evenutf8mb4_0900_as_ci
if you only want the accent to distinguish between the values while allowing "beyonce" and "Beyonce" to match.Bar ez nem kisokos, de legalabb valasz az eredeti kerdesre
UPD: csak lehet ezt:
percona x@y:z> show create table char_collection;
+-----------------+-------------------------------------------------------------+
| Table | Create Table |
+-----------------+-------------------------------------------------------------+
| char_collection | CREATE TABLE `char_collection` ( |
| | `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL |
| | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-----------------+-------------------------------------------------------------+
1 row in set
Time: 0.039s
percona x@y:z> select * from char_collection where name like 'ár%' collate utf8mb4_bin;
+------------------------+
| name |
+------------------------+
| árvíztűrő tükörfúrógép |
+------------------------+
1 row in set
Time: 0.237s
percona x@y:z> select * from char_collection where name like 'ar%' collate utf8mb4_bin;
+------+
| name |
+------+
0 rows in set
Time: 1.997s
percona x@y:z> select * from char_collection;
+------------------------+
| name |
+------------------------+
| árvíztűrő tükörfúrógép |
+------------------------+
1 row in set
Time: 0.067s -
Taci
addikt
Úgy tűnik, ez a módszer (egyelőre) így már jó. Tehát adatbázisba (az idézőjelnél maradva) mindenképp a normál idézőjellel kerül, onnan amikor HTML-be kerül, már htmlspecialchars-szal megy.
--------------------
Viszont a kutakodás közben azt találtam, hogy utf8 helyett utf8mb4-et kellene már használni mindenütt.
Nekem minden php kódomban ez van jelenleg:
$conn->set_charset("utf8");
Úgyhogy ezt akkor át kellene írnom
$conn->set_charset("utf8mb4");
-re, gondolom.Viszont ezt az egész utf8 collation-témát nem értem.
Ott jött fel a téma, hogy keresésnél szeretném, ha meg lennének különböztetve az ékezetes karakterek a nem ékezetesektől, tehát csak arra keressen, amit beírnak a keresőmezőbe, ne hagyja le az ékezeteket ("Máté" vs "Mate").
Aztán jött a tipp sztanozs fórumtárstól, hogy talán rossz collate van beállítva a mezőre. De minél többet olvastam utána, annál jobban elvesztem.
Kéznél van esetleg egy átlátható magyarázat elmentve valaki kisokosába, hogy hol és hogyan kell ezt használni, beállítani?
Eleve a táblákat is már ezek használatával kell létrehozni? (Ilyen találatokat is kaptam.)
Vagy csak simán a lekérdezésnél? (Ezt próbáltam is, phpMyAdmin konzolban szépen lefutott, a kódból hívva már nem.)
Nem baj, ha újra kell építenem az adatbázist, inkább most nullázom le, amíg még csak teszt fázisban van az egész. De jó stabil, megbízható alapot akarok építeni.Szívesen átnézek és megtanulok én minden ide tartozó dolgot, de egyszerűen annyi féle válasz volt már előttem, hogy teljesen elvesztem köztük, és félek, ez egy olyan téma, amit ha most nem rakok össze rendesen, később vissza fog ütni.
Köszönöm az eddigi segítséget is.
-
nevemfel
senior tag
Viszont ha már eleve
"
-tal kerül be, akkor"
-ot is ír ki a böngésző.Hát ne kerüljön bele eleve "-tal. htmlescapeelni akkor kell, amikor html-be ágyazod bele a tartalmat. Ha például logfile akarnád kiírni, már akkor sem így kell escapelni. Ha egy javasscipt változóba kerül bele a tartalom, vagy CSS-be, ott is másképp kell escapelni a tartalmat.
-
Mike
veterán
hm... kicsit belenéztem miket használok
sima POST-os mentésnél nem csinálok a szöveggel semmi ilyesmit
ugyanakkor ajaxnál, amikor objektumtömböt adok átAdatok.push({id:obj.id, ertek:obj.innerText});
majdJSON.stringify
és ezt így dolgozza fel a fogadó oldal$adat = json_decode(html_entity_decode(stripslashes($_POST['adat'])),true);
pár éve változott a POST, van amit duplán escape-pel.
és találtam egy ilyet is//html átalakítása javascriptnek
function HtmlSzovegForJS($str)
{
$str = trim(preg_replace('/\s\s+/', ' ', $str));
$str = htmlentities($str, ENT_COMPAT,'UTF-8', true);
return $str;
}
de fogalmam sincs mire használtam -
Taci
addikt
Fura, nagyon fura, de úgy látom, az volt pont a baja, hogy logoltam...
Át van irányítva a php error logja egy saját log fájlba, tehát a visszaadott eredményhez semmi köze, mégis, most hogy remark-oltam a logokat, hiba nélkül lefut...
És ezt amúgy már korábban is észrevettem több php szkriptnél is - viszont nem mindegyiknél... Fura.
A lényeg, hogy ez volt a baja, nem a lekérdezés vagy a változó átadásának módja. -
Taci
addikt
Azt látom, hogy a log fájl UTF-8 kódolásról indul, aztán amikor ezek a sorok belekerülnek, már ANSI-ra vált.
Átírtam mindkét sztringes részt arra, hogy
utf8_encode
-dal adja vissza az eredményét.Pl.:
$return_keywords = utf8_encode($return_keywords);
A visszaadott sztring még most sem jó
rendÅrség,pénzmosás,csalás,pest megye,bűncselekmény,eljárás,belföld
viszont a log fájl már UTF-8-as, és legalább a "belevésett" szöveget nem rontja már el.De hogy ezekkel a nem is tudom milyen karakteres sztringekkel mit lehet kezdeni...
ausztria,tirol,koronavÃrus,covid-19,teszt,külföld
Aztán kerestem, hogy mik lehetnek ezek a karakterek, és azt találtam, hogy pont hogy ezek az UTF-8-karakterek, így ezeket kell visszaalakítani. Így hát fogtam, és
utf8_decode
segítségével megnéztem, mire is megyek.Pl.:
$return_keywords = utf8_decode($return_keywords);
Amennyit javított (a sztringek már egy fokkal szebbek, de még mindig nem jók teljesen, pl. az "ő" betű helyett "?" van:
mindeközben,percr?l percre,világmindenség,univerzum
), annyit rontott is, mert a log fájl megint ANSI. Vagy már nem is tudom, mi-mi.
(kép -->kĂ©p
, töltve -->töltve
)Na ebben a karakterkészletes dologban most vagyok a teljes tanácstalanságnál.
-
nevemfel
senior tag
Nem tudom, mi ez a desktopwebszerver, de a honlapjuk nem valami bizalomgerjesztő. Sehol nem találom, hogy mégis milyen komponensekből áll, azt meg pláne nem, hogy melyik verzió. Én a helyedben XAMPP-ot használnék.
Ami a tartalomlehúzás problémát illeti, talán jobb lenne, ha curlt használnál, nem a php url wrapperjeit. Jobban paraméterezhető, és talán loggolni is egyszerűbb, ha elemezni kell a hálózati forgalmat.
-
nevemfel
senior tag
Több oka is lehet. Nem írtad, milyen webszervert használsz, az is elcseszheti. Ezen kívül a PHP 7.3.1 elég régi, a 7.3 vonalon a legfrissebb verzió a 7.3.27 . Amint láthatod, a 7.3.1 óta igen hosszú a javított bugok listája.
Aztán az sem mindegy, hogy állítod be az utf8 charsetet. A dokumentumba belerakott meta charset tagot ugyanis a webszerver vagy a php által kiküldött content-type ....; charset=.... felülbírálja.
-
-
Igen, célszerű az adatot JSONban leküldeni a kliensnek, és kliens oldalon React/Vue vagy valami hasonlóval generálni a HTMLt.
Szerencsére ahogy értelmezem ez nem egy örökölt projekt ahol van sokezer sor HTML generáló kód backenden.
De minden azon múlik hány különböző oldalt kell generálnod, és mennyire értesz ezekhez a frontend frameworkokhöz.
Ha csak egy oldalt kell generálni, és csak PHPhoz értesz, akkor lehet jobban jársz egy Twig/Blade megoldással mint ezért szenvedni egy frontend frameworkkel, habár nem túlságosan nehezek. -
-
coco2
őstag
amiben vannak PHP kódrészletek
Na ezt nem így.
A betöltött file az vagy tisztán html, vagy tisztán php class, ami legyártja a html stringet. Html-t betölteni, amiben vannak php részletek, az egy kicsit php3-as világ, és ideje lenne leszokni róla. Php 7+ idők vannak. Ha valami 10+ éves legacy project-et örököltél meg, akkor most jött el az ideje az újraírásnak, amit bizony megnyertél. Gratulálok
Ha tisztán html a lap (szerver oldali script értelemszerűen nem lehet benne), file_get_contents()-el behúzod, kódolod base64_encode()-al, és ott a text stringed, ami 7 bites kapcsolaton is háborítatlanul megérkezik.
Ha tisztán php kódod van, azzal rakod össze a stringet, és nem file_get_contents()-el húzod be, a többi ugyan az.
JS oldalon van atob().
-
Igen, erre az axiosra gondoltam.
Ha beledobsz még valami bundlert is a képletbe, mondjuk webpack, (de azt hiszem az helyett is van már valami más ajáblott) akkor még szebb lehet a kód. Then és catch helyett könnyebben kezelhető async/await is haszálható.Ajánlom figyelmedbe a JavaScript topikot, ott többet tudnak segíteni JS témában.
A w3wchools helyett inkább a Mozilla Developer Network és a php.net ajánlott.
-
-
pelyib
tag
Ahogy coco2 irja valtsal at JSON valaszra szerver oldalon. PHP ne generaljon HTML-t csak adja vissza a nyers adatot, JS meg ugy jeleniti meg ahogy akarja.
Eltelt ido kiirasahoz meg inkabb hasznalj egy JS lib-t, pl: https://momentjs.com/ "Relative Time" (tud magyarul is).
-
coco2
őstag
Xhr-el tipikusan nem html-t küldünk, hanem json-t. Van json_encode() kukucs rá php.net site-on. Csinálsz egy asszociatív tömböt php alatt, annak lehetnek mindenféle változói, azokba belerakod az értékeket. Akár egész weblapot is leküldhetsz. Azzal az a trükk, hogy fogod az egész weblap stringet, és base64 encode-olod. Máris nem kell vacakolni nyamvadt escape-eléssel. Hátulütőként hosszabb lesz a string, de ha nem bandwidth-heavy az alkalmazás, bőven elfér. Mellé mindenféle változót is bele rakhatsz a json-ba. Kliens oldalon szétpakolod az értékeket, kikódolod a base64-et, helyre rakod a html-t is. És minden happy.
-
Taci
addikt
Azt mondjátok meg, kérlek, hogyan lehet PHP-ből adatot átadni JS-nek?
Adott egy JS, amiben egy XMLHttpRequest-tel adatot küld a szervernek, és válaszként (this.responseText) megkapja a megjelenítendő HTML kódot.
Ugyanebben a PHP fájlban generálódik a tegnap tanácsolt módon a lekérdezett adat sorainak mennyisége is.
$number_of_query_items = $result_count->num_rows;
Ezzel az adattal kellene az említett JS-ben számolni, átadni a JS-ben szereplő változó értékének:var numberOfQueryItems;
Viszont nem tudom, hogyan kell átvinnem PHP-ből JS-be. Az XMLHttpRequest miatt átmegy sok adat, de nem tudom, hogy abból kellene-e valahogy kihalásznom ennek a változónak az értékét, vagy arra egy külön XMLHttpRequest-et indítani?
Nagyon nem találom a helyes választ rá, és ez megakasztott.
PHP-ben a változó, amit át kellene adni JS-nek:
$number_of_query_items = $result_count->num_rows;
JS-ben a PHP kóddal kommunikáló rész (leegyszerűsítve):
var numberOfQueryItems = 0;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
document.getElementById("output").innerHTML=this.responseText;
}
}
xmlhttp.open("GET","frontend.php?q=" + valtozo,true);
xmlhttp.send();
Ezen a kódon keresztül kellene? Vagy más módja van ennek?
Az kellene, hogy a PHP kódban szereplő
$number_of_query_items
értékét megkapja a JSvar numberOfQueryItems
változója.Hogyan tudom ezt elérni?
Köszönöm!
-
Taci
addikt
document.querySelectorAll
lesz valószínűleg a barátom.
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_document_queryselectorall_class -
Taci
addikt
Sikerült megoldani, köszönöm!
Viszont lesz még egy kérdésem ezzel kapcsolatban, de azt egy külön kommentben tenném majd fel, mert egy picit hosszabb.
Itt viszont még megkérdezném ezt:
Van több elem a lapon (0-tól végtelenig), és mindegyik bejegyzésnek van egy időpontja, amivel számolnom kell. Szeretném mindegyiknél pontosan kijelezni, hogy mennyi ideje lett bejegyezve. Ez a számolás már nagyon szépen megvan PHP-ben végig vezetve. Viszont fix időponttal számol, amikor betöltődik az oldal, azt veszi "most"-nak, azzal számol, azt jelzi ki.
Viszont szeretném az aktuális időhöz igazítani (elég a kliens ideje, nem kell time server).
Így arra gondoltam, hogy miután kijelzi az időpontot a PHP kóddal, utána simán csak futtatok egy JS szkriptet, és másodpercenként emelem az időpontot 1 mp-cel. És így úgy-ahogy meg is vagyok, az ebben lévő pontatlanság bőven megfelel a célnak. (De időközben rájöttem, hogy az egész formázós PHP kódot kell hogy futtassam külön újra és újra...)Találtam is egy egyszerű példát ehhez, amivel tudok dolgozni:
https://www.w3schools.com/js/tryit.asp?filename=tryjs_setinterval2Szépen is működik, csak előjött egyből az a gond, hogy csak az első elemnél csinálja meg ezt a frissítést (és a saját kódomban csak a következő 4 elem betöltése után indul el, első betöltésre nem - de ez majd kifilózom logokkal, hogy miért) , az összes többinél már nem.
Tehát ha a példakódban pl. még pár sorba beszúrom hogy<p id="demo"></p>
, akkor is csak az elsőnél történik meg a frissítés, ott fut le a szkript.
Pedig azt szeretném, hogy több helyen is lefusson, bárhol, bármikor.Rátaláltam az infóra, hogy HTML-ben az ID-knak egyedinek kell lenniük, így a fenti példakódnál csak az első "demo" ID-t használja, utána már nem valid. A getElementById így nem jó. Esetleg valami más getElementBy?
Hogyan tudom ezt megcsinálni, hogy az összes bejegyzésnél fusson a szkript, ugyanaz a szkript, de persze mindegyiknél a saját adatokkal?Köszönöm!
-
Küldd le a lekérdezés maximum számosságát (SELECT COUNT(id) FROM table ...) is a kliensnek, így az tudni fogja mikor ért a végére.
Vagy a kliens csak egy oldalszámot küldjön, és te kiszámolod a limitet és offsetet szerveroldalon, és még leküldöd azt is, hogy van e tovább.
Vagy egyszerűen csak küldj le egy üres tömböt, ha a végére ért, így tudni fogja, hogy ne kérjen többet.
Esetleg a stackoverflowon is nézz körül ötletekért infinite scroll és pagonation témában.
-
sztanozs
veterán
Belerakod, hogy honnan mennyit szedjen és ezt át is adod:
SQL query végére becsűröd, hogy:
LIMIT $offset, $len
és csaak annyit kérsz le és onnan, ahonnan kell, csak kell egy prepare persze még bele...Persze lehet menni session irányba, de a HTTP alaptézise, hogy minden lekérdezés független, tehát a szerver és kliens között nem szükségszerűen van "shared data".
-
pelyib
tag
Pagination, erre keress.
Legegyszerubb ha client kezeli hogy mit szeretne megmutatni. Tudod, hanyadik oldalt kered, ott a limit (hany elem kell) is, ezeket query parameter-ben (GET) elkuldod (altalaban limit es offset neven).
Server oldalon meg ertelemszeruen beilleszted oket a querybe. -
coco2
őstag
-
pelyib
tag
The Unix timestamp that this function returns does not contain information about time zones. In order to do calculations with date/time information, you should use the more capable DateTimeImmutable.
[Forras]Hasznald inkabb a DateTime classokat. Tisztabb szarazabb erzes. (esetleg a Carbon nevu libet)
[Pelda]miért megy félre a dolog, miért vonja le azt az 1 órát.
Ha minden igaz (bar en kuka vagyok az time manipulaciohoz) a PHP UTC / GMT idozonat hasznalja.
Új hozzászólás Aktív témák
Hirdetés
- Kerékpárosok, bringások ide!
- HiFi műszaki szemmel - sztereó hangrendszerek
- Path of Exile (ARPG)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Motorola Moto Tag - nyomom, követ
- VR topik
- Hobby elektronika
- Ez lehet a legnagyobb akkuval szerelt Snapdragon 8 Elite telefon
- Házimozi belépő szinten
- Mibe tegyem a megtakarításaimat?
- További aktív témák...
- MacBook felvásárlás!! Macbook, Macbook Air, Macbook Pro
- AZONNALI SZÁLLÍTÁSSAL Eladó Windows 8 / 8.1 Pro
- BESZÁMÍTÁS! ASUS B450 R7 2700X 16GB DDR4 512GB SSD RTX 2060 Super 8GB Zalman i3 FSP 600W
- Telefon felvásárlás!! Samsung Galaxy S24/Samsung Galaxy S24+/Samsung Galaxy S24 Ultra
- BESZÁMÍTÁS! MSI B450 R7 7 5700X 32GB DDR4 512GB SSD RTX 2080 8GB Fractal Design Define R5 FSP 750W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged