- iPhone topik
- Okosóra és okoskiegészítő topik
- Yettel topik
- Vodafone mobilszolgáltatások
- Samsung Galaxy A54 - türelemjáték
- Az Apple is mesterséges intelligenciával turbózza fel a teljes kínálatot
- MIUI / HyperOS topik
- Bivalyerős lett a Poco F6 és F6 Pro
- Samsung Galaxy S23 Ultra - non plus ultra
- Atlasszal készül a HMD a középkategóriába
Hirdetés
-
Ilyen lesz a Metal Slug Tactics
gp A friss gameplay anyag mellé sajnos továbbra sem kaptuk meg, hogy a játék mikor érkezik az ősz folyamán.
-
Musk betiltja az iPhone-okat a Teslánál és az X-nél, ha ezt meglépi az Apple
it Elon Musk azt mondja, hogy betiltja a Teslánál és az X-nél is az iPhone-okat, ha az Apple operációs rendszer szintjén integrálja az OpenAI-t – szerinte ez elfogadhatatlan biztonsági kockázat.
-
Computex 2024: analóg árkád kontroller a Varmilo gondozásában
ph A cég Fumo Shoppal való együttműködése révén született, háromféle külcsínnel gyártott eszköz Cherry MX Multipoint szériás kapcsolókkal jön.
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz spammer #9359 üzenetére
Ha arról beszélsz, hogy abban a bizonyos fájlban egy normálisan felépített HTML-tartalom van, és abból csak pl. egy adott id-vel rendelkező div-et szeretnél megjeleníteni, vagy hasonló, akkor példaként a jQuery hivatalos oldalán van AJAX-os kommunikációnál ugyanilyen:
Loading Page Fragments$('#result').load('ajax/test.html #container');
Egyébként még PHP-val is lenne mód ilyenre: DOMDocument-tel parse-olod, getElementById()-vel beolvasod a megfelelő részt.
Mondjuk ha már megoldási módszerekről beszélünk, ez sem túl szép, jobb lenne a tartalmakat adatbázisból kiolvasni, ha van erre mód.
===
(#9360) PazsitZ : nem akarok kötekedni, de azért ne szoktassuk arra az emberkéket, hogy minden cikket jelenítsenek csak meg nyugodtan ugyanazon az oldalon, aztán majd kliensoldalon szépen megjelenítgeti-eltünteti, nem kevés terhelést róhat adott esetben feleslegesen a szerverre.
Persze nagymértékben függ a feladattól, de általában inkább kerülendő, inkább aszinkron módon kellene betölteni.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PazsitZ #9365 üzenetére
Simán lehet, hogy én értettem félre a dolgot, de akkor elmondom, én hogyan értelmeztem, nagyon röviden:
- spammer egy oldalon megjelenít jó sok cikket ömlesztve, aztán szeretné, hogy ezek klikkelhetők, külön oldalon megtekinthetők legyenek
- amit Te írtál: van a "cikkek" id-vel rendelkező elem, ebben jelenik meg az összes cikk. Valamelyik vonatkozó linkjére kattintva ez a "cikkek" id-val rendelkező elem elrejtődik, majd a kattintott elem tartalma bekerül a "cikk" id-val rendelkező div-be. Itt van egy, a cikk bezárására szolgáló link is, ami annyit csinál, hogy az előbbi, ömlesztett "cikkek" id-val rendelkező elemet már megint megjeleníti, majd a "cikk" id-val rendelkező elem tartalmát eltünteti (törli is).
Szóval ez egy ilyen kliensoldali játék, de attól még nem tekinthető meg külön oldalon, és nem is lehet külön hivatkozni az oldalra.
A felesleges terhelés alatt igazából azt értettem, hogy amennyiben marad a megoldásodnál, tehát csak kliensoldalon játszadozik a cikkek eltüntetésével-megjelenítésével, és nem oldja meg, hogy csakis az adott cikk legyen megjeleníthető, akkor mindig kötelező lekérnie a szerveroldalról az ÖSSZES cikket, mert utána ugye ebből fog szemezgetni, elrejtegetni, megjeleníteni - de ettől még mindig nem tudta mondjuk elküldeni az ismerősének, hogy nézd, a 30 ömlesztett cikkből igazából ezt akarom neked megmutatni, ezt olvasd el. Na oké, itt meg azt is lehetne csinálni, hogy ugye minden cikknek külön azonosítója van, akkor mivel úgyis minden egyetlen lapon van, mind a 30 cikk, akkor úgy linkeled be, hogy http://example.com/index.php#cikk_28, mert végül is ez is odaugrik, és működik. De most ezért jelenítse meg az összes cikket, mind a 30-at? Minek?Na, tehát a lényeg: szerintem ő ilyen blogszerű ömlesztést akar, aztán a címre rákattintani, és teljesen külön oldalon megjelenítve látni azt az egyetlen árva cikket, a többit nem (legfeljebb egy főoldalra mutató linkkel, stb.).
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz spammer #9364 üzenetére
Igazából szerintem egyikünk számára sem volt egyértelmű először, hogy mit is szeretnél, így mindketten félreértettük.
Most megint elolvastam, amiket írtál, és szerintem Te tényleg valami olyasmit szeretnél, mint ami a blogokon van: ömlesztve az összes cikk, de ha a címére kattintasz, akkor ugyanaz a cikk megjelenik egy külön oldalon, ergo külön URL-lel, esetleg bővebb tartalommal is.Pl. erről egy egyetemi tanárunk blogja jut eszembe, WordPress-es blogja van, és külön oldalon is megtekinthetők az itt ömlesztve, igaz, pagerrel látható cikkek.
Valami ilyesmit akarsz, nem?
Csak mert akkor a korábbi AJAX-ozás nem is feltétlenül kellene, sőt, az már inkább advanced dolog.
Szerintem amennyiben tök egyszerű struktúrájú oldalad van, hagyományos módon kellene felépítened az oldaladat, hagyományos módon beinclude-olni mindenhova azt a fájlt, ami tartalmazza a fejlécet, menüt, aztán alulra meg a láblécet, ahogy mindenki kábé el szokta kezdeni a honlapszerkesztést. Már ha nem akarod most bonyolítani.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PazsitZ #9368 üzenetére
Ja, oké, mondom, bocs, nem akartam belédkötni, csak elsőre kusza volt számomra az egész: a srác elképzelése, meg a kódod is, de legközelebb majd először kukoricára térdepelek a sarokban, hátha attól teljesen kitisztul a kép. Bár szerintem inkább az eredeti megfogalmazás volt homályos.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz spammer #9370 üzenetére
Feltételezem, a WordPress is támogat komolyabb szintű cache-elést, így szerintem érdemes lenne mégis megfontolnod az arra vagy más CMS-re való átállást, ha valami könnyen módosíthatót szeretnél - lehet, hogy később bővíteni szeretnéd tartalmakkal az oldaladat.
Persze ez csak lehetséges alternatíva, ha időt szeretnél magadnak megspórolni.Ha nem akarsz ilyet, és az egyszerű megoldások között keresel, létezik nagyon favágó módszer, ami nagyon nem a webfejlesztés gyöngye, de végül is működik, vegyük úgy, hogy mondjuk 10 darab cikked van, és ahogy említetted, ez 10 külön HTML-fájlba van szétdobva, és csakis ezeket szeretnéd megjeleníteni:
- mindegyik fájlnak legyen azonos a kiterjesztése (pl. .php, ha akarsz mondjuk belerakni valami PHP-kódot, legyen alkalmas rá), és lehetőleg a követhetőség miatt legyenek azonos könyvtárban
- van egy index.php fájlod, ahol az összes lényeges műveletet elvégzed; az ömlesztett kiíratást, valamint az egy darab megadott cikknek a kiíratását is
- berakod egy tömbbe ennek a 10 db fájlnak a nevét mondjuk kiterjesztés nélkül, figyelsz rá, hogy helyes nevet adj meg, és lehetőleg egyáltalán ne tartalmazzon ékezetes vagy más speciális karaktereket;
- egy foreach-csel végigmész ezen a tömbön, és szépen file_get_contents-szel beolvastatod és kiíratod ezeknek a fájloknak a tartalmát
- mindeközben figyelsz arra is, hogy a fájlokban a cikk címe és egy önhivatkozás is legyen benne - a hivatkozás meg mondjuk legyen ilyesmi: index.php?article=tokmindegy, ahol tokmindegy a fájl neve kiterjesztés nélkül, kiterjesztéssel meg tokmindegy.php
- ha valaki úgy nyitja meg az oldalt, hogy http://example.com/index.php VAGY http://example.com/index.php VAGY http://example.com/index.php?article=, akkor ömlesztve jeleníted meg az összes cikket
- ha valaki úgy nyitja meg az oldalt, hogy http://example.com/index.php?article=tokmindegy, akkor megvizsgálod, hogy létezik-e a tokmindegy.php az adott könyvtárban, ha igen, akkor kiíratod, és kész vagy; ha nem létezik, akkor pl. kiraksz egy hibaüzenetet, hogy nincs ilyen fájl, és megjeleníted ömlesztve a tartalmat. Ha valaki ilyen módon nyitja meg az oldalt, akkor a $_GET['article'] értéke egyenlő lesz tokmindegy sztringgel.Vegyük azt, hogy az "itt_tarolod_a_cikkeket" könyvtárban vannak a tartalmaid, ez pedig az index.php-vel azonos könyvtárban helyezkedik el.
Valahogy így néz ki akkor a könyvtárstruktúra (most azért tettem DIR-t az itt_tarolod_a_cikkeket mögé, hogy jelezzem, hogy az egy könyvtár):fejlec.php
lablec.php
index.php
itt_tarolod_a_cikkeket [DIR]
|-- tokmindegy.php
|-- masikcikk.php
|-- megegycikk.php
|-- ....Ez alapján NAGYON leegyszerűsített tákolmány fos példa, gyorsan összekotorva:
Pl.:
<?php
// .....................
$articles_directory = 'itt_tarolod_a_cikkeket';
$articles_array = array( 'tokmindegy', 'masikcikk', 'megegycikk', );
$page_to_show = '';
$errors_array = array();
if( !empty($_GET['article']) ){
if( in_array($_GET['article'], $articles_array) ){
if( file_exists($_GET['article']) ){
$page_to_show = $articles_directory.'/'.$_GET['article'].'.php';
}
else{
$errors_array[] = "File doesn't exist or is not available!";
}
}
else{
$errors_array[] = 'The following article is invalid: "'.$_GET['article'].'"';
}
}
?>
<html>
<head>
<title>Teszt</title>
.......
<style type="text/css">
.red {
color:red;
}
</style>
<head>
<body>
<div id="page">
<div>
<?php
require_once('fejlec.php');
?>
</div>
<div id="content">
<?php
if(!empty($errors_array)){
echo '<div class="red">', implode('<br />', $errors_array), '</div>';
}
if(empty($page_to_show)){
foreach($articles_array as $article){
$article_path = $articles_directory.'/'.$article.'.php';
if( file_exists($article_path) ){
echo file_get_contents($article_path);
}
else{
echo '<div class="red">"'.$article.'" doesn\'t exist!</div>';
}
}
}
else{
$article_path = $articles_directory.'/'.$page_to_show.'.php';
echo file_get_contents($article_path);
}
?>
</div>
<div>
<?php
require_once('lablec.php');
?>
</div>
</div>
</body>
</html>Mivel őszintén szólva még egy szövegszerkesztőbe sem dobáltam bele, csak itt a PH!-s textarea-ba pötyögtem be, ezért ne tépjétek le a tökömet, ha szintaktikai hibát tartalmaz, innen úgy tűnt, hogy nincs benne.
Meg hát ezzel nem akartam senkinek programozási tanácsot adni, sőt, mert ez nem egy szép módszer.
Csak a gyorscélnak megfelel, legalábbis ez a fenti ilyen ötperces módszer.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9375 üzenetére
A Yii nem valami generált hash alapján azonosítja az "aktív" sessiont?
Itt írtam le Drupallal kapcsolatban, hogy valaki hogyan tudja elérni a Drupal által indított sessiont saját kódból, a Drupal "irányításán kívül": [link]. A Drupal itt látható, hogy generálja a hash-t a session_name-hez: [link]. Többek közt a $cookie_domain változó alapján.Nem nagyon látom át a problémádat, de nem lehet egy ilyenhez hasonló forrása a dolognak?
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9378 üzenetére
Ja, hogy te azt alapnak vetted, hogy ha elso.example.com-on indítasz egy sessiont, beállítasz néhány session változót, átirányítasz elso.example.com-ról masodik.example.com-ra, akkor masodik.example.com látni fogja az elso.example.com oldalon beállított session változókat, vagy mi?
Ez milyen biztonsági rés lenne?
Már a feltételezést sem értem.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Peter Kiss #9380 üzenetére
Mondjuk akkor már azt is lehetne, hogy közös adatbázishoz férnek hozzá mind a két domain alól. Igaz, jó lenne tudni a feladatot is, hogy mihez kell.
Sk8erPeter
-
Sk8erPeter
nagyúr
"van pár divem, amit nem szeretném ha egymás felé pakolna a mobil böngésző"
Hogy mi van? Most találjuk ki, milyen stílust állítottál be ezekre a divekre?
Pakold már fel jsbinre, vagy valami...
Vagy legalább mutass egy nyomorult screenshotot, fotót, vagy bármit, hogyan is néz ki az a misztikus valami...===
(#9383) biker : nem "elhasal", hanem más munkamenet érvényes a másik előtaggal rendelkező domainre. Jól is van ez így!
===
(#9384) Speeedfire : ja, hogyne, és az egy osztott szerveren a hosting cégeknél ilyen alapon minden oldal hozzáférne a másik oldal sessionjéhez, milyen mókás lenne, nem?!
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz spammer #9387 üzenetére
Kicsit összeesett a kódod.
Önmagában ez a parser elég jónak és könnyen használhatónak tűnik, a Te feladatodhoz azonban szerintem ennek a használata erős túlzás - igazából feleslegesen erőforrásigényes, hogy egy viszonylag hosszú fájlból (cikkek.html) kotorja ki a megfelelő id-vel rendelkező div-et.
Ezért írtam a példát, amit mutattam - ott széjjel vannak bontva külön fájlokra a cikkek, tehát ha egyetlen cikket akarsz megjeleníteni, akkor egyetlen fájl tartalmát csak egy az egyben behúzza, és készen is van. Ez pedig végigkotorja a cikkek.html-t, beparse-olja, jó nagy meló árán keresgél benne egy valid, adott id-vel ellátott DOM-elemet, majd végül azt jeleníti meg. Lehet, hogy ennyi cikknél még nem annyira vészes a futási ideje, sőt, 8 cikknél valószínűleg nem is olyan nagyon veszed észre a különbséget, mert alapvetően normális esetben gyorsan dolgozik a PHP, de gondolj bele, ez milyen durván erőforrásigényes lenne mondjuk 100 cikknél.Alapvetően nem ilyenekre való ez a parser. Inkább olyasmire lehet gondolni, ami a példában is van: pl. van egy külső oldal, ami itt épp a Google oldala, aminek a forráskódjából bizonyos részeket egy az egyben be akarsz húzni, és azt szerveroldalon megtenni, amire ilyen módon van lehetőség. A példában behúzza a google.com tartalmát, majd előkotorja belőle a képeket és a linkeket. Ilyet saját, "belső" oldalon megjátszani totálisan pazarlás, amikor külön-külön is lehetnének a fájljaid.
A másik az, hogy ha a felhasználó úgy nyitja meg az oldalt, hogy a $_GET['page'] nincs beállítva (tehát http://example.com/index.php?page=XYZ HELYETT http://example.com), akkor amennyiben a PHP hibajelzése magasabbra van állítva, kapsz egy notice-t, hogy felhasználsz olyan változót, ami nincs beállítva.
A switch blokk előtt ezért érdemes lenne legalább egy vizsgálatot elvégezned:$page_to_display = '';
if( isset($_GET['page']) ){
$page_to_display = $_GET['page'];
}
switch($page_to_display){
.............
}Sk8erPeter
-
Sk8erPeter
nagyúr
válasz spammer #9390 üzenetére
"Meg akkor alapból mindegyiket egyesével be kell töltögetnie a php-nek, hogy a főoldalon mindegyik egymás alatt megjelenjen."
Így viszont minden egyes különálló cikk miatt végig kell bogarásznia a teljes cikkek.html-t, azt beparse-olni, keresgélni a megfelelő id-val ellátott elemet, stb., tehát amiket már korábban írtam. Az meg ezerszer erőforrás-igényesebb, mint egy ciklussal egyszerűen kiíratni mondjuk 8 különálló HTML-fájl tartalmát.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
"megj2: jah, és a $this az itt mire vonatkozik?"
Na hát ez az.
Anélkül, hogy ismerném a CakePHP-t:
Ez a function nálad nem egy különálló, "globális" függvény, nem az a para? Ez a $this az objektum aktuális példányára szokott vonatkozni, az általad berakott kódból viszont nem az derül ki, hogy mondjuk ez egy osztály, pedig annak kéne lennie.Példa, hogyan működne a $this:
class Tokmindegy {
private $SG = 'blabla';
public function getSG(){
return $this->SG;
}
}
$valami = new Tokmindegy();
echo $valami->getSG();
// KIMENET: 'blabla'=======
Szerk.:
hát hallod, gratulálok a CakePHP magyar oldalának elkészítőinek:
Ezzel aztán rohadtul meggyőztek, hogy válasszam a PHP-t, hogy egy ordas buzinagy PHP-hibát dobnak az arcomba...[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #9393 üzenetére
"hogy válasszam a PHP-t"
akarom mondani: hogy válasszam a CakePHP-t...Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9397 üzenetére
"Jobb lenne, ha nem jelezne ki semmit sem?"
Igen, éles oldalon jobb lenne, ha nem jelezne ki semmit sem, hanem naplózva lenne mindenféle hiba...Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9399 üzenetére
Ja, hát az a normális. Alapból egy ilyen keretrendszer el kellene, hogy nyomja az ilyen hibaüzeneteket, vagy legalábbis kellene, hogy legyen egy admin-felület, ahol van fejlesztői mód meg éles mód beállítására lehetőség.
(#9400) Jim-Y : akkor minek használod, ha szar, és ha nem muszáj?
Sk8erPeter
-
Sk8erPeter
nagyúr
Hát így, hogy nem raksz fel komplett kódot, más is nehezen fog tudni segíteni sztem.
Így azt sem lehet tudni, nálad a $this->SG egyáltalán be van-e állítva, és kellene-e működnie a $this->SG->save($newSG)-nek. Kicsit kevés az infó.
De olvasgasd a doksit: [link].
Szerintem azért ezt rendesen letesztelték, úgyhogy "a hiba az Ön készülékében van".Hibajelzést egyébként fejlesztéskor érdemes a legszigorúbbra állítani, hogy hiba esetén nagyobb eséllyel tudd, ha van valami elcseszett kódod. Ettől függetlenül persze jól kell tudni használni a rendelkezésre álló eszközöket.
Sk8erPeter
-
Sk8erPeter
nagyúr
Bárcsak teljesen ki lenne már gyomlálva a PHP-ból ez a mysql_query-s szarakodás, és mindenki legalább PDO-t vagy valami másik normális adatbáziskezelő wrappert használna.
Lásd cucka vonatkozó cikkét: [link], idézem: "Szép lassan kivezetik a mysql extension támogatását. Hurrá! [link]".
Én is azt mondom, hogy hurrá!Másik probléma:
soha ne használj teljes URL-t, ha saját honlapodon lévő fájlokra hivatkozol (tehát ne legyen az elején, hogy http://localhost.....), hanem az adott feldolgozó fájlhoz képest inkább relatíve hivatkozz a fájlodra. Példa az esetedben: '/project/get_offers.php'.
Ezzel azt éred el, hogy a kódod egyből költöztethető lesz, más szerverre való felrakásnál nem kell majd mindenhol átírogatni.A duplikált adattal kapcsolatban:
nézd meg a mysql_fetch_array() doksiját.
Nézd meg tüzetesen a függvény deklarációját:
array mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] )
A $result_type-ra koncentrálj, aztán olvasd el a MYSQL_BOTH-ra vonatkozó részt, meg nézd meg a példát:Example #4 mysql_fetch_array() with MYSQL_BOTH
<?php
mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db("mydb");
$result = mysql_query("SELECT id, name FROM mytable");
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Name: %s", $row[0], $row["name"]);
}Mint láthatod, az eredményt számmal indexelve és asszociatív index-szel is eléred.
Te meg szépen foreach-csel simán végigmész az eredménytömb adott során, kiíratod a számmal való indexen elérhető változót, meg az asszociatív indexeléssel elérhetőt is.Módosítsd megfelelően a kódodat, példa:
foreach($row as &$result){
echo $result['col1'], '<br />';
}=====================
(#9408) mobal : teljesen egyetértek Speeedfire-rel. Ez már csak csapatmunka szempontjából is szebb, jobb megoldás lehet, mert így mindenki szétbontva tudja adott esetben javítgatni a kódokat, nem szóltok bele egymás munkájába.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Szívesen!
Tele von Zsinór imént belinkelt cikke tök jónak tűnik, így abból tanulhatsz, meg persze a hivatalos doksiból. Szerintem elég jól érthető példák vannak fent.Csak egy a sok közül, hogy lásd a gyakorlatban:
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();prepared statement, aminek használatával elkerülhetők a mysql_real_escape_string()-es bohóckodások. Nagyon kényelmes használni, mindenképp ajánlom, hogy még az elején térj át erre!
Pont ez a gond, hogy a net tele van fostalicska, égetnivaló tutorialocskákkal, ahol a leggyengébb praktikákat mutatják be.Én is átestem a mysql_query-s korszakon, és azon is, hogy sok gagyi tutorialnak hittem, aztán később, amikor volt némi fogalmam az egészről, már kapartam az arcom a régi kódjaimtól.
Abszolúte megértem, hogy kezdőként ezt alkalmaztad, tényleg tele van a net ilyenekkel.
De ha utólagos tapasztalatra kíváncsi vagy: a mysql_query-s szarakodást meg inkább nem kívánom újra átélni. Ezért is javasolnám, hogy már az elején szokj hozzá a PDO használatához. Ez eleve terel egy jó gondolkodásmód felé: objektumorientált kódot használsz, és könnyebben megérted majd az adatbázis-wrapper osztályok működését, valamint felkészülsz a használatával arra az esetre is, ha mondjuk MySQL helyett valami más adatbázist szeretnél használni, mert más adatbázis-motorokkal is működőképes a PDO.Sk8erPeter
-
Sk8erPeter
nagyúr
"a szurest vegzo sajnos mar az elso if-nel elhasal, mintha nem is tomb lenne."
Azt nem értem, hogy a $_GET vizsgálgatása egyáltalán most hogy kapcsolódik a SOAP-kódhoz? Úgy értem, most belinkelted a SOAP szerveroldali és kliensoldali kódját egyaránt, de ha azt mondod, hogy az az egyetlen kód, hogy ennél hasal el:
$filter = array();
if (isset($_GET["csaladinev"]) && mb_strlen($_GET["csaladinev"]) > 0)
$filter["csaladinev"] = $_GET["csaladinev"];
if (isset($_GET["keresztnev"]) && mb_strlen($_GET["keresztnev"]) > 0)
$filter["keresztnev"] = $_GET["keresztnev"];
if (isset($_GET["szak"]) && mb_strlen($_GET["szak"]) > 0)
$filter["szak"] = $_GET["szak"];
... akkor először arra kéne rájönnöd, mi van egyáltalán a $_GET-ben...
Legalábbis nekem úgy jött le a hsz.-edből, hogy a fent "idézett" kódrészlettel van problémád.
Nem? Szóval akkor az alapján ez nem SOAP-os kérdés lenne, hanem egyéb. Engem mindenesetre összezavartál.Ki kéne íratnod a $_GET-et egy var_export()-tal, hogy mi van benne, amikor elküldöd.
Vagy lehet, hogy nem pontosan értem a kérdésedet.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Ja, itt még jó, hogy előtte beraktam egy példakódot a php.net-re, aztán már én is követtem a kódodat, és végül én is rosszul használtam...
Szóval bocs, az a foreach ciklussal való példa abszolúte hülyeség volt a részemről, így kellett volna:while ($row = mysql_fetch_assoc($res)) {
echo $row['col1'], '<br />'; // echo-nál működik a vesszővel való elválasztás, így nem kell összefűzni!
}===
(#9427) Jim-Y :
"Illetve kerestem, de nem találtam olyan változót ami megmondaná, hogy a kódhoz csatlakozó kliensnek mi az IP címe"$_SERVER['REMOTE_ADDR'] idézve a php.netről:
"The IP address from which the user is viewing the current page."[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
alert(this.email);
Ez így kevéssé valószínű, hogy működik. A this-ben így sztem nem lesz email "változó".Mondjuk ilyesmi megoldással működhetne:
peldafeldolgozofajl.php
<?php
$returnValues = array();
$returnValues['status'] = TRUE;
$returnValues['emails'] = array(
'asd@example.com',
'blabla@example.com',
'loremipsum@example.com',
);
echo json_encode($returnValues);peldaajax.php
.......
$.ajax({
url: "peldafeldolgozofajl.php",
type: "POST",
data: {blabla : 'asdasd'},
dataType: "json",
success: function(data, textStatus, jqXHR) {
if(!data.status){
alert('anyád!');
return;
}
// eddig OK
$.each(data.emails, function(index, value) {
alert(index + ': ' + value);
});
// .........................
},
error: function(jqXHR, textStatus, errorThrown){
alert('para van! textStatus: '+textStatus);
// .........................
}
});Sk8erPeter
-
-
Sk8erPeter
nagyúr
Bocs, most egy darabig nem voltam, úgyhogy csak most tudtam volna megint megnézni a kódodat, de azóta már eltávolítottad pastebinről. Ezek szerint megoldódott? Ha igen, le tudod írni, mi volt a probléma okozója, hátha másnak is jól jön?
Egyébként ha szívnál SOAP-pal, akkor belinkelem, hátha neked is jól jön, itt én már leírtam egy korábbi SOAP-ásom történetét :
http://stackoverflow.com/questions/6986350/generating-wsdl-with-nusoap-return-struct-with-various-types-int-string-arr
Itt egy C#-os klienssel szerettem volna csatlakozni egy PHP-vel generált WSDL-en "keresztül" egy SOAP-szerverhez.
A lényeg igazából az volt, hogy struct-ok tömbjét adjam vissza a C#-os kliensnek, ami még tartalmaz egy int típusú id azonosítót, meg egy string típusú name változót is. Szóval ilyen módon már elég komplex lett, de szerencsére végül sikerült megoldani még NuSOAP-pal is. Az ilyesmi PHP-ben sajnos elég macerás a gyenge típusosság miatt.========
Szerk.: sorry, hogy nem egybe írtam a válaszokat, de úgy írogattam, ahogy épp olvastam a hsz.-eket, meg amúgy is túl hosszú lett volna ömlesztve.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
"ha en asszociativ tombot adok at parameterul, akkor azt struct tipusunak kell definialni a serveren, valamint az indexeket egyesevel meg kell adni neki tipussal egyutt"
Jaja, persze, a példában, amit korábban linkeltem, szintén ilyen van, ott konkrétan a Stuffs egy struct típus, az id és name elemekkel, és mindez NuSOAP-pal deklarálva a következő:$server->wsdl->addComplexType(
// name
'Stuffs',
// typeClass (complexType|simpleType|attribute)
'complexType',
// phpType: currently supported are array and struct (php assoc array)
'struct',
// compositor (all|sequence|choice)
'all',
// restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
'',
// elements = array ( name = array(name=>'',type=>'') )
array(
'id' => array(
'name' => 'id',
'type' => 'xsd:int'
),
'name' => array(
'name' => 'name',
'type' => 'xsd:string'
)
)
);De mindez még nálam nem volt elég, mert ezeknek a struct-oknak a tömbjét szerettem volna visszaadni (tehát a Stuffs struct-okból álló tömböt, melynek a neve itt StuffsArray):
$server->wsdl->addComplexType(
// name
'StuffsArray',
// typeClass (complexType|simpleType|attribute)
'complexType',
// phpType: currently supported are array and struct (php assoc array)
'array',
// compositor (all|sequence|choice)
'',
// restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
'SOAP-ENC:Array',
// elements = array ( name = array(name=>'',type=>'') )
array(),
// attrs
array(
array(
'ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'tns:Stuffs[]'
)
),
// arrayType: namespace:name (http://www.w3.org/2001/XMLSchema:string)
'tns:Stuffs'
);Aztán még annyival bonyolítottam a dolgot, hogy a kliens kérésére visszaadott válasz szintén egy struct, ami tartalmazza a válaszkódot (responseCode) és a válaszként szánt üzenetet (responseMessage), amivel jelezhető a kommunikáció állapota (pl. hiba vagy épp a siker), ezenkívül tartalmazza az előbb említett StuffsArray-t is, ami hiba esetén NULL, siker esetén az említett struct-ok tömbje.
Ez kódban így nézett ki:$server->wsdl->addComplexType(
// name
'ResponseObject',
// typeClass (complexType|simpleType|attribute)
'complexType',
// phpType: currently supported are array and struct (php assoc array)
'struct',
// compositor (all|sequence|choice)
'all',
// restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
'',
// elements = array ( name = array(name=>'',type=>'') )
array
(
'responseCode' => array( 'type' => 'xsd:int'),
'responseMessage' => array( 'type' => 'xsd:string'),
'stuffArray' => array( 'type' => 'tns:StuffsArray'
// DON'T UNCOMMENT THE FOLLOWING COMMENTED LINES, BECAUSE THIS WAY IT DOESN'T WORK!!! - Left it in the code not to forget it....
// ,
// 'minOccurs' => '0',
// 'maxOccurs' => 'unbounded'
)
)
);Aztán még az ehhez tartozó getStuffs függvény is látható a kódban.
Elég bonyolult egy ilyen komplex WSDL-t jól legenerálni NuSOAP-pal, de végül is nem lehetetlen (csak jópár óra debuggolás).Sk8erPeter
-
Sk8erPeter
nagyúr
Biztos van valami "szabályszerűség" arra, hogy konkrétan hol is csapja le a szöveget.
Pl. nagyon nem mindegy, hogy a karakterkódolások nem térnek-e el teljesen (legyen következetes - UTF-8 ajánlott mindenhova, a fájlok karakterkódolására és az adattáblákéra is), az ékezeteknél csapja-e le, vagy épp ott, ahol mondjuk egy HTML-tag kezdődne.
Ezeket figyeld meg, és írd le.
Illessz be valami Lorem Ipsum szöveget (még jobb: [link]).Sk8erPeter
-
Sk8erPeter
nagyúr
Pont most csináltam meg én is.
Amúgy nem kell agyonescape-elni:$teststring = "valamiszó,'[itt tetszőleges hosszúságú szöveg jöhet]'";
$pattern = "/(.*),'(.*)'/";
$preg_match = preg_match($pattern, $teststring, $matches);
var_export($matches);Eredménye:
$matches:
array (
0 => 'valamiszó,\'[itt tetszőleges hosszúságú szöveg jöhet]\'',
1 => 'valamiszó',
2 => '[itt tetszőleges hosszúságú szöveg jöhet]',
)Ja, és amúgy az aposztrófra gondolsz. De az angolul sem tick: [link].
Még egy: nem tudom, nálad mi garantálja, hogy a $userstring ne tartalmazzon épp vesszőt, majd aposztrófot.
Ez a stringrobbantgatás nem túl biztonságos módszer, nem tudom, mihez kell neked.
De akkor már lehetne ennél "biztosabb" elválasztást betenni, aminél a lehető legkisebb az esélye, hogy egy bizonyos bemenet elrontja, amit vizsgálgatsz.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Hát ez nagyon gáz, ha így van nyilvántartva.
Jól megbonyolítja az életed, pedig lehetne szépen, közvetlenül adatbázisban keresni, szűkíteni a találatokat (mondjuk így is lehet, de...), így viszont csak gányolás.Egyébként ha ezt készen kaptad, valaki más gányolta össze, akkor is szétbonthatod, érdemes is. Ha pedig Te csináltad, akkor jó kis tanulópénz volt ez most neked, hogy hogyan NEM szabad.
Sejtettem egyébként, hogy ilyesmiről van szó, mert sokan követik el eleinte azt a hibát, hogy összeb@sszák egy stringbe, aztán úgy gondolják, hogy jó lesz az vidékre, ha majd valami karakter mentén elválasztják.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9489 üzenetére
Na, látom Tele von Zsinór közben megírta a választ, nagyon jól és tömören leírta. Hát az eléggé gány lenne, ha az adott bejegyzéshez tartozó tageket mindenhol összecseszve egy stringbe tárolnánk el...
Ez a módszer nagyon sok szempontból rossz, de legfőképpen azért, mert így nem lehet normálisan és optimálisan keresgélni az adatok közt (ami itt most épp a taglista), pedig az adatbázis ezt lehetővé tenné.Csak példaként nézd meg a Drupal 7 működését (de más példát is lehetne említeni), ott már a core is támogatja az Article content type-hoz tagek eltárolását - a `taxonomy_term_data` táblában vannak tárolva a konkrét tagek, azonosítóval, névvel, egyebekkel ellátva (tehát egy tag egy Taxonomy Term), a `taxonomy_index` táblában pedig az azonosítók összekapcsolása van, ahogy illik: egy node azonosítóját összekapcsolja egy taxonomy term (jelen esetben egy tag) azonosítójával, így lehet tudni, hogy az az adott node-hoz tartozik.
A `taxonomy_vocabulary` pedig a szótárakat gyűjti, van pl. egy Tags nevű "szótár", ebbe tartozik az összes tag, még ennek az azonosítójával is össze van kapcsolva.
Így aztán nagyon rugalmasan lehet keresgélni a tagek között.Ez így jól is van megoldva - inkább szülessen több bejegyzés néhány adattáblában, mint hogy rossz megoldásokat alkalmazzunk.
(#9493) : akkor ideje megbarátkozni velük.
===========
(#9490) Jim-Y : ezzel az a nagy baj, hogy adott esetben túl sokáig tarthat a keresés, és normálisan szűrni köztük csak gányolással lehet.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Példa:
- legegyszerűbb, ha létrehozol egy .hidden class-t CSS-ben így:.hidden {
display:none;
}aztán a PHP-kód (csak egy példa a sok lehetséges közül):
<?php
$classes = array();
$classes[] = 'egyikosztaly';
$classes[] = 'masikosztaly';
if( $el_akarod_rejteni ){
$classes[] = 'hidden';
}
?>
<div class="<?php echo implode(" ", $classes);?>">
<p>Lorem ipsum..................</p>
</div>Ergo szóközzel elválasztva lesznek az osztályok, ha kell, hozzácsap egy hidden class-t is.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9497 üzenetére
Legfeljebb annyiban "egyszerűbb", hogy ha ránézel phpMyAdminban a tábla adott sorára, akkor egyből láthatod, milyen tagek tartoznak az adott id-hoz...
Amúgy viszont gáz megoldás.
A megfelelő táblastruktúrát és query-t viszont csak egyszer kell jól megírni, de az sem túl sok idő, ha elsőre nem látod át, le kell rajzolni magadnak egy papírra, hogy hogy is néz ki, és akkor máris érthetőbb lesz, az alapján a query-t megírni is könnyebb. De tényleg, ha olykor nem megy "fejből" vagy monitoron nézegetve a dolgokat, akkor elő kell venni egy papírt, és írogatni-rajzolgatni, nem szégyen az, sokszor gyorsabban eljutsz a megoldáshoz.Attól még, mert két lehetséges megoldásból mindkettő működik, nem biztos, hogy mindkettő jó is.
===
(#9498) Jim-Y : most előbb írtam egy leegyszerűsített példát arra az esetre, ha egyből úgy szeretnéd megjeleníteni a divet betöltéskor, hogy el legyen rejtve vagy sem. Abból nem tudom, mi nem volt világos (nem mondtad, hogy azt értetted-e vagy sem, ha nem, akkor mit nem).
Ha meg már azután szeretnél változtatni a megjelenítésen, miután az oldal betöltődött, akkor marad a kliensoldali programozás (JS-sel eltünteted/megjeleníted, ha ehhez szükséged van szerveroldali változó értékére, akkor AJAX-ozol egyet), vagy az oldal újrafrissítésével történő megoldás.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9500 üzenetére
Pedig az előbb írtam le, hogy miért nem jó...
Utána még konkrét példával is magyaráztam, mi lenne az optimális megoldás, és miért is szebb.A dbForge Studio-val egyébként a táblaösszekapcsolásokat nagyon egyszerű megcsinálni, legenerálja neked a query-t. Ha épp nincs kedvem/agyam gondolkodni, hogy pontosan hogyan is kell megírni a query-t ahhoz, hogy a megfelelő táblákat összekapcsoljam, vagy csak időt akarok spórolni, akkor előveszem ezt a progit, és kényelmesen összekattintgatom vele, amit akarok.
Sk8erPeter
-
Sk8erPeter
nagyúr
if( $user=='guest' ){
$hidden[] = 'hidden';
$shown[] = 'shown';
} else {
$hidden[] = 'shown';
$shown[] = 'hidden';
}Ennek aztán sok értelme van.
Pont azért mutattam a $classes-t, mert ott csak annyi van, hogy az amúgy is hozzáadandó osztályokat pakolod bele.De ugye nem csak megjelenítésben akarsz elrejteni egy tartalmat, ha a vendégnek nincs joga megtekinteni őket?
Így ugye vágod, hogy a forráskódban ugyanúgy benne lesznek a tartalmak, tehát bárki megnézheti?Sk8erPeter
-
Sk8erPeter
nagyúr
Hát vaze, akkor van egy $classes_auth tömb, meg egy $classes_content tömb, és azokba gyűjtöd a saját osztályokat...
Amit írtál, annak viszont úgy semmi értelme. A hidden legyen shown?Inkább hadd mondjak egy egyszerűbb megoldást, amivel nem is látszik a forráskódban a tartalmad........
<?php
// ........................
$classes = array();
$content = '';
if($user=='guest'){
$content = '<p>Guest users have no permission to enter this page! Please log in or register!</p>';
$classes[] = 'guest-mode';
}
else{
$content = '<p>Lorem ipsum...................................</p>';
$classes[] = 'logged-in';
}
?>
<div id="content" class="<?php echo implode(" ", $classes);?>">
<!-- content here -->
<?php echo $content; ?>
</div>Sk8erPeter
-
Sk8erPeter
nagyúr
válasz zsolty28 #9509 üzenetére
Nézd meg Notepad++-szal, hogy milyen karakterkódolásúak a fájlok, és hogy azok konzisztensek-e. Hogy hogyan nézd meg a karakterkódolást, arról keresővel tuti találsz itt a topicban is segítséget, de elég egyértelmű a progiban.
Amúgy ja, legjobb lenne UTF-8-ra konvertálni mindent, kiadni egy ilyen headert, ilyen meta tageket is felhasználni a HTML-kódban, a levélküldésnél is ehhez ragaszkodni, szóval hogy ez mindenhol konzisztensen egyezzen.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz zsolty28 #9514 üzenetére
Ne csak "átkapcsold", hanem a konvertálásra menj rá.
Amúgy az nem segít, ha ilyeneket írsz, hogy "hibát ír", de nem osztod meg, hogy konkrétan mit...(#9519) :
"Ahogy látom HTML formátum, mert aki küldi nekem az üzit, annak belinkelve jelenik meg az email címe."
Annak semmi köze ehhez. Attól még lehet plain text, hogy kattintható formában jelenik meg az e-mail-cím, az a levelezőklienstől függ.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz zsolty28 #9526 üzenetére
"Ha kiválasztom a "Convert ot UTF-8"-at"
Akkor meg is van a hiba."Convert ot UTF-8 without BOM" a jó választás.
Szerk.: a miértekről itt: [link]
Lényeg, hogy kidob a fájl elejére olyan karaktert, ami itt neked nem jó. Lesz egy outputod ott, ahol nem kellene.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz zsolty28 #9528 üzenetére
Nem látjuk a fájljaidat, nem tudjuk, minden fájl karakterkódolása egyezik-e, nem adsz-e ki a karakterkódolás megváltoztatásáért felelős headert (nincs-e ilyen a PHP-kódban), nem kapcsoltad-e át korábban Notepad++-ban a sima ANSI-kódolásra a konvertálás helyett, és így tovább... Ilyen kevés információ birtokában nagyon nehéz segíteni.
Sk8erPeter
-
Sk8erPeter
nagyúr
Ez jó, pontosan ugyanaz a problémád, mint az előtted szólónak.
Pont ugyanúgy nehéz a fájlok hiányában nyilatkozni, ha már a korábban említetteket csekkoltad.(#9530) zsolty28 : akkor az is lehet a probléma forrása.
Ha feltöltenéd valami tárhelyre, akkor lehet, hogy meg tudnánk javítani neked szabadidőben a karakterkódolást.Sk8erPeter
-
Sk8erPeter
nagyúr
Hát ha Te sem férsz hozzá az említett fájlokhoz, akkor úgy igen nehéz lesz segíteni annak, akinél a probléma előfordul. Ezt mondjátok meg neki is, hogy látatlanban nem fogjátok tudni megoldani.
Egyébként én alapvetően kerülném az ilyen sima mail() függvényes szarakodást, mert egy csomó hibába lehet belefutni, amit aztán lehet debuggolni, miközben ezt mások már megoldották a PHPMailernél (innen kell letölteni a PHP5-től felfelé érvényes verziót [rossz a link ehhez a hivatalos honlapon (a 4-es PHP-hoz készült változatra mutat), milyen gáz, mindjárt írok nekik emiatt, hogy javítsák már ki, mert ötezer éve így van ]: [link]) vagy más levelezésre szolgáló PHP-osztálynál (Swift Mailer, stb.).
Ezzel normálisan megoldott a HTML-tartalmú levelek küldése, a csatolmányküldés, és így tovább. Nagy eséllyel a karakterkódolást sem cseszi el, amennyiben az stimmel mindenhol - persze ha ez valahol alaposan el van rontva, akkor csodákra ezek az osztályok sem képesek.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Nincs mit!
Még annyit hozzáteszek, hogy localhoston sokan szívnak azzal, hogy ugye nem megy a levélküldés SMTP-szerver híján.
Én ennek elkerülésére egyszerűen Gmailes SMTP-szervert veszek igénybe, ha már van náluk accountom, szerintem az a legegyszerűbb.
Erre is van példa a PHPMailer oldalán:Advanced Example using Gmail (for PHPMailer v5.0.0 and up)
Persze más SMTP-szervert is beállíthatsz hasonló módon, a lényeg, hogy a kód könnyen költöztethető legyen.
Sk8erPeter
-
Sk8erPeter
nagyúr
Hát nem vágom pontosan, de szerintem fura, hogy nálad
Content-Transfer-Encoding: 7bit
van beállítva, miközben az UTF-8 épp, hogy 8 bites: "8-bit Unicode Transformation Format"
Most így hirtelen csak ezt szúrtam ki, aztán lehet, hogy valami tök más.Sk8erPeter
-
Sk8erPeter
nagyúr
Épp az előbb írtad, hogy az ékezetes karakter HTML-változata egy az egyben kiíródott, szóval az nem biztos, hogy jó lesz.
Egy-két érdekesebb hozzászólás a php.net-ről, ezeket mindenképp érdemes megpróbálni, itt főleg a base64_encode() függvény és egyéb megfelelő hozzáfűzések érdekesek:
[link]
[link]
[link]Na, de pont ezek miatt a szopások miatt javasoltam inkább a kész levelezőosztályok használatát.
Ha most ismerkedsz vele először, akkor is max. kb. 30 perc beállítgatni, ismerkedni vele, tesztelni, cserébe lesz egy könnyebben újrafelhasználható megoldásod.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz vakondka #9546 üzenetére
Nekem így elsőre valami web service jutna eszembe, pl. SOAP vagy hasonló - a fogadó oldalon van egy SOAP server, a kliens ennek küldi a megfelelő adatokat a megfelelő metódusok használatával.
De itt is meg kell oldani az authentikációt, meg lehet esetleg korlátozni a portot is, hova kapcsolódjon, stb., tehát a biztonságra itt is ügyelni kell (bár igaz, hogy egyszerűbb lenne megkérni a fogadó oldalt, hogy oldják meg, hogy hadd kapcsolódjatok kívülről az adatbázishoz, ne csak localhoston lehessen).
Szívás PHP-vel a SOAP, de végül is megoldható, pont nemrég beszélgettünk a SOAP használatáról itt a topicban.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #9560 üzenetére
^\+\d{2}-\d{2}-\d{3}-\d{4}$
Tesztelheted itt:
Regex Tester OnlineSk8erPeter
Új hozzászólás Aktív témák
- EAFC 24
- Tőzsde és gazdaság
- iPhone topik
- BMW topik
- Témázgatunk, témázgatunk!? ... avagy mutasd az Android homescreened!
- nVidia tulajok OFF topikja
- Musk betiltja az iPhone-okat a Teslánál és az X-nél, ha ezt meglépi az Apple
- LEGO klub
- Nők, nőügyek (18+)
- Kínai, és egyéb olcsó órák topikja
- További aktív témák...
- Lenovo ThinkPad T470s, I7-6600U, 8GB RAM, FHD, 2 év garancia, áfás számla! (43)
- Samsung Galaxy S23 Ultra 1TB + 12GB RAM Gyári független (Phantom Black) SM-S918 + 24 hó garancia
- Samsung Galaxy S23 Ultra 1TB + 12GB RAM Gyári független (Phantom Black) SM-S918 + 24 hó garancia
- LG 65" B3 OLED 4K HDR SMART 120HZ GAMING TV
- ThinkPad L380 fém fedlap - 13.3", I5-8350, 16 ddr4/ 512 NVMe, ujjl.olvasó, type-c +SZLA +GAR!
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen