Új hozzászólás Aktív témák
-
Doink
aktív tag
Átadod az osztály valamelyik metódusának ahol használnád vagy simán a konstruktornak:
class Etel {
private $mennyiseg = 0;
private $ar = 0;
public function __construct($nettoPrice, $quantity) {
$this->ar = $nettoPrice;
$this->mennyiseg = $quantity;
}
public function bruttoAr($afa = 1.27) {
return $this->ar * $this->mennyiseg * 1.27;
}
public function setMennyiseg($quantity) {
return $this->mennyiseg = $quantity;
}
}
// másik file-ban
require_once("etel.php");
$mennyiseg = 3;
$etel = new Etel(1599, $mennyiseg);
echo $etel->bruttoAr();
echo $etel->bruttoAr(1.25);
$etel->setMennyiseg($mennyiseg * 100);
echo $etel->bruttoAr(); -
Doink
aktív tag
válasz
kezdosql #19686 üzenetére
Az url-ben található változókat dobja be oda a php, könyvet azért ne írj róla mert így ennyi.
pl:
prohardver.hu/muvelet/hsz/uj.php?thrid=552418&rtoid=19686&url=%2Ftema%2Fphp_kerdesek_2%2Ffriss.html
<?php
$_GET['thrid'] // = 552418
$_GET['rtoid'] // = 19686
$_GET['url'] // = urldecode("%2Ftema%2Fphp_kerdesek_2%2Ffriss.html")
//......
?> -
Doink
aktív tag
válasz
kezdosql #19683 üzenetére
Úgy hogy GET-ben küldöd, és akkor php-ban alapból ki lesznek töltve az értékek ha kimásolod az url-t a submit után. Viszont GET-ben ne küldj semmi szenzitívet.
Szóval itt egy durva kód ami lehet le se fordul de szerintem érezhető:
<form action="filter" method="get">
<input type="number" name="id" value="<?=$_GET['id']?>">
<input type="submit">
</form>
<ul>
<?php for($resultList as $item) { ?>
<li>
<a href="/filter?id=<?=$_GET['id']&megValami=<?=$item.valami?>"><?=$item.name?></a>
<li>
<?php } ?>
</ul> -
Doink
aktív tag
-
Doink
aktív tag
válasz
Nagyzoli27 #19649 üzenetére
Ha nem spa: curl-el letöltöd az oldalt, felparseolod a htmlt és curl-el letöltöd a képeket.
Ha spa: headless browsert indítasz és azzal tölteted le. -
Doink
aktív tag
-
Doink
aktív tag
válasz
bandi0000 #19608 üzenetére
Vagy mindenhol validálsz vagy csak szerveren.
Ha csak szerveren akkor visszakapsz egy JSON-t az errorokkal és azt értelem szerűen angularral rábindolod a megfelelő mezőkre.
Ha mind2 oldalon akkor addig nem küldesz semmit amíg böngészőből el tudod dönteni valamiről hogy valid, de ettől függetlenül szerver oldalon mindig validálunk hiszen a böngészővel a user azt csinál amit akar.A kliens és a szerver között megváltozik az adat:
- Ha arra gondolsz hogy valami csomag elkúródik akkor ezzel nincs dolgod, tcp/ip megoldja
- Ha arra gondolsz hogy felviszel egy új admin usert de valaki már felvitt egyet amíg te töltötted ki a formot akkor a szerveroldali validálás meg fogja oldalni.
- Ha arra gondolsz hogy egyszerre többen szerkesztik ugyan annak a usernek a formját akkor azt úgy tudod megoldani hogy beteszel egy timestampet vagy random karaktersort minden editálásnál és leküldöd a kliensnek, ha nem ugyan azt küldi vissza mint ami a db-ben van akkor valaki már megváltoztatta amíg ő szerkesztette az adatot
- Ha arra gondolsz hogy egy táblázatot/bármilyen kiírást hogyan lehet frissíteni real time ahogy a szerveren változik akkor WebSocket -
Doink
aktív tag
válasz
radi8tor #19470 üzenetére
Csak egy példát írtam amiből megérted és ki tudod próbálni és aszerint tudod alakítani a kódot, de ezek szerint nem volt érthető.
Ha úgy csinálod ahogy @supercow írta:
<script>
(function ($) {
$(document).ready(function () {
$('.review-link a').click(function (e) {
e.preventDefault();
$('.product_tabs a[href="#tab-review"').tab('show');
});
$('.review-link-show').click(function () {
$('html, body').animate({
'scrollTop': $('.product_tabs').offset().top - ($('#stuck').outerHeight() + 50)
}, 1000);
});
$('.review-link-write').click(function () {
$('html, body').animate({
'scrollTop': $('#reviews_form_title').offset().top - ($('#stuck').outerHeight() + 50)
}, 1000);
$('#reviews_form_title').addClass('close-tab').parents('#tab-review').find('#reviews_form').slideDown();
});
$('.product_tabs li:first-child a').tab('show');
$('#reviews_form_title').addClass('close-tab');
$('#reviews_form_title').on("click", function () {
if ($(this).hasClass('close-tab')) {
$(this).removeClass('close').parents('#tab-review').find('#reviews_form').slideToggle();
}
else {
$(this).addClass('close-tab').parents('#tab-review').find('#reviews_form').slideToggle();
}
});
if (location.hash === "#review-link-write") {
$('.review-link-write').trigger('click');
}
});
})(jQuery);
</script>Ha úgy csinálod ahogy én írtam:
<script>
(function ($) {
function reviewLinkWrite() {
$('html, body').animate({
'scrollTop': $('#reviews_form_title').offset().top - ($('#stuck').outerHeight() + 50)
}, 1000);
$('#reviews_form_title').addClass('close-tab').parents('#tab-review').find('#reviews_form').slideDown();
}
$(document).ready(function () {
$('.review-link a').click(function (e) {
e.preventDefault();
$('.product_tabs a[href="#tab-review"').tab('show');
});
$('.review-link-show').click(function () {
$('html, body').animate({
'scrollTop': $('.product_tabs').offset().top - ($('#stuck').outerHeight() + 50)
}, 1000);
});
$('.review-link-write').click(function () {
reviewLinkWrite();
});
$('.product_tabs li:first-child a').tab('show');
$('#reviews_form_title').addClass('close-tab');
$('#reviews_form_title').on("click", function () {
if ($(this).hasClass('close-tab')) {
$(this).removeClass('close').parents('#tab-review').find('#reviews_form').slideToggle();
}
else {
$(this).addClass('close-tab').parents('#tab-review').find('#reviews_form').slideToggle();
}
});
if (location.hash === "#review-link-write") {
reviewLinkWrite();
}
});
})(jQuery);
</script> -
Doink
aktív tag
válasz
radi8tor #19465 üzenetére
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Title of the document</title>
</head>
<body>
<button class="review-link-write">Csak egy gomb</button>
<a href="#review-link-write" target="_blank">Emailből link</a>
</body>
<script>
function reviewLinkWrite() {
alert("reviewLinkWrite");
}
$(document).ready(() => {
if (location.hash === "#review-link-write") {
reviewLinkWrite();
}
$('.review-link-write').click(() => {
reviewLinkWrite();
});
});
</script>
</html> -
Doink
aktív tag
-
Doink
aktív tag
-
Doink
aktív tag
Ez egy html editor, nem képszerkesztő.
Kérdésedre a válasz úgy nagyon durván, általában van egy canvas amibe betöltöd a képet és ott a böngészőben hegesztgeted a képet szervertől függetlenül (rajzolsz rá, átméretezed, forgatod stb). A betöltött képek jöhetnek a user gépéről vagy a szeverről is ha mondjuk akarsz neki pár példa képet adni. Szerverhez max akkor nyúlsz ha el szeretnéd menteni a végső képet a szerverre vagy valami példa képet szeretnéla usernek adni. Ha multiplayer rajzolóprogramot akarsz (Béla látja ahogy Árpi rajzol) akkor a valós idejű frissítést websockettel szokták megoldani.Szóval ahhoz hogy
- manipuláld egy canvas tartalmát (rajzolsz rá, átméretezed, forgatod stb)
- saját gépre letöltsd az eredményt
- saját gépről feltölts egy képet a canvasra
ahhoz nem kell http request. -
Doink
aktív tag
válasz
spiritex #19341 üzenetére
Ezzel csak 2 probléma van. Így kétszer is bekerülhet egy idézet, a másik, hogy nem fognak szeretni ha késleltetés nélkül egy while ciklusban pörgeted az oldalt. Az oldalt le tudod tölteni curl-al vagy file_get_contents-el, azt fel tudod parse-olni xpath-al (hogy könnyen tudj benne keresni) de írhatsz rá regexpet is.
-
Doink
aktív tag
válasz
radi8tor #19333 üzenetére
<div class="tab-pane product-spec product-section" id="tab-specification">
{% for attribute_group in attribute_groups %}
<table class="table table-bordered">
<thead>
<tr>
<th><strong>{{attribute_group['name']}}</strong></th>
</tr>
</thead>
<tbody>
{% for attribute in attribute_group['attribute'] %}
<tr>
<td>
<span>{{attribute['name'] ~ ':'}}</span><span>{{attribute['text']}}</span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</div> -
Doink
aktív tag
válasz
Fundiego #19286 üzenetére
A kérdésedre a válasz:
<?php
$row = [];
$row['telj'] = 'asd';
$row['fogl'] = 'ert';
echo "<table>
<tr>
<td>Teljes név</td>
<td>${row['telj']}</td>
</tr>
<tr>
<td>Foglalkozás</td>
<td>${row['fogl']}</td>
</tr>
</table>";Ahogy én csinálnám:
<?php
$row = [];
$row['telj'] = 'asd';
$row['fogl'] = 'ert';
?>
<table>
<tr>
<td>Teljes név</td>
<td><?= $row['telj'] ?></td>
</tr>
<tr>
<td>Foglalkozás</td>
<td><?= $row['telj'] ?></td>
</tr>
</table>Azért így csinálnám mert így a html-t is kiemeli az IDE. A <?= php 5.4 után default működik.
-
Doink
aktív tag
Iteratív megoldás:
<?php
$diakokSzama = $ajtokSzama = 50;
$ajtok = array_fill(1, $ajtokSzama, false); // false: zart, true: nyitott
for($d=1; $d<=$diakokSzama; $d++) { // minden diák
echo "<br>${d}. diák ezeket érintette: ";
for($a=$d; $a<=$ajtokSzama; $a=$a+$d) { // diák ajtói
echo $a . ",";
$ajtok[$a] = !$ajtok[$a]; // kinyitja/becsukja az ajtót (negálás)
}
}
echo "<br><br>";
echo array_sum($ajtok) . " ajto marad nyitva"; // azért működik mert átkasztolja a true-t 1-re, false-t 0-raRekurzív megoldás:
<?php
$diakokSzama = $ajtokSzama = 50;
$ajtok = array_fill(1, $diakokSzama, false); // false: zart, true: nyitott
function diakLepes($d, $a){ // $d: diák, $a: ajtó
global $ajtokSzama, $ajtok;
if ($a <= $ajtokSzama) { // csak akkor ha a kapott ajtószám érvényes
echo $a . ",";
$ajtok[$a] = !$ajtok[$a]; // kinyitja/becsukja az ajtót (negálás)
diakLepes($d, $d+$a); // rekurzívan meghívjuk ugyanezt a diák következő szekrényére
}
}
for($d=1; $d<=$diakokSzama; $d++) { // minden diák
echo "<br>${d}. diák ezeket érintette: ";
diakLepes($d, $d);
}
echo "<br><br>";
echo array_sum($ajtok) . " ajto marad nyitva"; // azért működik mert átkasztolja a true-t 1-re, false-t 0-ra -
Doink
aktív tag
válasz
sketchifun #19261 üzenetére
Webalkalmazást lehet rengeteg másik prog nyelvben is készíteni (java,scala,javascript,ruby, c#....) és azokra is van sok keretrendszer. Azt kell választani ami a vállalkozás-nak megéri. A probléma ezzel csak az, hogy ez egy elég komplex kérdés amire a cégen belül kell válaszokat találni.
Abban viszont biztos vagyok, hogy ügyviteli rendszert plain php-val egyedül építeni sehogy sem éri meg, hiszen az időd nagy része arra fog elmenni, hogy olyan problémákat oldasz meg amit a framework megoldana helyetted, ráadásul azt a megoldást több(száz) (szak)ember ellenőrizte.
-
Doink
aktív tag
válasz
sketchifun #19259 üzenetére
Framework-öt általában úgy választunk ami passzol a problémához és annak a nagyságához. Ha csak tanulni akarsz akkor nyugodtan játszhatsz a laravel-el, elég népszerű, a doksija nagyon korrekt és tele van példakóddal, szóval tutorial nagyon nem kell de a youtube tele van azzal is. Ha a php és az OOP alapjaival tisztában vagy akkor nyugodtan nekiugorhatsz, sok felesleges kört meg fog oldani helyetted és ad egy iránymutatást hogy minek hova kell kerülnie.
-
Doink
aktív tag
válasz
sketchifun #19257 üzenetére
<?php
require __DIR__."/system.php"; //ha ahhoz a fájlhoz képest keresed amibe ezt a sort beleírtad
//require "./system.php"; //ha working dir-hez képest keresed
?>Egyébként feleslegesen bonyolítod a kódot már most, a require/include egy copy paste-et csinál.
index.php
<!DOCTYPE html>
<html>
<head>
<title>Fejlec</title>
</head>
<body>
<?php require './menu.php' ?>
<?php require './tartalom.php' ?>
<?php require './lablec.php' ?>
</body>
</html>menu.php
<div class="menu">
<ul>
<li><a href="#">Menu 1</a></li>
<li><a href="#">Menu 2</a></li>
<?php if(isset($_SESSION['user'])) { ?>
<li><a href="#">Logout</a></li>
<?php } else { ?>
<li><a href="#">Login</a></li>
<?php } ?>
</ul>
</div>Apró megjegyzés, hogy ha szeretnél bejelentkezést kis adatbázist akkor érdemesebb valami keretrendszert használni pl: Slim-mvc, Lumen, kicsit nagyobbhoz Laravel.
-
Doink
aktív tag
válasz
PowerBuldog #19255 üzenetére
Ja kicsit kell rajta faragnod mert a $response nálam egy string, aminek a megfelelője nálad a $result->GetCikkekAuthResult->any. Ettől függetlenül először nézd meg hogy a $result->GetCikkekAuthResult milyen formában adja vissza az eredményt és ha az valamilyen struktúrált adatszerkezetben akkor még parse-olnod sem kell hanem egyől mehetsz végig azon.
-
Doink
aktív tag
válasz
PowerBuldog #19253 üzenetére
Be kell tölteni az xml-t és átírni az értékeket. [példa]
-
Doink
aktív tag
válasz
spiritex #19197 üzenetére
Mivel kliens oldalon a felhasználó azt csinál amit szeretne, amit érts úgy, hogy úgy módosítja a szervertől kapott kapott html-t és javascriptet ahogy szeretné ezért szerver oldalon mindig kellene ellenőrizni.
3 életszerű példa:
- A postás is átnézni (szerver oldal) hogy helyesen töltötted ki a formanyomtatványt annak ellenére hogy te már otthon (kliens oldalon) átnézted. A módosított html-t meg elképzelheted úgy hogy bár volt egy * a Címzett mező mellett hogy kötelező kitölteni de te leleményes voltál és hibajavítóval eltüntetted amitől még a postás nem fogja elfogadni neked. Ha nem ellenőrzöl szerver oldalon az olyan mintha a postás rá se nézne a papírodra.
- reklámblokkoló pluginek, mondjuk ők képeket és js-ek betöltését szokták eltüntetni de jön a gyanú, hogy akkor egy required attribútumot is ki tudnának törölni ha akarnak.
- Írd be a required-öt ahogy javasolták, töltsd be az oldalt F12 => forrás és ott keresd meg azt a beviteli mezőt és töröld ki a required attribútumot.Akkor mire jó (a kliens oldali validálás)?
- Ha nem szeretnéd hogy állandóan a szerverhez forduljon a böngésző ha hibás adatot ad meg a user akkor nagyon jól jön az hogy a böngésző előtte leellenőrzi azt amit letud és csak akkor küldi el az adatokat a szervernek ha azok stimmelnek (aki ugyan úgy le fogja ellenőrizni).
Postásra lefordítva annyi plusszt hoz hogy nem csak felhányod az adatokat a papírra és addig javítgatod eszetlenül amíg el nem fogadja hanem átnézed/átnézetteted a böngészővel mielőtt odaadnád neki.
- Másik példa ha az adatot soha sem fogod elküldeni a szervernek hanem csak a böngészőben használod.3 életszerű példa kliens oldalra:
- Twitter, 140 betű limit. Teljesen felesleges addig a szervernek bármit is küldeni a Tweet gomb nyomására amíg 0 vagy több mint 140 a tweeted hossza. (spórol a szerver és hálózati erőforrásokkal).
- Bejelentkezés, amíg a felhasználónév vagy a jelszó nincs kitöltve addig felesleges bármit is küldeni a szervernek.
- Localstorage-ben (böngészőben) tárolod hogy a user melyik témát használja és szerver oldalon ezt szimplán azért nem tárolod mert nem érdekel.Összefoglalva:
- A klienstől érkező adatokat szerver oldalon mindig validáljuk.
- Kliens oldalon nem mindig, sokszor csak a szerverrel küldjük vissza a hibákat. -
Doink
aktív tag
válasz
tacsko833 #19141 üzenetére
A $$tarolo ugyan az mintha azt írnád hogy $felhasznalo HA $tarolo = 'felhasznalo'.
Becsületesen kiírva ez történik:
${$tarolo} => ${'felhasznalo'} => $felhasznaloSzóval ha az van írva a kódba hogy $$tarolo = "Anna" akkor valójában $felhasznalo = "Anna" hajtódik végre
HA a $tarolo értéke 'felhasznalo'.Dinamikus változóneveknek érdemes elkerülni mert átláthatatlan kódot eredményez és nehéz példát mondani arra amikor értelme van normális adatszerkezetek használata helyett.
-
Doink
aktív tag
válasz
trisztan94 #19135 üzenetére
A CONCURRENT kulcsszó miatt tudsz SELECT-eket futtatni a lefutás közben mert a tábla ilyenkor nem lockolódik. Vagyis amikor te futtatod a selectedet akkor ő még javában dolgozik a lekérdezéseden.
-
Doink
aktív tag
válasz
trisztan94 #19130 üzenetére
<?php
$data = [
['total_rows' => 1, 'edition' => 2],
['total_rows' => 98, 'edition' => 2],
['total_rows' => 67, 'edition' => 7]
];
foreach ($data as $key => $row) {
$total[$key] = $row['total_rows'];
}
array_multisort($total, SORT_DESC, $data);
var_dump($data);
?>Ha a számaid stingként vannak tárolva (macskakörmöt látok a példádban) akkor:
array_multisort($total, SORT_DESC, SORT_NUMERIC, $data); -
Doink
aktív tag
válasz
trisztan94 #19099 üzenetére
A ->get() egy collectiont ad vissza hiszen az összes projektet kikeresi aminek ez az id-je.
Használd helyette a ->first() metódust. -
Doink
aktív tag
Új hozzászólás Aktív témák
Hirdetés
- AKCIÓ! ASROCK H310CM i5 9600K 32GB DDR4 500GB SSD RTX 3050 8GB DeepCool Tesseract SW 500W
- BESZÁMÍTÁS! 32GB (2x16) G.Skill Trident Z RGB 6600MHz DDR5 memória garanciával hibátlan működéssel
- Realme 8i 64GB / Normál állapotban / 12 hónap jótállással
- ÁRGARANCIA! Épített KomPhone i5 10600KF 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Samsung Galaxy Xcover 5 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged