- AMD Navi Radeon™ RX 9xxx sorozat
- 80% vs. 100% – Tönkreteszed az aksit, ha mindig feltöltöd? – Tech Percek #6
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen alaplapot vegyek?
- Asztrofotózás
- Egérpad topik
- Azonnali alaplapos kérdések órája
- Milyen TV-t vegyek?
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Androidos fejegységek
Új hozzászólás Aktív témák
-
bendikeee11
tag
Sziasztok, egy olyan problémám akadt, hogy bármit írok php-be, egyszerűen commentnek jelzi. Az lenne a kérdésem hogy mitől lehet ez és hogyan lehet megoldani. wamp szervert használok.
üdv.
-
Peter Kiss
őstag
válasz
trisztan94 #15298 üzenetére
Itt minden építő jellegű.
A gond azzal van, hogy minimális megoldási szándék nélkül ment a kérdés. Alapdolgokat felejtettél el megnézni, megcsinálni, ha tegnap volt a határidő, ha nem, a probléma megoldása nem vett volna igénybe perceknél több időt.
Mellesleg az furcsa (ezt már mondtam egyszer), hogy vállalkozol weboldalkészítésre, meg tutorial-t hegesztesz, de alap dolgokkal is gondjaid vannak (base64_encode() mint hash, nem megy a fájlfeltöltés, illetve alapvető hibakeresési módok sincsenek meg).
-
trisztan94
őstag
válasz
Sk8erPeter #15291 üzenetére
+ (#15294) moltam88
Ja, végül rájöttem. Múltkor a jQuery topikban volt szó erről, a PageSlide plugin amit használok valamiért duplikálja a div-et ami az oldalban van, ezért lett két form.(#15292) cucka + (#15293) Sk8erPeter + (#15295) cucka + (#15296) Sk8erPeter
Szerintem nem értettétek meg rendesen a problémát
. Kva mindegy, hogy milyen az a kód, egy tetves tutorial alapján csináltam, ott volt ez a kód. Most, hogy rájöttem a hibára és működésre bírtam, szerintetek azt a kódot használom?
Tegnap volt a határidő. Nem engedhettem meg magamnak, hogy írjak egy normális kódot, amikor bizonytalan volt, hogy egyáltalán így lesz-e csinálva. Olvastam a tutorialt, kimásoltam belőle a kódot, átírkáltam néhány helyen. Kövezzetek meg pls.
Ahelyett, hogy ez akár fel is merült volna bennetek, megy itt a mocskolódás, hogy kiég a retinám, meg hogy vérezhetek el ilyenen, egyáltalán nem értek a dologhoz, ezért inkább előbb olvassak, tanuljak meg debugolni, mekkora szar vagyok, hogy nem emlékeztem arra, hogy egy tetves jQuery plugin duplikálja a kódomat (fogadok a következő az lesz, hogy miért nem cserélted még le. Elébe vágok: Mert rohadtul nem volt arra időm, hogy lecseréljem, azé'), stb..Kezd a tököm kilenni ezzel a fórummal, tipikus nagyképű stílusban kell mindent mondani, majd ócsárolni szépen a másikat.
-
Phvhun
őstag
válasz
Sk8erPeter #15296 üzenetére
Nálam ennek az az oka, hogy semmire sincs időm, és ha valamihez célszerszámot kell összetákolnom php-ban, akkor inkább legyen rozoga, és működjön nekem, összelopkodott spagettikóddal, akár csak egyszer is, minthogy előtte regényeket kelljen olvasgatnom.
-
Sk8erPeter
nagyúr
Nem tudok vitatkozni. Amit viszont egyszerűen nem tudok elhinni, hogy hogy lehet - fórumos hozzászólások alapján - többéves tapasztalat alapján ilyen ostoba szar hibákon elvérezni, hogy nem veszi észre, hogy kliensoldalon rossz elemmel játszadozik. Ha gyorsan meg akarom tudni, hogy jó-e a selectorom, fogom, és bedobom a böngésző fejlesztői panel konzoljába a megfelelő szintaktikával, és egyből megtudom, hogy milyen elemeket kapok vissza... Ami még rosszabb, hogy arra se sikerült rájönni, hogy egyáltalán szerveroldalon vagy kliensoldalon van-e a probléma, ami megint teljesen triviális volt. De biztos majd egy spagettikód megoldja, keressünk hát gyorsan egyet!
Amúgy majdnem írtam, hogy tényleg szar, hogy a topicban nincsenek szakmailag érdekes problémák, de aztán rájöttem, hogy valószínűleg azért, mert aki szakmailag érdekes problémával találkozik, az sanszos, hogy már megtanulta értelmezni a hibaüzeneteket, valami sejtése van a debuggolásról (ami NEM a die() és egyéb bullshitek), meg utánanéz, mielőtt nekiesne, mint tót az anyjának.
(#15294) moltam88 :
Hát bizony, ez valóban nem meglepő. -
cucka
addikt
válasz
Sk8erPeter #15293 üzenetére
Csak én vagyok olyan ufó, hogy ha egy technológiával kell dolgoznom, amihez nem értek, akkor előtte elolvasok róla egy könyvet, hogy tudjam, miről van szó, én nem csimpánzként másolgatok össze vissza ismeretlen kódokat reménykedve abban, hogy véletlenül működni fog?
Ennek a topiknak a fele kb. ilyen triviális fasság, amit egy php könyv első 250 oldalának elolvasása után senki se tenne fel. Például biztos minden php könyvben van egy fejezet a filefeltöltésről. Mondjuk 40 oldal. Nem egy nagy kalad, egy délután alatt elolvasható, kitanulható alapszinten. Ehelyett szerintem még mindig azzal a foshalmazzal megy a küzdelem, amit ideposztolt. Nem fér a fejembe. -
moltam88
tag
válasz
Sk8erPeter #15291 üzenetére
Tuti, hogy több form-uploadXLS class-szal rendelkező elemnek kell lennie a DOM-ban.
Nálam ezzel a HTML-el:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
<form class="form-uploadXLS" method="post" action="php/uploadXLS.php" enctype="multipart/form-data">
<div class="form-group">
<div class="col-md-12">
<input type="file" name="xls" class="xls" />
</div>
</div>
<input type="button" value="Upload" class="btn-uploadXLS" />
</form>
<script type="text/javascript">
console.log($('.form-uploadXLS')[0]);
console.log($('.form-uploadXLS')[1]);
</script>
</body>
</html>a következő outputot kapom konzolban:
<form class="form-uploadXLS" enctype="multipart/form-data" action="php/uploadXLS.php" method="post">
undefined(Elég egyértelmű volt, de nem hagyott nyugodni a gondolat, hogy létezhet-e ilyen...)
-
Sk8erPeter
nagyúr
-
cucka
addikt
válasz
trisztan94 #15286 üzenetére
Ettől a kódtól kiég a retinám b+
-
Sk8erPeter
nagyúr
válasz
trisztan94 #15290 üzenetére
Nincs az oldalra betöltve több olyan form is, amihez a .form-uploadXLS class van hozzárendelve?
Mellesleg az eredeti postodban még id-t használtál, ahol normális esetben tök felesleges a [0] index:
var formData = new FormData($('#form-uploadXLS')[0]);Egyébként ne szívasd magadat:
http://www.plupload.com/
https://github.com/moxiecode/plupload
(ugyanazok fejlesztik, aki a TinyMCE-t is)
HTML5 + fallback. -
trisztan94
őstag
válasz
trisztan94 #15286 üzenetére
Megvan a megoldás!
Valami számomra érthetetlen okból, a formdata változónak nem a form 0. elemét, hanem az 1. elemét kellett átadni.
Itt van a SO kérdésem, a kommentekben lehet olvasni a tippeket.
-
moltam88
tag
válasz
trisztan94 #15288 üzenetére
(A kérdést én is passzolom, nem próbálkoztam még ilyennel)
-
trisztan94
őstag
válasz
DNReNTi #15287 üzenetére
Csórt kód.
Nyilván nem ezt használnám élesben, de sehogy sem megy.
Most kicsit egyszerűbb kóddal próbálkozom:
if(!empty($_FILES['xls'])) {
echo '<pre>',print_r($_FILES,1),'</pre>';
}
else {
die('POST ÜRES');
}Ezt dobja a print_r():
Array
(
[xls] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
)Fogalmam sincs, hogy mi az a 4 error.
-
DNReNTi
őstag
válasz
trisztan94 #15286 üzenetére
Csudi megoldás az a millió die()
Tegyed bele egy metódusba, és hibánál dobjon inkább exception-t. Szebben mutatna. Igen tudom, nem ez volt a kérdés.
-
trisztan94
őstag
válasz
Tele von Zsinór #15275 üzenetére
Nagyon jó a post, köszönöm!
Más:
HTML5-ös ajax fájlfeltöltéssel bénázom nagyon (ez lehet inkább jQuery topikba kellene, de nagyon úgy érzem PHP oldalon van a probléma)
Tehát egy SO-n 50+ upvote-olt válasz volt, többen is írták, hogy működik..
Van ez a formom:
<form name="form-uploadXLS" id="form-uploadXLS" method="post" action="php/uploadXLS.php" enctype="multipart/form-data" >
<hr />
<div class="form-group">
<div class="col-md-12">
<input type="file" name="xls" class="xls" />
</div>
</div>
<input type="submit" value="Feltöltés" class="btn-uploadXLS" />
</form>Az lenne a lényeg, hogy csak .xls vagy .xlsx fájlt lehessen feltölteni, de az most teljesen mindegy.
Itt a jQuery kód ami lekezelné:$('#form-uploadXLS').on('submit', function (event) {
console.log("submitted");
event.preventDefault();
var formData = new FormData($('#form-uploadXLS')[0]);
$.ajax({
url: 'php/uploadXLS.php',
type: 'POST',
success: function(data) {
console.log("success");
console.log(data);
},
error: function(msg) {
console.log("error");
console.log(msg);
},
data: formData,
cache: false,
contentType: false,
processData: false
}, 'json');
});És itt a mögötte lévő PHP:
if(isset($_FILES["xls"]) && $_FILES["xls"]["error"]== UPLOAD_ERR_OK)
{
############ Edit settings ##############
$UploadDirectory = $_SERVER['SERVER_NAME'].dirname($_SERVER["REQUEST_URI"]) . '/xls/';
##########################################
/*
Note : You will run into errors or blank page if "memory_limit" or "upload_max_filesize" is set to low in "php.ini".
Open "php.ini" file, and search for "memory_limit" or "upload_max_filesize" limit
and set them adequately, also check "post_max_size".
*/
//check if this is an ajax request
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
die();
}
//allowed file type Server side check
switch(strtolower($_FILES['xls']['type']))
{
//allowed file types
case 'application/vnd.ms-excel':
break;
default:
die('Nem támogatott fájlformátum!'); //output error
}
$File_Name = strtolower($_FILES['xls']['name']);
$File_Ext = substr($File_Name, strrpos($File_Name, '.')); //get file extention
$Random_Number = rand(0, 9999999999); //Random number to be added to name.
$NewFileName = $Random_Number.$File_Ext; //new file name
if(move_uploaded_file($_FILES['xls']['tmp_name'], $UploadDirectory.$NewFileName ))
{
// do other stuff
die('Sikeres feltöltés!');
}else{
die('Hiba történt a feltöltés során!');
}
}
else
{
die('wtf');
}(Ezt is SO-ról csórtam)
Na akármit csinálok, mindig a "wtf" hibaüzenetet kapom.
Elvileg a formData üres, de megint csak elvileg annak mi nem is láthatjuk a tartalmát.
HTTP 200 OK-al jön vissza a wtf hibaüzenet?
Könyvtárak helyét, nevét ellenőriztem, a php.ini-t is.
Mit nem veszek észre?
-
válasz
fordfairlane #15284 üzenetére
Legyen úgy.
-
fordfairlane
veterán
válasz
csabyka666 #15283 üzenetére
Nem tudom, mennyi adatról van szó, de megelőlegezem, teljesen fölösleges hülyeségen folyik a rugózás.
-
Na, itt kaptam mindkét oldalról. Elsődleges szempont, hogy működjön, de persze az sem hátrány, ha nem pazarol az erőforrással.
Én ezek után a BIGINT-tel szemeztem. Az 8 byte-on tárol, kérdés az, hogy a VARCHAR mennyin tárolnál a 13 számjegyet.
-
fordfairlane
veterán
válasz
csabyka666 #15280 üzenetére
Egzakt precizitásra a decimal való (tipikusan "monetary" értékre lett kitalálva), de ha a vonalkódszámokkal nem végzel matematikai műveleteket, akkor a varchar is jó. Integert nem ajánlom ilyen esetekre, úgy is stringként kell használnod alkalmazásszinten, hogy meglegyen a 13 karakter hossz.
-
Phvhun
őstag
válasz
csabyka666 #15280 üzenetére
Ezt elég lett volna csak logikusan átgondolnod.
13db számot ha tárolsz, akkor az 10 féle dolog mehet a 13 helyre.
Namost varcharként ez 13 karakter, amiből meg sokkal több féle van pl összes betü stb..., és a számokat alapból több biten tárolja le mivel lehet hogy unicode karakterként van a kezelésük beállítva.
Az meg több helyet foglal.Szoval számként tárold.
-
válasz
fordfairlane #15279 üzenetére
Melyik a "hatékonyabb"?
-
fordfairlane
veterán
válasz
csabyka666 #15276 üzenetére
decimal(13) unsigned zerofill
-
-
CSorBA
őstag
válasz
csabyka666 #15276 üzenetére
Ez SQL topikos kérdés lenne, válasz: [link]
-
Üdv!
Ha adatbázisban pontosan 13 jegyű számokat (vonalkódok) tárolok, akkor milyen INT-ben kell tárolni? Vagy legyen VARCHAR?
Van egy olyan problémám, hogy 3 számjegyű számokat hozzá tudok adni, de 13-nál nem írt semmit az adatbázisba. Gondolom, az lesz a hiba... -
Sk8erPeter
nagyúr
-
-
DNReNTi
őstag
Tökéletesen érthető a különbség, köszi.
Amit továbbra sem értek, hogy miért nem működött a call_user_func_array() az érték szerint átadással összerakott tömbbel? Továbbá a harmadik, foreach() megoldás nem működött jól. Utóbbit mondjuk lehet benéztem valahol, erre mindjárt vissza is térek.
-
cucka
addikt
válasz
trisztan94 #15267 üzenetére
Jelszó hash-eléssel kapcsolatban lenne egy kérdésem.
A standard válasz erre, hogy "google bazmeg".
Amúgy ha php 5.5 van, akkor használd a password_hash(), password_validate() függvényeket.
Régebbi verziókhoz itt van megoldás: [link] procedurális és oop implementáció.
Nem kell feltalálnod a meleg vizet.Egy másik gyors kérdés.
Deklaálod globálnak
global $valtozo;
Vagy beannotálod
/**
* @var $valtozo
*/Nem próbáltam ki, de én ezekkel támadnám meg a problémát.
-
cucka
addikt
válasz
DNReNTi #15266 üzenetére
Az első ciklusban érték szerinti értékátadást használsz a ciklusban. Ez úgy működik, hogy az $uj_tomb[0] értéke a $regi_tomb[0] értékének másolata. Tehát a háttérben egy darab memória tartalmát átmásolja egy másik memóriaterületre.
A második ciklusban referencia szerinti értékátadás történik. Ez úgy működik, hogy az $uj_tomb[0] semmi más, csak egy új név ugyanarra a memóriadarabra, amire a $regi_tomb[0] is mutat. Lényegében ez egy alias. Ha az egyik értékét módosítod, a másik is módosul. A memória, amire mutatnak, csak akkor fog felszabadulni, ha mindkét változót törlöd (unset) - ez fasza memory leak forrás, oda kell rá figyelni.
A harmadik ugyanaz, mint a második, csak for helyett foreach ciklussal. Többnyire ezt érdemes a for ciklus helyett használni.
Ja, és az ne zavarjon meg, hogy a tömbök 0. elemével írtam a példát, a fentiek bármilyen változóra igazak. Továbbá z objektumok érték szerinti átadása totál máshogy működik.
-
-
trisztan94
őstag
Sziasztok!
Jelszó hash-eléssel kapcsolatban lenne egy kérdésem.
Ha jól értettem a leírásokat, az a legbiztonságosabb, ha a jelszóhoz hozzáadunk egy egyéni salt-ot. Eddig md5-öt használtam, de az tudjuk, hogy mennyire nem biztonságos.
Tehát amikor regisztrál a felhasználó, akkor generálok egy salt-ot, majd base64_encode()-al hashelem a jelszó+salt kombót?
Ezek után, berakom az adatbázisba a hashelt jelszót és egy külön oszlopba a salt-ot?
Tehát amikor bejelentkezni akar a júzer, akkor előbb egy query-vel kiszedem a salt-ot, majd hozzáadom a jelszóhoz, megint csinálok ebből egy hash-t és csekkolom, hogy egyezik-e az adatbázisban lévő jelszóval?
Így kell ezt csinálni? Ha nem, akkor hogyan kell rendesen?
Ez a kód, amit a salt létrehozásához használok:
base64_encode(mcrypt_create_iv(24, MCRYPT_DEV_URANDOM));
Szerk:
Egy másik gyors kérdés.
Include-olva van egy fájlomban az adatbázis kapcsolódás, a PDO osztály példánya a $conn változóban van. Na most ezt a változót használnám azon a lapon, amibe be van include-olva, viszont netbeans aláhúzza, hogy uninitalized. Működik attól még, annyi érdekelne, hogy csak a jelenlegi scope-ban nem találja, vagy kell-e ezzel egyáltalán foglalkozni?
-
DNReNTi
őstag
Napi villámkérdés:
Mi a különbség ez:
for ($i=0; $i<$regi_tomb_merete; $i++) {
$uj_tomb[] = $regi_tomb[$i];
}és e között :
for ($i=0; $i<$regi_tomb_merete; $i++) {
$uj_tomb[] = & $regi_tomb[$i];
}A var_dump($uj_tomb) látszólag totál ugyan azt adja vissza, valami mégsem jó az első változattal, mert a call_user_func_array() nem helyesen fut le vele, hanem tömb minden eleme az utolsó elem. A második módszerrel teljesen jó minden, csak meg akarom érteni mi az oka annak hogy az első bár látszólag ugyan azt a tömböt készíti el, mégsem jó.
Bónuszkérdés:
Miért nem jó így sem:
foreach($regi_tomb as $tomb_elem) {
$uj_tomb[] = & $tomb_elem;
} -
Soak
veterán
válasz
trisztan94 #15263 üzenetére
Ahelyett hogy feltalalod a melegvizet, miert nem hasznalsz egy kesz megoldast? Pl ott a doctrine mint orm (meg nem hasznaltam) , legalabb adatbazis fuggetlen is lehetne az alkalmazasod.
-
trisztan94
őstag
válasz
Peter Kiss #15261 üzenetére
+ (#15262) fordfairlane
Köszönöm szépen, így már sokkal tisztább a kép. Nekiesek majd valamikor jövőhéten egy új projektnek, ott megpróbálom majd implementálni ezeket.
Köszi mégegyszer uraim!
-
fordfairlane
veterán
válasz
trisztan94 #15260 üzenetére
Nagyjából három funkciót valósít meg az osztályod. Egyrészt kapcsolatot kezel, másrészt query és paramétereket rendel össze, harmadrészt valamiféle típuskényszerítést végez saját binddal.
A Single Responsibility Principle, első, klasszikus OOP vezérelv mentén: Az elsőt egy DBFactory osztályba tenném, ami példányosít, ha kell, és a PDO-t adja vissza az alkalmazásrétegnek. A második funkciót egy MyPDO szerű osztállyal oldanám meg, esetleg az emlegetett Doctrine DBAL komponenssel. (MyPDO extends PDO, azt hiszem, pont ebben a topikban emlegettem). A harmadikra (az a nagy switch szerkezet) igazából nem tudom, hogy ebben a formában szükség van-e.
-
Peter Kiss
őstag
válasz
trisztan94 #15258 üzenetére
Ha olyan alkalmazásban használod fel, ami áll két lapból, és a database.php jelenlétéből erre tippelek, akkor semmi értelme azzal játszani, mit rakj köré, mert felesleges lesz.
Amennyiben egy nagyobb alkalmazásról van szó, akkor megérheti körberakni, amivel elérheted, hogy:
- egy beállítást soha ne lehessen elnyomni rajta (PDO: mindig exception-t dobjon, ha valami beszarik)
- tudj hozzáadni olyat, amit gyakran használsz generikusan
- elfedj olyat, amit nem kellene használni, ne is legyen szem előtt
- magasabb absztrakciós szintet adj meg, pl. PDO ellenére is vannak driverspecifikus beállítások -
trisztan94
őstag
válasz
Sk8erPeter #15259 üzenetére
Tisztán szeretnék látni, nem akarok több felesleges hülyeséget csinálni, mint ahogyan most kiderült, hogy a PDO osztályom is az volt.
-
Sk8erPeter
nagyúr
válasz
trisztan94 #15258 üzenetére
Most akkor már azzal is gondjaid akadtak, hogy hogyan használj fel egy objektumpéldányt?
-
trisztan94
őstag
válasz
Peter Kiss #15256 üzenetére
Tehát ha jól értem, teljesen jó az, ha a PDO-val kapcsolatos dolgokat csak beírom a kódomba ahová kell?
Tehát mondjuk adatbázis kapcsolódás az most a database.php fájlban van, abban van ez az osztály. Tehát konkrétan csak oda beírom azt ami a konstruktorban van, majd ha kell egy másik fájlban az ab, akkor csak importálom a database.php-t és csak beírom abba a fájlba a query-ket majd futtatom őket a database.php-s PDO példányommal?
Vagy hogy lenne jó alkalmazni?
-
Sk8erPeter
nagyúr
válasz
Peter Kiss #15256 üzenetére
Mindegyik állítással egyetértek.
(#15251) trisztan94 :
Úgy kell érteni, hogy nyugodtan kidobhatod a kukába ezt az osztályt, mert semmi értelme. -
Peter Kiss
őstag
válasz
Sk8erPeter #15247 üzenetére
Mindkettő hibás, típust nem kell kitalálni, hanem lehetőséget kell adni a megadására, ha pedig hiányzik, akkor vagy egy default-ot veszünk, vagy exception dobunk.
És a kóddal nem az a baj, hogy zajos, hanem hogy egy rettentő rossz gyakorlatot mutat be. Összerakja a PDO-t és a PDOStatement-et egy osztályba, mikor teljesen más a felelősségük, ráadásul gyakorlatilag fixen egy PDOStatement-en dolgozik.
Nesze neked OO. :facepalm:
-
cucka
addikt
válasz
trisztan94 #15251 üzenetére
Hogy erted azt, hogy bebugyolaltam egy metodust egy masikbs?
Úgy, hogy a metódusaid többsége semmit sem csinál, csak meghív egy másik metódust. Tehát a kódod nagy része teljesen fölösleges zaj a kódbázisban. -
DNReNTi
őstag
válasz
fordfairlane #15253 üzenetére
Basszus... Epic fail. Megvan a hiba... Inkább le se írom annyira ciki.
-
DNReNTi
őstag
válasz
fordfairlane #15250 üzenetére
Egy mysqli objektum. A PHPStorm szépen fel is sorolja a mysqli metódusokat a -> után mégis a "Call to a member function close() on a non-object" hibával lerogyik.
De mindegy is mivel kiderült, nem szükséges a kapcsolatokat zárni, maguktól záródnak.
-
trisztan94
őstag
válasz
Sk8erPeter #15247 üzenetére
Nem hulyeseg.
Gettype-al valahogy igy nezne ki a switch, nem?
switch (gettype($value)) {
case "integer"
$type = PDO::PARAM_INT;
break;
case "boolean":
$type = PDO::PARAM_BOOL;
break;
case "NULL":
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}Viszont amit elozo hsz.-emben bemasoltam, az egesz kod a fajlban, megis parse errort kapok
Hogy erted azt, hogy bebugyolaltam egy metodust egy masikbs?
-
DNReNTi
őstag
válasz
trisztan94 #15246 üzenetére
Ehhez kapcsolódóan nekem is lenne egy (lehet gyökér) kérdésem.
Én is elkezdtem egy static mysqli kezelő osztályt. Egy metódus létrehozza a kapcsolatot.
Kérdés a következő: A létrehozott adatbázis kapcsolat hogyan záródik / zárható le?Pl:
$DB = Database::openConnection();
$DB->close();Na ez így nem működik.
Mi erre a helyes megoldás?
-
Sk8erPeter
nagyúr
válasz
trisztan94 #15246 üzenetére
Akkor valahol máshol cseszted el, mert ez a kód szintaktikailag elvileg nem hibás.
De egyébként most mi értelme is volt, hogy bebugyoláltad mindegyik metódust még egy másik metódusba?
Aztán van még egy ilyen switch-case-ed:switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}Na ne má, ott a gettype(), és akkor nem 3 külön ellenőrzés, a meglehetősen ocsmány switch(true)-val.
-
trisztan94
őstag
Készítettem egy PDO kezelő osztályt.
<?php
class Database {
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
private $error;
private $stmt;
public function __construct(){
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
public function bind($param, $value, $type = null){
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
public function execute(){
return $this->stmt->execute();
}
public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}
public function rowCount(){
return $this->stmt->rowCount();
}
public function lastInsertId(){
return $this->dbh->lastInsertId();
}
public function beginTransaction(){
return $this->dbh->beginTransaction();
}
public function endTransaction(){
return $this->dbh->commit();
}
public function cancelTransaction(){
return $this->dbh->rollBack();
}
public function debugDumpParams(){
return $this->stmt->debugDumpParams();
}
}
?>Parse error:
PHP Syntax Check: Parse error: syntax error, unexpected '{' in your code on line 36
if (is_null($type)) {Ez a bind() függvénynél van
Na én már vagy fél órája nézem a kódot, de nem látom, hogy hol rontottam el a szintaktikát
Ti láttok valamit?
-
-
jbauer05
tag
válasz
fordfairlane #15243 üzenetére
Igen, post a metódusa. A változót azért írtam át, hát ha amiatt nem megy, de miután kijavítottam akkor is rossz volt, de az amit írtál az már jó lett, köszönőm !
Az még megkérdezhetném, hogy létezik a phpban a C# féle try-cacth ? Mert olyasmit szeretnék csinálni, hogy adva van hat checkbox, ellenőrizze, hogy valamelyik aktív-e, és ha igen akkor hajtsa végre azokat a feltételeket arra a hat checkboxra amit megadtam, de ha egyik se aktív akkor írja ki, hogy nincs bepipálva semmi. Ezt, hogy kellene megcsinálni, mert ötletem sincsen.
-
jbauer05
tag
Üdv, segítséget szeretnék kérni!
Még kezdő vagyok a php nyelvben. Egy checkboxot szeretnék feltétellel lekérdezni, hogy aktív-e, de nem akar összejönni mert akkor is kiprinteli ha nem aktív.
A checkbox kódja: <input name="csekk1" type="checkbox" id="csekk1" />
a feltétel : $csekk1=isset($_POST["csekk1"]);
if ($csekk==1);
{
print "be van pipálva";
}
Mit ronthattam el ? Előre is köszönöm a válaszokat! -
htc07
addikt
Sziasztok!
Lenne egy gyors kérdésem (eléggé hobbi szinten vagyok a php-val):
$result=Array("a" => "0",
"b" => "asdfgh",
"c" => "qwertz"
);
foreach($result as $row => $val){
if($row == "a" && $val == 0){
echo "nulla";
}
else{
echo "egy";
}
}Az "a" értéke 0 vagy 1.
Hogyan tudnám megoldani, hogy csak az "a" értékét írja ki?
A jelenlegi kód kimenete:
nullaegyegy -
laceeeboy
tag
válasz
Sk8erPeter #15235 üzenetére
És valami normálisabb ingyenes tárhelyet tudnál ajánlani? Fel kell majd töltenem valahová. Az atw-t is csak azért próbáltam ki, mert még csak egyszer csináltam ilyet, mindig localhoston dolgoztunk.
-
DNReNTi
őstag
válasz
Sk8erPeter #15235 üzenetére
Érthető. Megfogadom. Mindenhol prepared statement-ek lesznek a jövőben. Sőt. Meg fogom csinálni a fordfairlane által javasolt saját osztályt, így mindenképpen mindig statement-ekkel dolgozok majd.
Viszont... A példámban írtam is, nincs hibakezelés, csak szemléltetni akartam, hogyan működik a dolog. Ezért nincs például csekkolva hogy a $oldal változó integer e. Feleslegesnek gondoltam egy senior körökben is elfogadható példát felvezetni, amikor a lényeg csak az volt hogy a kérdező megértse a paraméterátadás és ennek feldolgozásának menetét. Ez sikerült, tudta implementálni. Ez olyan mintha valakit az autósiskolában egyből a reggeli csúcsba vinnének nem rutin pályára, pedig még csak hátsóülésen látott autót belülről. No mindegy értem én hogy értitek.
-
Sk8erPeter
nagyúr
válasz
DNReNTi #15223 üzenetére
Bizony, minden alkalommal, amikor ilyen kódot osztasz meg, God kills a kitten.
"Hogyan lehetne másképp?
"
Úgy, hogy prepared statementeket használsz.
Meg a SELECT * FROM ... sem egy jó szokás, ne az legyen az alap, hogy minden mezőt lekérünk, mert az teljesítményromlással is jár, hanem soroljuk fel szépen azokat a mezőket, amikre szükségünk van.
Nem beszélve az elgépelésekről, de az mondjuk a legkisebb gond.(#15225) :
"Hüm. Ha esetleg a prepared statements-re gondolt akkor amiatt nem kell aggódni, ahol kell azt használom"
Jogos volt cucka korábbi kérdése, hogy hol nem kell."csak PDO helyett mysqli-t. Itt a példában nem akartam még azzal is karatézni. De jogos."
Teljesen mindegy, hogy PDO vagy mysqli (ez egyben válasz (#15224) mobalnak is), a lényeg a prepared statement volt.
Az pedig szerintem nem jó hozzáállás, hogy a kezdőnek jó lesz szarul is prezentálni, de mi közben a saját fejlesztéseink során jól használjuk. A kezdő ne tanuljon meg rossz példákat. Most pedig nyilvánvaló, hogy az alapján csinálta meg, amit te mutattál neki...(#15232) :
"Például olyan metódusokban nem szoktam használni ahol a szerver oldal ad át ellenőrzött paramétert, mondjuk egy user_id-t, azaz garantáltan nem jelent veszélyt."
Uhh, ez rossz megközelítés, ezt inkább felejtsd el, nincs olyan, hogy "garantáltan nem jelent veszélyt"... de látom ezt közben cucka kifejtette.(#15231) laceeeboy :
Ismerjük az atw.hu-t, komolytalan.Felejtős.
-
cucka
addikt
válasz
DNReNTi #15232 üzenetére
Például olyan metódusokban nem szoktam használni ahol a szerver oldal ad át ellenőrzött paramétert, mondjuk egy user_id-t, azaz garantáltan nem jelent veszélyt.
És mi van, ha újra szeretnéd hasznosítani azt a metódust? Vagy csapatban dolgozol és a másik ember szeretné használni a metódusaidat? És ha mondjuk egy 1 év múlva lesz, amikor már nem emlékszel pontosan, hogy mely metódusokba építettél biztonsági lyukat lustaságból? -
DNReNTi
őstag
válasz
fordfairlane #15226 üzenetére
Saját osztály írására már én is gondoltam. Lehet rászánom magam a jövőben.
(#15227) cucka
Miért, hol nem kell?
Például olyan metódusokban nem szoktam használni ahol a szerver oldal ad át ellenőrzött paramétert, mondjuk egy user_id-t, azaz garantáltan nem jelent veszélyt.(#15229) biker
mondjuk $odlal helyett $oldalt írhatnál
Siettem. -
laceeeboy
tag
atw.hu-t ismeri valaki?Feltöltöttem az oldalt, de valószínűleg elírtam valamit a connect.php-ban.ami eddig localhost volt oda atw.hu kell, vagy repuljunk.atw.hu vagy mysql.atw.hu, vagy micsoda?Meg lett.A session_start() hibákról esetleg valaki tud valamit? atw.hu-n is van egy ilyen kérdés a GYIK-ben, de üres a válasz helye.
Ez is meg lett, tmp könyvtár hiányzott. -
laceeeboy
tag
Ne káromkodjatok már, mi ez a sok alien szó?
-
-
fordfairlane
veterán
válasz
DNReNTi #15225 üzenetére
Ha esetleg kényelmetlennek tartod a prepare-bind-execute használatát, ajánlom a Doctrine DBAL-t, ott van egy olyan metódus, hogy executeQuery. Egyébként erre sokan csináltak saját, PDO-ból örökölt osztályt, amiben egyetlen metódushívással helyettesítik ezt a három műveletet.
-
DNReNTi
őstag
válasz
Sk8erPeter #15222 üzenetére
Én ezt mindig így használtam. (God kills a kitten?
)
Hogyan lehetne másképp? -
DNReNTi
őstag
-
Speeedfire
félisten
válasz
Tele von Zsinór #15217 üzenetére
Nincs benne hibaüzenet, bináris a tartalma. Kipróbáltam másik szerveren is, ott megfelelően működik. Valami php, vagy apache beállítás lesz a ludas szerintem.
-
laceeeboy
tag
-
Tele von Zsinór
őstag
válasz
Speeedfire #15215 üzenetére
Próbáltál a letöltött file-ba belenézni, nincs-e ott valami hibaüzenet? Diffelted az eredetivel, hogy lásd, mi a különbség?
-
DNReNTi
őstag
válasz
laceeeboy #15212 üzenetére
Nem olyan bonyolult pedig. Amit biker leírt, kicsit kifejtem neked.
Legyen az oldalad címe: domain.hu/hirek.php
Kezdjük azzal hogy ellenőrzöd melyik oldalt (lapot) nézed:
$oldal = isset($_GET['oldal']) ? $_GET['oldal'] : 1;
Alap esetben (most) a $oldal változó 1 lesz. Azaz az 1. oldalt nézed.Az írtad három hírt szeretnél megjelentetni, legyen a legfrissebb elől, ezt tároljuk egy változóban, így később könnyű módosítani.
Tehát: $hirek_szama = 3;Ezen két adat alapján létrehozol egy "léptető" változót.
$oldal_offest = ($oldal-1) * $hirek_szama;
Az $oldal-1-re azért van szükség mert különben elcsúszna a lekérdezés. Ezekkel máris egyenesben vagy, minden adat megvan hogy tetszőleges lekérdezést tudj kreálni:
SELECT * FROM hirek ORDER BY publikalas_ideje DESC LIMIT '$odlal_offset', '$hirek_szama';Szintén biker írta: a LIMIT meghatározza honnan, hány rekordot kérsz le.
Alap esetben ez most 0, 3. Azaz az elejétől 3 db rekord. Magyarul a 3 legfrissebb.
Eddig gondolom teljesen érthető.A léptetés pedig ha eddig értetted már nem okozhat gondot:
Mivel tudod épp melyik oldalon vagy ($oldal) ennek felhasználásával már gyerekjáték.
<a href="/hirek.php?oldal=<?php echo $oldal-1; ?>" title="Előző oldal">Előző oldal</a>
<a href="/hirek.php?oldal=<?php echo $oldal+1; ?>" title="Következő oldal">Következő oldal</a>
A hivatkozás így pl a : domain.hu/hirek.php?oldal=2 linkre visz, amiből máris jön, hogy a 2. oldalon vagy. A lekérdezés vége így : LIMIT 3, 3 lesz.Remélem sikerült érhetően megfogalmaznom és nem írtam hibát, közben nem ellenőriztem magam.
FONTOS: ebben amit leírtam nincs hibakezelés! Csak a működést szemlélteti! -
Speeedfire
félisten
Ezt szoktam használni fájlok erőltetett letöltésére, de valami miatt nem akar menni doc, docx típusokkal. A letöltött fájl hibás, nem jó a tartalma. Próbáltam már direktbe is a content-type-ot átírni, de nem megy.
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
//header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
//header("Content-Type: application/ms-word; charset=UTF-8");
//header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;Valakinek van tippe?
-
laceeeboy
tag
Köszi a gyors választ, találtam jQuery-s megoldást, és működik is, bár a paraméterek változtatásával nem törődik, de legalább már ennyi is van. Plusz a design sem jelenik meg, egyszerű szövegként ott van, hogy 1 2 3 4 ..., de ha rákattintok lapoz, és ez a lényeg egyelőre.
Az, hogy magamnak írjak egyet PHP-ban, szerintem egyelőre felejtős, kicsit pályát tévesztettem én ezzel a webprog-gal
Bár érdekel a téma, de egyre csak azt veszem észre, ahogy mélyül a víz, hogy nincs meg hozzá a programozói gondolkodásmódom. Legalábbis másoknak tök logikus dolgokon van, hogy órákat gondolkozok és semmi.
-
biker
nagyúr
válasz
laceeeboy #15212 üzenetére
mivel ezt tanulod, nem megoldást adnék, hanem leírást
a LIMIT után egy tól ig változók használata javasolt esetleg
aztán url-ben átadod a tól ig változókat, ez ugye első betöltéskor nem létezik, tehát kezelni kell azt is, ha nincs semmi, akkor tól=0 ig=3
aztán kiteszel egy következő linket ahol paraméter tól=3 ig=3 (mert ugye mettől hány darab)Másik, ha teszel lapozót, akkor mondjuk jqueryvel, de ekkor nem tehetsz bele limitet, mindent le kell kérni, betolni a jquerybe, és ott megadni hány darabot jeleníthet meg és hány lapozó legyen
erre 10000 példa van, akár dynamic table, vagy bármi
-
laceeeboy
tag
Hali!
Sok körülbelüli kulcsszóra rákerestem a topikban, de nem találtam magamnak megoldást.
Az a helyzet, hogy írom a szakdolgozatomat, és mivel webprogramozást tanulok, egy weboldalt kell készítenem mindenfélével.
Elkezdtem a PHP részét, de nem vagyok nagyon jártas a témában, így el is akadtam hamar.A problem.:
Az oldalon van egy hírek menüpont, ha rámegyünk adatbázisból kilistázza a híreket. Igen ám, de egy oldalra csak 3 hírt szeretnék, amit a limit-tel meg is oldottam. Viszont sehogy sem tudok összehozni egy lapozót ami működhetne.
Szétgugliztam az ujjaimat, de nem bírtam működésre bírni a talált lapozó kódokat. Ha valakinek lenne egy kis ideje közepes-szájbarágós szinten elmagyarázni ezt a részt, azt nagyon megköszönném.
Itt a kód.:
<?php
$query = "SELECT * FROM hirek LIMIT 0, 3";
$result = mysqli_query($mysqli, $query);
while($row = mysqli_fetch_array($result))
{
echo"<h3>".$row[1]."</h3> <span>".$row[2]."</span>";
}
?> -
LonGleY
veterán
válasz
Tele von Zsinór #15091 üzenetére
Köszönöm, csak most láttam, hogy válaszoltál. Sajnos az otthoni seed nem lenne megoldható. De végül a szimpla letöltés mellett döntöttünk. +1 tárhely előfizetés, de nem probléma.
-
DNReNTi
őstag
Ismét örülök hogy én maradtam pécés.
-
don_peter
senior tag
válasz
PumpkinSeed #15203 üzenetére
Nah igen, de van PC-ém otthon és csak este és útközben használom a Mac-et...
-
don_peter
senior tag
válasz
trisztan94 #15201 üzenetére
Nekem a jobb oldali
Air Mac 2013. -
trisztan94
őstag
válasz
don_peter #15197 üzenetére
Mac laposom van és rohadt bonyolult benne ezen karakterek beírása
Éppen ma jöttem rá, hogy a jobb és bal kacsacsőröket gyakorlatilag a Jobb ALT+SHIFT+Y-X gombokkal tudom beírni...Én is Mac-ről nyomom, megszokás kérdése.
Amúgy meg baloldali shift-alt-y a <, shift-alt-x pedig a >.
Új hozzászólás Aktív témák
Hirdetés
- Kerékpárosok, bringások ide!
- sziku69: Szólánc.
- Székesfehérvár és környéke adok-veszek-beszélgetek
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Óvodások homokozója
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- exHWSW - Értünk mindenhez IS
- Debrecen és környéke adok-veszek-beszélgetek
- Motoros topic
- További aktív témák...
- Google Pixel 9 Pro készülékek 128gb / 256 gb / 512gb - Szép állapot, garancia, akár beszámítással
- Xiaomi Poco X7 Pro 5G 12/512gb - Makulátlan, garanciális, akár beszámítással
- Xiaomi 14T Pro 12/512gb - Makulátlan, akár beszámítással
- Samsung Galaxy S25 12/256gb - Újszerű, akár beszámítással
- Eladó Cooler Master Masterliquid ML240L V2 RGB
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max/
- Bomba ár! Dell Latitude 5411 - i5-10400H I 16GB I 256SSD I HDMI I 14" FHD I Cam I W11 I Garancia!
- DELL PowerEdge R730xd 12LFF 120TB+400GB rack szerver - 2xE5-2680v4,128GB RAM,2x10G NET,H730p RAID
- LG 55CS6 - 55" OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox!
- BESZÁMÍTÁS! MSI MPG Z590 GAMING FORCE alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest