- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Samsung Galaxy Watch5 Pro - kerek, de nem tekerek
- Okosóra és okoskiegészítő topik
- Lesifotón és renderképen a Huawei Mate 70 Pro
- Fotók, videók mobillal
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Huami Amazfit Bip okosóra
- OnePlus 7T - távolról pont tökéletes
- Samsung Galaxy Z Fold4 - egyre megy, honnan nézed
- Motorola Edge 40 - jó bőr
Új hozzászólás Aktív témák
-
lanszelot
addikt
Hello,
Feldobtam az AMPPS -ot, de nem találom, hogy hol tudom át állítani a localhost könyvtárat.
Tudom, hogy alapból C:/Program Files/Ampps/www
de az nekem nem jó./D: re szeretném, saját könyvtárba/
Hol lehet át állítani? -
lanszelot
addikt
válasz nevemfel #20702 üzenetére
Xampp olyan biztonsági dologhoz kér hozzáférést, hogy hanyagoltam.
Ampps -ban nincs config file, ott böngészőben van minden mint egy router nél.
Akkor maradok a parancssornál.Más kérdés: van egy Array amiben file nevek vannak /123.jpg, 456.jpg/
Az index.php mellett van egy könyvtár, abban a képek, össze szeretném hasonlítani, a tömb ben lévő képek közül melyik van a könyvtárban is, csak azok maradjanak az Array ben amik a könyvtárban is vannak.
Ezt hogy tudom megcsinálni? -
Mike
veterán
sziasztok
adott egy html, amihez postban jönnek értékek, ezekkel kéne a feltölteni a html-t, mindeféle vagdosás és szövegek keresése helyett. gondoltam erre pont jó a Domdocument, csak még életemben nem használtam
a textarea már oké, azt szépen beteszi a nodeValue, de az input, select-et nem
illetve van 2 gomb amiről le kéne szedni a disabled-et$dom = new DOMDocument();
$dom->loadHTML($munka_html);
$xpath = new DOMXpath($dom);
$col = $xpath->query('//input|//textarea|//select');
if(is_object($col)){
foreach( $col as $node ) {
$name = $node->getAttribute('name');
$node->nodeValue = $be[$name];
}
}
$be az a post bejövő értékek
ez textareanál oké
de se a select, se a sima input nem megyilletve jó lenne tudni az input type értékét is, hogy az input buttonnak ne adjon értéket
illetve az input type="button" -nál szedje le a disabled attribútumot[ Szerkesztve ]
-
Mike
veterán
na megvan a select is
if($node->tagName == 'select') {
$options = $node->getElementsByTagName('option');
foreach($options as $tag) {
$tag->removeAttribute('selected');
$tag_value = $tag->getAttribute('value');
if($tag_value == $be[$name])
$tag->setAttribute('selected', true);
}
}
elnézést ha valakinek ebben semmilyen új információtartalom nem volt, de hátha lesz olyan akinek meg jól jön
[ Szerkesztve ]
-
Taci
addikt
bind_param, ezzel kapcsolatban kérdeznék.
Adott egy olyan lekérdezés, amiben van egy változó tartalmú rész, pl.:
WHERE id NOT IN (0), máskor NOT IN (0,1,2,3), vagy NOT IN (0,1,2,3,4,5,6,7,8,9) stb.Tehát a zárójelen belül lehet akár 1, akár 11 érték is, változó.
Ha simán csak stringként adom át, akkor nem működik. Pl.:
$id_list = "0,1,2,3,4,5,6,7,8,9";
$stmt = $mysqli->prepare("... WHERE id NOT IN (?)");
$stmt->bind_param('s', $id_list);
(Nincs előttem a kódom most, de kb. így lehet. Plusz azok az id-k belső kódból jönnek, így lehet, le sem kellene védenem őket, de talán jobb lenne biztonságban tudni.)
Itt látok pont most talán egy ide illő megoldást: ReflectionClass (sose láttam még).
https://www.php.net/manual/en/mysqli-stmt.bind-param.phpComing to the problem calling mysqli::bind_param() with a dynamic number of arguments via call_user_func_array() with PHP Version 5.3+, there's another workaround besides using an extra function to build the references for the array-elements.
You can use Reflection to call mysqli::bind_param(). When using PHP 5.3+ this saves you about 20-40% Speed compared to passing the array to your own reference-builder-function.
Example:
<?php$db = new mysqli("localhost","root","","tests");
$res = $db->prepare("INSERT INTO test SET foo=?,bar=?");
$refArr = array("si","hello",42);
$ref = new ReflectionClass('mysqli_stmt');
$method = $ref->getMethod("bind_param");
$method->invokeArgs($res,$refArr);
$res->execute();
?>Otthon utána olvasok majd (munkanap végén).
Van ezzel tapasztalatotok? Hogyan lehetne ezt megoldani?
-
Taci
addikt
Mármint hogy ne legyen paraméterezés? Vagy nem értem. Pont a paraméterezés lenne a lényeg, mert így ha valahogy az egyik érték helyére bejuttatnak egy kártékony kódrészletet, akkor bajban leszek. (a pár hozzászólással ezelőtt tárgyalt SQL injection-támadhatóság)
Azt látom itt problémának, hogy ugye mivel dinamikusan változik a változók száma, nem tudom ráhúzni a sémát, és simán beírni, hogy
$stmt = $mysqli->prepare("... WHERE id NOT IN (?,?,?)");
$stmt->bind_param('iii', 0,1,2);
(vagy változókkal, most mindegy, csak példa)És így ha valamelyik érték helyett bekerül egy "rossz kód", akkor általa támadva lehetek.
Ugye erre lenne védelem a paraméterezés, csak mivel változó, hogy mennyi elem van ennél a résznél átadva, nem tudom, hogyan lehet paraméterezni. -
Taci
addikt
$bindString = str_repeat('i', count($ids));
$stmt->bind_params($bindString, ...$ids);
Nem is tudtam/gondoltam, hogy a paraméter típusát jelölő karaktereket generálni is lehet...
Tehát ha mondjuk három elemű az id-kat tartalmazó tömböm, akkor generálok három i betűt ("iii") és kész?
Na amint a közelében leszek, megnézem, hogy tényleg ennyire egyszerű lenne-e...@Mike: Igen, átgondoltam, és azok kívülről érkeznek. Saját JS kódból, de akkor is kívülről. A kliensen generálódik, onnan jön - szóval abba bele lehet nyúlni.
@nevemfel: Igazából minden más tökéletesen működik vele, már csak ennyi hiányzik. Szóval ha nem muszáj, nem váltanék. Szóval ha csak a bonyolultsága miatt érné meg a PDO (és a linkelt cikkből így látom, és korábban más forrásból is néztem már a különbségeket), akkor ha már egyszer megírtam így, és jól is működik, nem bántom.
Köszönöm.
-
Taci
addikt
Kifutottam a szerkesztési időből. Nem bind_params, csak bind_param.
És ahogy látom a leírásában
bind_param(string $types, mixed &$var, mixed &...$vars)
a típusok ($types) valóban sztring típusú, szóval akkor generálhatom is kedvem (szükség) szerint.[ Szerkesztve ]
-
Taci
addikt
Ezt a ...-os részt nem nagyon értem. (vagy csak megerősítésre lenne szükségem)
Eredetileg így hívtam (példa):
$stmt->bind_param("i", $limit);
Most, hogy belekerül az id-s rész is, első próbálkozásra így hívnám (példa):
$stmt->bind_param("i" . $bindString, $limit, ...$idArray);
Ez így jó lehet?
Mert ha jól értem, úgy kellene működnie, hogy ha mondjuk a $bindString-ben van három id-hoz tartozó integer-jelölés ("iii"), akkor ez egyenértékű lenne ezzel:
$stmt->bind_param("iiii", $limit, ...$idArray);
Az első "i" menne a $limit változónak, a maradék háromhoz pedig elvileg a ...-tal "rendelné hozzá" az $idArray elemeit.
Szóval ha a $limit = 4, az $idArray = array(0,1,2);
akkor ezzel lenne egyenértékű:$stmt->bind_param("iiii", 4,0,1,2);
Jól látom? Helyes lehet a hívás?
$stmt->bind_param("i" . $bindString, $limit, ...$idArray);
Ha nem, kérlek, javítsatok ki.Köszönöm.
-
Taci
addikt
7.3-as PHP-n vagyok (tesztgép).
Így viszont:
PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS)
(Elvileg 7.4-től működik csak a ... operátor.)Hogyan tudnám ezt helyettesíteni 7.3-ason?
Illetve hát nem értem. Itt azt írja, hogy ez az operátor már 5.6-os verzió óta működik.
-
Taci
addikt
-
Taci
addikt
Működik szépen.
Arra kellett figyelni, hogy ha lett volna más paraméter is az id-k után, akkor a "..." operátor használata után azokat már (valamiért) nem engedte felsorolni (Cannot use positional argument after argument unpacking). Így azt úgy oldottam meg, hogy az elején csináltam egy tömböt, azt szépen sorban feltöltöttem minden változóval (push) és tömbbel (array_merge), amit paraméterként át akarok adni, és így a bind_param() funkcióban már csak ezt az új tömböt kellett átadnom.
Hátha ez később segít majd valakinek. -
biker
nagyúr
Hali, hogy oldanátok meg, hogy "akárhonnan" ne lehessen form post-ot küldeni egy formot feldolgozó oldalra?
Hiába van recaptcha, nem a formot küldik el, hanem a html forrásból lemásolt formot kitöltve random adatokkal bombázzák a feldolgozó motort, ehhez ugye minden megvan a html-ben, nem nagy meló feldolgozni, lemásolni, és beküldeni az adatokat.
valahogy biztosra ellenőrizni, hogy a beküldött form a megbízható forrásból jön.
ehhez elég a referer ellenőrzés, vagy van valami kitalált megoldás?Elektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
pelyib
tag
-
biker
nagyúr
válasz nevemfel #20726 üzenetére
na most kérek igazán tanácsot..
felraktam a token generálást + ellenőrzést, és közben a naplót kiegészítettem azzal, hogy mentsen minden generált tokent és reg kisérletet
ugye ezzel elvileg csak úgy tudnák elküldeni a formot, ha a honlapon töltik ki és létrejön a token amit elment a sessionbe. ezután elküldi a formot
Azonban
1: a formot recaptcha védi, ki kell pipálni nem vagyok robot
2: van egy readonly mező amibe az új tag vonalkód generálódik, ezt is átírják, vagyis elég kizárt hogy az oldalon küldik a formot
Most akkor hogy tud elküldeni egy formot, amin van recaptcha és hogy tud közben átírni readonly mezőt, és hogy aktiválja az összes mező kitöltésig js-el disabled-re tett küldés gombot? hiszen van ugye bevitel ellenőrzés, kötelező mezők ki vannak-e töltve stbElektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
nevemfel
senior tag
Most akkor hogy tud elküldeni egy formot,
Bárki bárhonnan küldhet egy requestet a form feldolgozó oldalára. Megformáz egy ilyet, belerakja a paramétereket, és elküldi:
POST /post.php HTTP/1.1
Host: example.com
subject=subject&content=content
Ezek a védelmek nem arra szolgálnak, hogy ne lehessen post requestet küldeni, hanem hogy a requestet idejekorán kukázni lehessen, mert nincs captcha, nincs token, invalid a tokenérték, stb.
Rally against apathy draws small crowd
-
Mike
veterán
ha a formot töltik htmlből akkor tehetsz bele hidden mezőt, ha kellően egyszerű a script, kitölti azt is
vagy bekersz vmilyen azonosító adatot emailt, telefonszámot doble opt in -nel, amihez a kódot a backend adja, amit tarolsz, és postnál visszaellenőrzöd
[ Szerkesztve ]
-
biker
nagyúr
válasz nevemfel #20730 üzenetére
"Bárki bárhonnan küldhet egy requestet a form feldolgozó oldalára. "
Hát ha bárhonnan küld, akkor nem lesz érvényes sessionID-je ami akkor generálódik amikor a login formot megnyitja, és ekkor tárolom le a tokent amit elküldök postba, és ha a session és post token nem egyezik akkor nem jó.
Ez akkor lehet sikeres, ha a loginformot megnyitja és elküldi, de ő beleír readonly mezőbe is és el tudja küldeni a foromot invalid esetén...----
Most annyit tettem rá, hogy nem js-el ellenőrzöm a captchat, hanem elküldés után a fogadó php-ben így kikerülve azt, amire még gondolok, js-t letiltják, és akkor nem fut le a validálás és el tudja küldeni a formot.
Így ha fogadáskor nincs captcha válasz, és az nem succes, akkor nem mentem le.
Elektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
Prog-Szerv
csendes tag
Sziasztok!
Van egy dinamikus update scriptem. hogyan tudnám azt megoldani, hogy olyan NULL értékeket is meg tudjak vele etetni, amit egy mysql adatbázis NULL-nak rögzít be. Íme a kódrészlet: ez az egész egy metóduson belül van ahol a $table és a $condition változókat átadom neki értelem szerűen.
$cols = array();
foreach($data as $key=>$val) {
$cols[] = "$key = '$val'";
}
$query = "UPDATE $table SET " . implode(', ', $cols) . " WHERE $condition";
-
Mike
veterán
válasz Prog-Szerv #20734 üzenetére
ha az akarod hogy null legyen, null-t kell írni, vagy nem sorolod fel a mezőt
if(empty($val)) $val = null;
[ Szerkesztve ]
-
Prog-Szerv
csendes tag
Igen, ez majdnem jó, csak ebben az esetben nem NULL szerepel az adatbázis táblájában miután lefut az update hanem üres mező (empty) Majdnem jó, de az lenne a legjobb ha adatbázis szerinti NULL értékem lenne. Abban az esetben ha nem sorolom fel a mezőt, pl unset-tel kiszedem akkor is ugyan ez a helyzet... Erről már olvastam korábban hogy a PHP null és az SQL NULL nem ugyan az, és hogy a php null-t az SQL emptynek veszi. Úgy tudom az SQL NULL-t így lehetne neki megadni pl: SET valami=NULL <-aposztrófok nélkül, viszont a kód dinamikussága miatt abban az esetben ha valós adatom van kell az aposztróf....ezt leszámítva ez a dinamikus kód eddig nagyon jól bevált.
-
lanszelot
addikt
Hello,
Van egy login.php , ami mellett van egy login.css.
Ugyanitt van egy zoom könyvtár, amiben van a zoom.php
A zoom.php -nek nem kellene elindulnia ha nincs bejelentkezve vki.
Ekkor a login.php -ra ugrik.
Meg is nyitja a login.php -t, de a login.php nem éri el a login.css -t, mert a zoom könyvtárban keresi.
Ha simán a login.php -t indítom, akkor megnyitja a login.css -t is.
Csak ha köntvtárból hivatkozik rá vmelyik oldal akkor nem találja a css-t.
Hogy adjam meg a login.php -ban a login.css elérését, hogy, ha könyvtárból utalok rá akkor is tudja hol van?
-
Mike
veterán
válasz Prog-Szerv #20737 üzenetére
az adatbázisban engedd hogy null lehessen a mező
akkor írd idézőjelbe a nullt ha stringet adsz át
ha bindelet
SET
mezo = :ertek
akkor megeszi a php nullt is[ Szerkesztve ]
-
Mike
veterán
válasz Prog-Szerv #20737 üzenetére
igen, a nullhoz nem kell idézőjel, aposztrof
-
lanszelot
addikt
Elérni mind a kettő eléri, csak más könyvtárban vannak.
De egyik se root -ban van.
Root-ba tenni se tudom, és nem is akarom.
Ez az egész project egy könyvtárban van.
Azon belül is vannak könyvtárak /pl a zoom/
login.php a project alap könyvtárában van, ott van a css is
login.php -ban így hivatkozok rá:<link rel="stylesheet" href="login.css">
mivel mellette van
zoom.php a loginra így hivatkozik:require __DIR__ . '/../login.php';
mivel az egy könyvtárral beljebb vanDe a require sem működik, ha csak beírom a zoom.php-t nem kéri a jelszót, beenged.
Ha kiveszem a könyvtárból, és a login.php mellé rakomrequire __DIR__ . '/login.php';
így viszont jól működik
Tehát valami a elérési linkkel lesz rossz. De mi?project/login.php
project/login.css
project/zoom/zoom.php[ Szerkesztve ]
-
pelyib
tag
válasz lanszelot #20742 üzenetére
Ezt nezd at: [HTML File Paths]
Amugy altalaban a static fajlokat egy kulon mappaba rakjak (pl: project-root/web/static, feltelezve, h a web folderben vannak a publikusan elerheto fajlok). -
lanszelot
addikt
válasz pelyib #20743 üzenetére
Ott van a hozzászólásban, hogy hogy van az elérési út.
Pont azért dobtam be, hogy ha nem jó lenne.
Minden mappa publikus.Amúgy php alatt nem úgy van mint amit linkeltél, mert
./jpg.jpg és a ../jpg.jpg teljesen máshova visz és a ./ -t nem is említi, mivel a link az html[ Szerkesztve ]
-
pelyib
tag
válasz lanszelot #20744 üzenetére
Ennek semmi koze a PHP-hez, generalsz egy HTML-t amiben a href="login.css" es meg mivel mindig a /zoom/zoom.php-ben vagy igy a browser a zoom/login.css-ben fogja keresni (=> "The "picture.jpg" file is located in the same folder as the current page" a linkelt oldalrol).
Ami neked kell az a relative path.
-
Prog-Szerv
csendes tag
"az adatbázisban engedd hogy null lehessen a mező"
Igen ezzel kezdtem. Le is teszteltem, ha beinsertelek valamit akkor null az érték.
"SET
mezo = :ertek
akkor megeszi a php nullt is"
Igen, csak ezt nem tudom, hogy pontosan hogyan csináljam...mindenképpen meg akarom tartani a jelenlegi dinamikáját a dolognak. -
pelyib
tag
-
lanszelot
addikt
válasz pelyib #20748 üzenetére
A főoldalon kilépek, minden vele egy könyvtárban lévő oldalra be kell lépni, de ha másik könyvtárba van ott nem kér belépést /pedig ott a require be is írtam hogyan/
és belépés nélkül tudom használni, de csak ami alkönyvtárban van azt /pl zoom.php/
Ha kiteszem a könyvtárból,. akkor kér belépést, és a login.css is betöltődik.A képen a 404 az az hogy máshol keresi a login.css-t pedig beírtam hogy van az elérése, és a köntvtárak is ott vannak felsorolva.
Tehát egy zoom könyvtárban lévő zoom.php ból require megy egy könyvtárral kijjebb a login.php -re.
Amit a zoom.php el is ér, de a login.css-t miért a zoom köntvtárban keresi?
Mikor a login.css -re a login.php -ban van hivatkozva ami mellette van.
Miért lép vissza a zoom könyvtárba keresni?Illetve a könyvtárakban lévő php fileokban hiába ott a requirek, ami he nam futna le akkor el kellene szállnia, mert nem include, de ennek ellenére tovább megy, de ha pedig lefut, akkor miért nem indítja a login.php -t?
Minden file-ra igaz lesz ezek, ha könyvtárba rakom, és minden file jól működik, mihelyt kirakom a login.php mellé.
Tudom nagyon zavaros, de ezt csinálja, és ezért állok itt, hogy mi a szösz...
-
pelyib
tag
válasz lanszelot #20749 üzenetére
Tehát egy zoom könyvtárban lévő zoom.php ból require megy egy könyvtárral kijjebb a login.php -re.
Amit a zoom.php el is ér, de a login.css-t miért a zoom köntvtárban keresi?
Mikor a login.css -re a login.php -ban van hivatkozva ami mellette van.
Szerintem egy kicsit osszemosod a server es kliens oldali dolgokat. Te meg mindig a /zoom folderben vagy, igy a href="valami.jpg" az a /zoom folderre fog mutatni, de ez nem a PHP hibaja, igy mokodik a HTML. Ahogy linkeltem is, realtive path.Az a baj, h nem tudjuk, h a login.php mit csinal. Van e benne die / exit ami megallitja a futast? Definial function-t a login.php, meg kell hivni? Tippelek, de gondolom van egy session, annak a cookie path-a rendben van?
Felteszem, ha egy subfolderbol huzod be a login.php-t akkor egy olyan ag fut le ami ugy latja, h be vagy lepve. De igy latatlanban egymillio oka lehet. Happy debugging Nezd meg, h pontosan mi kell ahhoz, h feldobd a login-t, majd azt egyesevel debuggold.
Új hozzászólás Aktív témák
- Kerékpárosok, bringások ide!
- Autós topik
- Elektromos (hálózati és akkus) kéziszerszámok, tapasztalatok/vásárlás
- Milyen monitort vegyek?
- Chiptörvénnyel készül Trump elnökségére Dél-Korea
- OLED TV topic
- PlayStation 4
- Önfenntartásra rendezkedik be a kínai chipszektor
- Otthoni hálózat és internet megosztás
- Tőzsde és gazdaság
- További aktív témák...
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest