- Asztrofotózás
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- AMD Navi Radeon™ RX 6xxx sorozat
- Bluetooth hangszórók
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Autós kamerák
- Amlogic S905, S912 processzoros készülékek
- Itt vannak az ASUS legszerényebb NVIDIA Blackwell architektúrás VGA-i
- Vezeték nélküli fülhallgatók
- Gaming notebook topik
Új hozzászólás Aktív témák
-
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
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.
-
-
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
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." -
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. -
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
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.
-
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
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
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
nagyúr
válasz
Sk8erPeter #9393 üzenetére
"hogy válasszam a PHP-t"
akarom mondani: hogy válasszam a CakePHP-t... -
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... -
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. -
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
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
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
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
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
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
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
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
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
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
nagyúr
válasz
negyedes #9356 üzenetére
fordfairlane igazából kb. pontosan ezt írta le, hogy itt ne legyen undefined index:
if(isset($_SESSION['valid_user']) && $_SESSION['valid_user'] == true){
include('fejlec_be.php');
}
else{
.............
}de persze ahhoz, hogy egyáltalán legyen bejelentkezett állapot, neked kell beállítanod a $_SESSION['valid_user'] változót.
De ezt azért szebb lenne, ha inkább egy külön függvénybe raknád be, hátha ott még külön ellenőrzésekre is szükség lesz:function user_is_logged_in(){
// ..... ellenőrzöd, a felhasználó be van-e jelentkezve
// ha IGEN:
if( $bejelentkezve ......... ){
return TRUE;
}
// ha nincs bejelentkezve
return FALSE;
}
if( user_is_logged_in() ){
include('fejlec_be.php');
}
else{
include('fejlec.php');
}Szerk.:
Amúgy igen, fordfairlane ezt is jól írta:
"Ha nem csak az index.php oldal lesz, hanem érkezik mellé több fájl, akkor ezt a feltételvizsgálatot érdemes átrakni a fejlécbe." -
Sk8erPeter
nagyúr
válasz
fordfairlane #9345 üzenetére
Vagy csak egy jó RewriteRule.
-
Sk8erPeter
nagyúr
válasz
spammer #9342 üzenetére
Ez mitől PHP kérdés?
Egyébként kicsit homályos a kérdésed.
Most a linkkel oldalon belül szeretnél ugrabugrálni, vagy épp, hogy külső linket szeretnél meghatározni?
Ide felraktam neked mindkettőről példát:
http://jsbin.com/iliwac/1/edit#html,live -
Sk8erPeter
nagyúr
válasz
Speeedfire #9336 üzenetére
- Mila Kunis jóféle
- De nem ám.
Ember legyen a talpán, aki ezt érti. -
Sk8erPeter
nagyúr
Ha ilyen van, miért nem kapod elő a php.net leírását?
"For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error."
Az adatbázis-kapcsolati erőforrás-azonosítót adja vissza."The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data."
Ott a példa is:
// Perform Query
$result = mysql_query($query);
// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
// Use result
// Attempting to print $result won't allow access to information in the resource
// One of the mysql result functions must be used
// See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.
while ($row = mysql_fetch_assoc($result)) {
echo $row['firstname'];
echo $row['lastname'];
echo $row['address'];
echo $row['age'];
}=====
Nálad most csak egy sor lesz, ezért nem kell ciklus:
...
if(!empty($rows)){
$row = mysql_fetch_assoc($res);
echo 'The country code is the following: '.$row['country_code'];
}==============================================
(#9329) whited :nincs mit!
Amúgy csak szimpla i-vel Brian. -
Sk8erPeter
nagyúr
válasz
Speeedfire #9324 üzenetére
Nálam meg másnapos vasárnap van, úgyhogy eltartott egy darabig, amíg felfogtam ezt a regexpet.
Amúgy ez referenciának elég jó komment: [link]. Mondjuk nem minden modifier van benne, amit itt használsz ebben a példában. Az nekem kicsit fura, hogy ha nem illeszkedik a regexpre, akkor üres stringet adsz vissza, de végül is lehet, hogy ezzel ki lehet szűrni, ha mondjuk más típusú változót adsz át a fv.-nek, nem stringet, bár akkor nem vágom, miért nem futtat arra egy korábbi ellenőrzést. -
Sk8erPeter
nagyúr
válasz
Speeedfire #9322 üzenetére
Ha nem fájlnevek levágására fogod használni, akkor miért az a változó neve, hogy $filename, és az $ext változóba miért láthatóan fájlnév-kiterjesztést szeretnél belerakni?
De ami fontosabb: ha ezt pl. címek és ehhez hasonlók levágására akarod alkalmazni, akkor jó szarul fog működni, ahogy a címed akár egy pontot is fog tartalmazni...
Hadd mondjak gyorsan egy példát:Itt a címed:
$myTitle = 'L.orem ipsum dolor sit amet, consectetur adipiscing elit Maecenas nec odio eget magna malesuada vestibulum nec ut nunc';
echo levag($myTitle);Eredménye:
'L....orem ipsum dolor sit amet, consectetur adipiscing elit Maecenas nec odio eget magna malesuada vestibulum nec ut nunc'Biztos, hogy te ezt akartad? Nem hiszem.
Szerk.: egyébként gyorsan hozzáteszem, pontosan a fenti miatt fájlnevek levágására sem biztonságos ez a módszer, mivel semmi nem garantálja, hogy a kiterjesztés mondjuk ne legyen olyan hosszú, mint a fenti példában az "L." utáni rész - már ha előtte a megfelelő PHP-s fájlellenőrizgető függvényeken nem futtattad át, és ellenőrizted inkább azokkal a fájlnév-kiterjesztést.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9320 üzenetére
Akkor jó.
Amúgy fájlneveknél szerintem elég hülyén mutat a három pont a végén, ott inkább simán vágd le a megfelelő karakterhossznál, majd ellenőrizd, olyan néven nem létezik-e már ugyanilyen fájl, ha igen, akkor tegyél mögé egy alsóvonás+inkrementálódó indexet, azt' kész. -
Sk8erPeter
nagyúr
válasz
Speeedfire #9318 üzenetére
A függvényedet nem fejezted be, nincs vége, nem látni, aztán mivel térsz vissza.
Itt először a $filename-be beleteszed a kiterjesztés nélküli változatot, de aztán sehol nem vágod le ezt a részt. Gondolom úgy szeretnéd, hogy a kiterjesztés nélküli változatot levágod, aztán hozzápakolod az eredeti kiterjesztést.
Szóval a végén kéne még egy ilyen:
return ( mb_substr($filename, 0, $maxLength, 'UTF-8').$ext );Ha alapnak vesszük az UTF-8 karakterkódolást, akkor nagyon nem árt, ha odateszed, hogy stimmeljen a hossza, lásd ezt itt. (Tehát esetleg a $filename változóba belerakáshoz is oda kéne tenni.)
-
Sk8erPeter
nagyúr
válasz
Brown ügynök #9312 üzenetére
És a $route tömbnek honnan kéne jönnie?
Van egy ilyened: getApplicationRoutes(), ebben:
$routes = new Routes();
de ennek a visszaadott értéke elvész az éterben, mert nem azt írtad, hogy $this->routes = new Routes();.
Ezenkívül te utána a $route tömb (egyesszámban) értékeit akarod felhasználni, ami ki tudja, hol lenne beállítva, nem $this->routes változót, ami esetleg még tartalmazna is valamit. -
Sk8erPeter
nagyúr
válasz
Brown ügynök #9305 üzenetére
"átváltott ANSI-ba"
Magától? Ez fura, mert így még nem jártam Notepad++-szal, pedig sokszor használtam már karakterkódolás megváltoztatására.
Egyébként érdekes, hogy a Drupal core fájljait is ANSI-ban szokták írni, de Unix-sortörésekkel, legalábbis a Notepad++ ezt érzékeli, NetBeans meg sír, ha már ékezetes karaktereket tartalmazó kommenteket írok bele, mondván, nem helyes UTF-8-kódolású fájlom van - a NetBeans meg ugye defaultból UTF-8-cal dolgozik (persze BOM nélkül).
Szóval ha a NetBeans sír, akkor először konvertálom (! - nem pedig csak "átkapcsolom") UTF-8-ra, és onnantól már a NetBeans-nek is megfelelő, persze lehet, hogy ezt a konverziót NetBeans-ben is el lehetne végezni, ilyen opciót mondjuk még nem találtam (igaz, nem is olyan nagyon kerestem, csak egy rövid ideig).
Másik megoldás, hogy egyszerűen NetBeans-ben létrehozod a fájlt, az már eleve UTF-8 lesz, és ebbe belemásolod a tartalmat.
Vagy nem használsz ékezetes karaktereket egyáltalán.De utóbbi persze nyilván nem lehetőség, ha szükség van pl. magyar vagy más nyelvű, ékezetes karaktereket tartalmazó stringre, kommentre.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9288 üzenetére
Ja jó, akkor biztos az én felfogásom nehézkes...
-
Sk8erPeter
nagyúr
válasz
Brown ügynök #9285 üzenetére
Vagy empty()-vel, ahogy írtam.
(#9284) CSorBA : persze, hogy foglalkoznék. Nem szeretem, ha a kódom működése nem kiszámítható.
(#9283) Speeedfire: ha jobban tudod, minek kérdezed?
Egyébként nem magyaráztad el jobban semmivel. -
-
Sk8erPeter
nagyúr
Mondjuk az is igaz, hogy most nézem, Te előtte nyomatsz egy if ($_POST), ami miatt tulajdonképpen csekkolod, hogy egyáltalán valami $_POST érték be van-e állítva, de az előbb írtak attól még állnak (az empty()-vel ellenőrzés), mert pl. ha a júzer egy checkbox-ot nem választ ki, akkor abban az esetben nem is állítódik be a hozzá tartozó $_POST változó.
Szerk.: ne aggódj, ezzel én is így vagyok, meg kábé mindenki, aki fejleszti magát programozásból, én is fogom a fejem és pirulok a régi kódjaim láttán.
Szerk. 2.:
(#9277) Speeedfire:
én már onnantól kezdve nem értem, hogy nem látom, milyen globális függvényt írtál, és hol is hívod meg.
" $kategorianev->kategoria; sorra kiírja, hogy nincs az xyz controllerben $kategorianev változó, ami érthető mert én nem is raktam oda..."
Hogy mi?Nem a $kategorianev-en belül nem létezik a public $kategoria mondjuk?
Na mindegy, "dögöljek meg, ha ebből egy szót is értek".
-
Sk8erPeter
nagyúr
"Az isset elhagyható."
A hsz.-ed nagy részével egyetértek, de ezzel nem.
Ha ezt csinálod, és az oldal úgy töltődik be, hogy a felhasználó még nem küldte el a formot, akkor a következő kód hatására:
if (!($_POST["nev"])) print "Mégis hogy gondolod azt, hogy nem adsz meg nevet?<br />";
szépen kapsz egy notice-t:Notice: Undefined index: nev in ......... on line ........
Akkor már érdemes átereszteni egy empty()-n, ez elméletileg az ellenőrzéshez először végez egy isset()-et amúgy is, és ha ez hamis, egyből visszatér, tehát ezzel nem kapsz notice-t:
if (empty($_POST["nev"])) print "Mégis hogy gondolod azt, hogy nem adsz meg nevet?<br />";
-
Sk8erPeter
nagyúr
válasz
InfiniteReality #9260 üzenetére
Szívesen, örülök, hogy működött.
Az utóbbi kérdésről itt egy link:
http://stackoverflow.com/a/6472150/517705"After using session_destroy(), the session cookie is removed and the session is no longer stored on the server. The values in $_SESSION may still be available, but they will not be on the next page load."
A másik:
If you need to clear the values of $_SESSION, set the array equal to an empty array:
$_SESSION = array(); -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #9256 üzenetére
if(!headers_sent && !isset($_SESSION))
a gyors gépelés közben itt természetesen lemaradt a zárójel a headers_sent után, tehát így lenne jó:
if(!headers_sent() && !isset($_SESSION)) -
Sk8erPeter
nagyúr
válasz
InfiniteReality #9249 üzenetére
PazsitZ előttem már szépen elmondta, vannak alternatív módszerek annak elkerülésére, hogy több fájlban is kelljen sessionöket küldözgetni. Meg lehet template-ezni is, stb. Alapvetően a keretrendszerek, CMS-ek felhasználásakor nem kell ilyesmivel szívnod.
De hogy lehetséges megoldást mondjak arra is, amiről Te beszélsz, lehet ellenőrzéseket is végezni:
1.) headers_sent() függvény segítségével megtudhatod, a HTTP fejlécek el vannak-e már küldve - azt is meg lehet vele tudni, konkrétan hol.Ilyen módon nem használtam még, de ez működhet:
if(!headers_sent && !isset($_SESSION)){
session_start();
}2.) AJAX problémára:
a jQuery pl. beállít egy fejlécet az XMLHTTPRequest-kérésekre (lásd [link]), így a jQuery-s AJAX-függvények használata esetén ez is teljes biztonsággal ellenőrizhető (sokszor tesztelve, valóban működik):define('IS_AJAX', ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) );
if(IS_AJAX){
session_start();
}Valószínűleg más JS-library-k, frameworkök is beállítanak valami plusz headert, hogy konkrétan mit, az könnyen kideríthető.
Mivel elsősorban AJAX-os problémáról beszéltél Te is, utóbbi megoldás lehet a jobb a kettő közül. De alapvetően inkább egyik sem - jobb adni egy "keretet" a programjaidnak, amiben bizonyos szabályok szerint működnek a dolgok, mindennek megvan a helye, és nem mindenféle fájlban indítgat az ember sessiont - valami olyasmi a megoldás, amit előttem PazsitZ leírt.Alapvetően a hibák elnyomása a @ karakterrel egy nagyon rossz szokásra ösztönöz.
Az elnyomott hibák felderítése pedig egy kódban maga a pokol.
NEM képzelhető el olyan eset, amikor a hibák elnyomását ne lehetne elkerülni valami előzetes vizsgálattal. Ha pedig van rá lehetőség, akkor azt kell alkalmazni. -
Sk8erPeter
nagyúr
válasz
Brown ügynök #9242 üzenetére
-
Sk8erPeter
nagyúr
válasz
InfiniteReality #9246 üzenetére
"Továbbá ha egyéb php file-okat is include-álsz amiben szintén szükség van a session-re akkor @session_start(); és nem okoz E_NOTIFY üziket a php error logban."
Na ezt NE!!!Főleg ne egy viszonylag kezdőnek...
Mi értelme van annak, hogy van egy ordas nagy hiba, de inkább úgy csinálsz, mintha nem tudnál róla/nem lenne?
Tudom, van egy olyan mondás, hogy "amiről az ember nem tud, az nem is fáj", de ez sajnos a programozásnál nagyon nem igaz.A hibajelzéseket nem elrejteni kell, hanem megszüntetni a hiba okát.
-
Sk8erPeter
nagyúr
válasz
Brown ügynök #9238 üzenetére
Próbáld nem ilyen tömbszerűen meghívni, szerintem az lehet a baj.
Pl. van egy Drupal-modul, az Ubercart, ami egy elég régóta fejlesztett webshopmodul, ott van egy hasonló példa:
[link]if ($image_widget) {
$image_widget_func = $image_widget['callback'];
$output .= $image_widget_func($rel_count);
}Szóval próbáld így:
$controller = $route["controller"];
$action = $route["action"];
$c = new $controller();
$c->$action();Nem garantálom, hogy így menni fog, de esélyesebb.
===
(#9239) Speeedfire :
úgy tuti nem jó.
OK, már eltüntetted. -
Sk8erPeter
nagyúr
válasz
Speeedfire #9231 üzenetére
Ezek a PHP-ben alapból meglévő, előre definiált konstansok, neked semmit nem kell megírnod, erről beszéltem eddig is, nem véletlenül linkeltem be a php.net-es példákat tartalmazó kommentet is...
Szerk.:
de ha nem hiszed, akkor próbáld ki ezt egy tesztoldalon:<?php
function my_var_export($stuff, $text = '...'){
return '<p>'.$text.':</p><pre>'.var_export($stuff, TRUE).'</pre>';
}
echo my_var_export(IMAGETYPE_GIF, 'gif');
echo my_var_export(IMAGETYPE_JPEG, 'jpeg');
echo my_var_export(IMAGETYPE_PNG, 'png');
echo my_var_export(IMAGETYPE_BMP, 'bmp');Mivel PHP-s konstansokat használnál fel, így a kódod hordozható is lenne...
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9228 üzenetére
Ja értem, és azt a 4 számot lecserélni a fentebb felsorolt teljesen egyértelmű konstansokra biztos rohadt nagy meló...
De ha szereted a misztikus kódokat, úgy minden más.....
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9225 üzenetére
Ja, vágom, hogy a getimagesize visszaadott tömbjének 2. indexe IMAGETYPE_XXX konstanst ad vissza, ami egy szám.
Éppen ezért jobban járnál, ha a semmitmondó számok helyett egy kicsit egyértelműbb jelzést használnál:switch($type){
case '6': $img = imagecreatefromwbmp($src); break;
case '1': $img = imagecreatefromgif($src); break;
case '2': $img = imagecreatefromjpeg($src); break;
case '3': $img = imagecreatefrompng($src); break;
default : return "Unsupported picture type!";
}HELYETT:
switch($type){
case IMAGETYPE_BMP: $img = imagecreatefromwbmp($src); break;
case IMAGETYPE_GIF: $img = imagecreatefromgif($src); break;
case IMAGETYPE_JPEG: $img = imagecreatefromjpeg($src); break;
case IMAGETYPE_PNG: $img = imagecreatefrompng($src); break;
default : return "Unsupported picture type!";
}Szerk.:
itt láthatsz jó hosszú listát ezekről a konstansokról: [link]. -
Sk8erPeter
nagyúr
válasz
Speeedfire #9223 üzenetére
"Annyi, hogy a tmp fájl máshogy declarálja a dolgokat, ott kicsit máshogy van."
Hát ez most nagyon sejtelmes válasz volt.Pont a konkrétumokra lettem volna kíváncsi, hogy mit kellett változtatni...
"A type-ot írtam át és illetve az array-ből adtam meg neki a magasságot és a szélességet."
Mit írtál át a type-on?
Milyen array-ből? -
Sk8erPeter
nagyúr
válasz
Speeedfire #9221 üzenetére
Elfelejtetted bekapcsolni a PHP-s szintaktika-kiemelést.
Konkrétan mit írtál át? Most nincs időm áttanulmányozni az egész kódodat. -
Sk8erPeter
nagyúr
válasz
Speeedfire #9219 üzenetére
[link] ?
-
Sk8erPeter
nagyúr
válasz
vakondka #9216 üzenetére
Hali!
Ilyet nekem is kellett még ötezer éve csinálnom, én akkor ez alapján csináltam, és működött:
How do I convert a .pfx to be used with an Apache server?
Lényegében hasonló ahhoz, amit Te írtál, csak -nokeys kapcsoló nélkül. Meg mondjuk ez igazából https-kapcsolathoz kellett Apache-ra.
Tényleg nagyon rég volt, de nekem úgy rémlik, mintha szükség is lett volna arra a kulcsra, amit a tanúsítvány kibocsátója adott, de nem adnám rá a nyakam...
Mondjuk tudom, ezzel aztán rohadt sokat segítettem... -
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9189 üzenetére
A linkelt példában csak CURDATE() van, ami ilyen:
2012-04-08Ha aznap meg van mondjuk 1000 ugyanilyen lekérés, ami ezt a dátumot tartalmazná, akkor miért is ne cache-ből kotorja elő. A CURDATE() nem sokszor változik egy nap...
Igen, nálad bőven lehetnek variációk, meg gondolom nem töltik ki olyan durván sokszor azt a formot, szóval én nagyjából itt leszarnám a query cache-t, és épp ezért alkalmaznám a korábban mutatott módszert.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9187 üzenetére
Query cache, nézd meg az első tippet:
[Nettuts+: Top 20+ MySQL Best Practices] -
Sk8erPeter
nagyúr
válasz
Speeedfire #9185 üzenetére
Számomra egyből átlátható a query-s változat, főleg ez az INTERVAL 60 YEAR és hasonló megoldások igazából az ember pofájába vágják, hogy igazából itt mi is történik.
Ilyesmire én inkább ezt preferálom, még ha a query cache szempontjából valaki máglyán is akarna látni emiatt.Mindenesetre az tény, hogy a PHP-vel sztringként összeállítós megoldás ránézésre ocsmányabb.
Meg nekem kevésbé átlátható.
De az tény, hogy a tiéd nyert, mert 0.0001 másodperccel gyorsabban futott le.
-
Sk8erPeter
nagyúr
Akkor legyen még:
[VMware Player] -
Sk8erPeter
nagyúr
válasz
Speeedfire #9180 üzenetére
where bday >= '1982-08-17' and bday<='1950-02-14'
Csak azt magyarázd el nekem, hogyan fog valaha is teljesülni az, hogy egy dátum 1982-nél későbbi, de 1950-nél korábbi!Ja hogy a kliens pontos ideje kell (tehát a látogató szerinti idő), azt előbb nem írtad, így érthető.
Én a helyedben ezt a számolgatást inkább az adatbázisra bíznám, ha már úgyis onnan kellenek az adatok. Bár ez megint hitkérdés, mert a query cache szempontjából lehet, hogy jobb, ha inkább PHP-ra bízod a számolást.
Na de abból már eleve ki lehet indulni, hogy a MySQL-ben nagyon egyszerűen lehet egyszerű intervallumokat számolni, lásd pl. ezt:
SELECT DATE_SUB( NOW(), INTERVAL 60 YEAR );
Eredménye épp most:
1952-04-08 19:41:06Most leteszteltem az intervallumokra egy teszttáblával és néhány tesztadattal, úgy, hogy az ezelőtt 30-60 évvel születettekre vagyok kíváncsi, ez lesz az intervallum, a teszttáblával tök jól működött:
Táblastruktúra:
CREATE TABLE IF NOT EXISTS `test_dates` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`my_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci AUTO_INCREMENT=10 ;
INSERT INTO `test_dates` (`id`, `my_date`) VALUES
(1, '2012-04-08 16:52:36'),
(2, '2012-02-06 10:00:00'),
(3, '2012-01-09 11:36:00'),
(4, '2011-01-09 08:00:49'),
(5, '1981-07-07 22:00:00'),
(8, '1972-03-14 23:33:00'),
(9, '1978-04-04 16:00:00');A query az intervallumokkal:
SET @now = NOW( );
SET @interval_start = 30;
SET @interval_end = @interval_start + 30;
SET @date_first = DATE_SUB( @now , INTERVAL @interval_end YEAR );
SET @date_second = DATE_SUB( @now , INTERVAL @interval_start YEAR );
SELECT * FROM `test_dates`
WHERE
`my_date` >= @date_first
AND
`my_date` < @date_second
ORDER BY `my_date` ASC;Nálam "a lekérdezés 0.0221 másodpercig tartott".
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9177 üzenetére
Hogy mi? Miért feltételezed, hogy a mai napon született, mondjuk 35 éve?
Ez ugye ezt adja vissza: "1977-04-08"...
Ennek mi értelme? Te nem csak évre vonatkozó életkort akarsz számolni? Megint kicsit homályos nekem a kérdésed. -
Sk8erPeter
nagyúr
válasz
Speeedfire #9176 üzenetére
Ha AJAX-szal küldenéd el, akkor is meg tudnád nézni a helyességét.
Ha nagyon muszáj így csinálni, hidden input fieldekkel, akkor igen, én mindenképp kettébontanám, felesleges egybesűríteni.
De szerintem nem muszáj.Nekem eleve az nem világos, hogy ezt miért akarod kliensoldalon elintézni, ha a kliensoldalon lényegében semmi szerepe nincs - tehát miért nem szerveroldalon kéred le az aktuális napot, időt, date()-tel... A checkbox megléte vagy hiánya úgyis egyértelművé teszi a helyzetet, így felesleges kliensoldalon beállítani, plusz ugye az megint csak tök felesleges plusz validálás.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9169 üzenetére
Nem ártana tudni, mit akarsz kezdeni az adatokkal, egyáltalán hogy küldöd el szerveroldalra, és hogyan fogod feldolgozni, hogy fogod eltárolni...
Itt egyébként miért a getDay értékét küldöd el? (Gondolom tudod, hogy az 0-val kezdődik, ami a vasárnapot jelzi, a hétfő az 1-es, stb...)
Egyébként a céltól függ, hogy mit és mennyire érdemes szétbontani.
Mondjuk itt valami dátumot akarsz beállítani, ha jól látom, hogy meddig elérhető a hirdetés. Ezt nem valami Datepickerrel intézed el? Ha nem, akkor csináld azzal, csak hogy megint megkaphassam a fejemhez, hogy hype-olok.(Egyébként csak azért ajánlott, mert iszonyat egyszerű a kezelése.)
-
Sk8erPeter
nagyúr
Nem hiszem, hogy az volt a gond, hogy kihagytad a $response = array() sort, hiszen a PHP ennél egyszerűbb (persze ez nem mindig előny), ha akárhol azt mondod, hogy $response['loszar'], akkor létrejön a $response tömb, a 'loszar' kulccsal.
Szerintem az a gond, hogy az echo-zásnál a json_encode()-ot következetesen kihagyod.Második kérdésre:
Igen, ott. -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #9158 üzenetére
Amúgy attól függ, mit küldesz PHP felől.
Példa:
test.php<?php
$response = array();
$response['user_exists'] = TRUE;
$response['pass_ok'] = TRUE;
$response['auth_ok'] = TRUE;
$response['auth_ok_2'] = 'true';
echo json_encode($response);erre a response pedig (a data objektumban) ez lesz a fentebbi módszerrel:
{"user_exists":true,"pass_ok":true,"auth_ok":true,"auth_ok_2":"true"}
Ebből jól látható, hogy a
(data.auth_ok == true)
igaz lesz, a
(data.auth_ok == 'true') hamis,
aztán a _2-nél pedig fordítva:
(data.auth_ok_2 == true)
hamis
(data.auth_ok_2 == 'true')
igaz.Jim-Y: azt javaslom egyébként, hogy használd a console.log()-ot, ez mondjuk IE-nél nem működik, ha nincs megnyitva a fejlesztőkonzol (értelemszerűen régebbiekben, ahol ez még nincs is, még annyira sem működik), de Chrome-nál nagyon szépen kiíratja az értékeket (meg Firebugban is jó), egyszerű példa:
$.post('ajax/test.html', function(data) {
console.log('data after POSTing:');
console.log(data);
$('.result').html(data);
}); -
Sk8erPeter
nagyúr
Nincs mit, de végül hogy oldottad meg?
Megoldhatjuk szépen is.A data.auth_ok ellenőrzésére vonatkozó ág most hirtelen nem esik le, hogy miért nem volt igaz, pedig az alapján jónak tűnt. Mondjuk akkor értettem volna, ha így néz ki:
data = {"user_exist":"true","pass_ok":"true","auth_ok":true}
Tehát nem stringként van benne, hanem simán true értékkel, mert akkor a data.auth_ok == "true" hamisra értékelődik ki, a data.auth_ok == true igaz. -
Sk8erPeter
nagyúr
Pont ezt magyaráztam, hogy ha ez a vége a PHP-fájlodban:
echo json_encode($response);
akkor úgy tudod elérni a változókat jQuery-ben, ahogy az előbb mutattam... Ennél egyszerűbb példát erre nehéz lett volna mutatni.
Először mutattam a PHP-kódot, majd utána a jQuery-ben való b@szkurálást. -
Sk8erPeter
nagyúr
$response.user_exist=true;
$response.pass_ok=true;
$response.auth_ok=true;
Ilyen nincs PHP-ben, ilyen van:
$response['user_exists'] = TRUE;
$response['pass_ok'] = TRUE;
$response['auth_ok'] = TRUE;$ = mysql_result($, 0); // ide nem tudom mi kéne:/
Én sem, mert nem írtad, ide minek kéne jönnie.Szerk.: most látom, hogy közben utólag szerkesztetted a hsz.-edet.
"A jquery-ben utána ha pl response.user_exist=true és response.pass_ok=false jött vissza"
Akkor ezek szerint mégis jQuery-vel szeretnéd összehozni...Én meg az előbb ennek megfelelően írtam meg a példát. Azon mi nem volt érthető?
A fentebbinek a vége is akkor
json_encode($response);
épp ahogy előbb is írtam....(#9152) Speeedfire : akkor jó.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9146 üzenetére
"Esetleg ha valami speckó karaktert raksz a sztingek közé akkor explode-al szét lehet szedni a sztringet."
Ezt inkább ne. Kerülendő, rossz programozási szokás, nem is "biztonságos" - ha ehhez valaki hozzászokik, elfelejtheti, hogy az a bizonyos belepakolt érték szintén tartalmazhat olyan karaktersorozatot, ami épp az elválasztó karaktersorozat, kizárni nem lehet.
Főleg, ha van alternatíva (pl. amit írtam fentebb).
-
Sk8erPeter
nagyúr
Gondolom JSON-ről beszélsz.
Ez esetben:
test.php:
<?php
$response['x'] = 'valami';
$response['y'] = 'valamimas';
echo json_encode($response);(Ismét szándékosan maradt le a záró PHP-tag (?>).)
Így JSON-ben ennek a feldolgozása pl. jQuery segítségével ennyi:
$.post("test.php", function(response) {
alert("response.x: " + response.x);
alert("response.y: " + response.y);
}); -
Sk8erPeter
nagyúr
válasz
Entrecampos #9141 üzenetére
"Majd egyszer mérjetek egy lefutási időt..."
Sokkal hitelesebb lett volna a mondókád, ha valami konkrétumot is tartalmaz, nem csak levegőbe beszélést: például a saját tapasztalataidat futási időkről, esetleg konkrét mérési eredményeidet."Persze, itt nem 3 elem bejárására gondoltam... Illetve 3 aktív felhasználónál. "
Ja, mert mi eddigi életünkben 3 elemnél többet tartalmazó tömböt nem jártunk be, és elképzelésünk sincsen arról, hogy milyen is lehet, ha egy oldalon 3-nál több felhasználó is tevékenykedik egyszerre...
Nem azért, de ekkora arccal, a többiek lebecsülésével (a másik tudásának vagy tapasztalatainak ismerete nélkül) betolni egy indokolatlanul nagyképű dumát nem túl szimpatikus kezdés a fórumon - ahogy elnézem, ebben a topicban eddig ez a kettő volt az összes termésed.
Hidd el, hogy nagyon jó szakmai vitákat lehet folytatni itt a fórumon arcoskodás nélkül is - ha jó szakmai érvet hozol fel, elfogadjuk, de lehet, hogy vitatjuk - amivel még nincs is semmi baj, mert egy ilyen vita termékeny is lehet, mindegyik résztvevő fél tanulhat belőle a másiktól. De amiket eddig villantottál, annak alapot nem adtál, csak értelmetlenül lefitymáltad más kódját.Visszatérve a kérdésre:
nagyon nem árt, ha az ember a kód rugalmasságát, átláthatóságát, módosíthatóságát, bizonyos részek egységes kezelését is az első szempontok közé helyezi.
Például ha éppen az a cél, hogy mondjuk valamilyen formmezőket azonos módon tudj validálni, feldolgozni, azonos tömbbe tartozzanak, akkor ez a tömbös megoldás nagyon előnyös lehet, ha valaki jól írja meg, a hozzá tartozó kód gyorsan átlátható, könnyen kezelhető lehet.
Vegyük azt, hogy mondjuk épp egy select lista klónozgatásáról van szó, előre nem lehet tudni, mennyi keletkezik, de azért ugyanezen a formon mondjuk van még 10 text field, 5 textarea, néhány radio box, checkbox, stb.
Te meg azt mondod, hogy fúj de csúnya ez a tömbös megoldás, te úgy fogod megoldani, hogy a select listáknál mondjuk a name attribútum mögé raksz egy alsóvonás+inkrementált számot (tehát mondjuk ilyen lesz: name="list_1", name="list_2", stb.) Gondolj bele, milyen csúnya lesz ennek a szerveroldali kezelése - és mennyivel szebben kezelhető lenne egy tömbös megoldás, ahol egybetartozó elemeken rohangászhatnál végig.
Vagy:
a $_POST-on belül mondjuk van 100 formmező, ebből kb. 30 mondjuk a fentihez hasonlóan összetartozó, de szerinted legyenek csak széjjeldobálva, majd valami érdekes módszerrel megpróbáljuk bejárni - pl. a $_POST tömbön végigmegyünk, majd minden egyes elemre valami ellenőrzést megpróbálunk pl. a name attribútum első pár karaktere alapján ellenőrizni (vagy nem tudom, hogy gondoltad). Nem lenne szebb úgy, ha a 30 teljesen egybetartozó, hasonló módon kezelendő mező egybetartozna, és egy tömbön belüli tömb lenne? Így azonos name-en belül több field szerepelne.
Kétlem, hogy ez a fajta a tömbbe rendezés releváns teljesítményromlást okozna.Remélem innentől már némi konkrétumokat is tartalmazó hsz.-eket fogsz tudni kreálni, úgy érdemben is tudnánk vitatkozni.
-
Sk8erPeter
nagyúr
válasz
Entrecampos #9138 üzenetére
"nagyon túl bonyolítsátok a dolgokat"
Nekem meg nem bánTSa és nem is hasogaSSa a fülemet...
Jó kezdés volt.A tömbös elrendezés valóban véletlenül maradt benne, és azért, mert ezt ollóztam egy korábban általam készített, formelem-klónozós scripthez tartozó markupból:
http://jsfiddle.net/Sk8erPeter/RqYYj/
Ha klónozod az elemeket, jobban jársz, ha nem írod felül az előző elemet, hanem lehetővé teszed, hogy a klónozott elemek is láthatók legyenek szerveroldalon...Valószínűleg nem azért klónozod, mert a korábbi formelemek értékét el szeretnéd veszíteni.
Ha pedig ezáltal egy tömb keletkezik szerveroldalon, azt egy tömbbel be kell járni. Ez aztán rendkívül bonyolult.
Egyébként ez a szögletes zárójeles megoldás annyit módosít a korábban írt példámon, hogy szerveroldalon nem ezt látod a $_POST-ban:
array (
'form_elem_select' => '- semmi -',
)
hanem ezt:
array (
'form_elem_select' =>
array (
0 => '- semmi -',
),
)Az, hogy ez plusz terheléseket róna a szerverre, az egyszerűen baromság. Ha a ciklus egyetlen lépés után megáll, mert mindössze egyetlen elem található benne, akkor ez nem jelent semmiféle plusz terhelést (az, hogy mondjuk egy, a ciklus léptetéséhez felhasznált változó indexét megnöveli eggyel, talán ne vegyük a releváns "terhelés" és időtöbblet kategóriájába). Cserébe felkészülsz arra az esetre is, ha valóban több elem létezik a tömbben.
A szögletes zárójelekkel tudod jelezni jelen esetben a PHP felé, hogy itt egy tömb következik, kezelje is annak megfelelően.A tömbös megoldással nincs semmi baj. Nem muszáj alkalmazni, de nyugodtan lehet. Anélkül és vele is jól működő megoldásokat lehet összehozni.
Ha az én mondókám nem is volt számodra meggyőző, akkor példának hadd hozzam fel, hogy a Drupal előszeretettel alkalmazza a Form API-jában a mezők tömbalapú generálását. Biztos azért csinálták így, mert nem értenek hozzá...Szerk.: Egyébként kilencmillió soros if-elseif-elseif-elseif-elseif...-else megoldások helyett létezik switch-case is. Meg céltól függ, milyen ellenőrzésre van szükséged, egyáltalán mit szeretnél csinálni a kapott adatokkal.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9134 üzenetére
Ha nem töltötte ki a másik mezőt, akkor akár megoldhatnád a kérdést default értékekkel, az első mező értékének függvényében.
Vagy egyszerűen kötelezővé teszed a második mező kitöltését is, meg is vizsgálod, megvan-e mindkettő, és csak ennek megléte esetén dolgozod fel a formot, és kész.===
(#9128) Lacces : közben eszembe jutott, hogy gyűlölöd a terminált.
De létezik az Ubuntu default fájlkezelőjében is (Nautilus) kereső, ha nyomatsz egy Ctrl+F-et..... Meg nem is egy kétpaneles fájlkezelő van GNOME-hoz és KDE-hez egyaránt - de KDE-st is használatsz GNOME-on is, pl. akár Krusader (még talán ez viszonylag hasonlít a Windows-os Total Commanderhez, de sajnos eddigi tapasztalataim alapján egyik sem közelíti meg azt).
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9132 üzenetére
ja, a $tomb az itt pont nem tömb lesz, hanem a tömbindex/kulcs.
$value1 = $value[0]; $value2 = $value[1];
Ez így ellenőrzés nélkül nem biztos, hogy túl jó ötlet, vagy garantált, hogy a $_POST['post'] aktuális elemén belül mindig lesz 0. és 1. index? (és nem lesz kevesebb vagy éppen több kulcs?) -
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9115 üzenetére
A selectnél még oké, a checkbox kevésbé világos, mert az szerintem alapból nem szokott átmenni szerveroldalra, ha nincs semmi kipipálva.
Pl. select:
<select class="asdasd" name="form_elem_select[]">
<option>- semmi -</option>
<option value="blabla_1">Blabla 1</option>
<option value="blabla_2">Blabla 2</option>
<option value="blabla_3">Blabla 3</option>
<option value="blabla_4">Blabla 4</option>
</select>Ha így néz ki, akkor itt az első, a - semmi - lesz a kiválasztott option (mivel sehol nincs explicite a selected="selected"), a szerveroldalon pedig ezt kapod a $_POST-ban:
array (
'form_elem_select' => '- semmi -',
)Épp ezért inkább érdemes egy default üres értéket adni neki:
<select class="asdasd" name="form_elem_select[]">
<option value="">- semmi -</option>
<option value="blabla_1">Blabla 1</option>
<option value="blabla_2">Blabla 2</option>
<option value="blabla_3">Blabla 3</option>
<option value="blabla_4">Blabla 4</option>
</select>Így ez lesz a $_POST-ban:
array (
'form_elem_select' => '',
)Erre így könnyű ráereszteni egy empty() ellenőrzést, és akkor pampoghatsz, hogy válasszon ki valamit a júzer, ha kell.
A checkbox általában nem jelenik meg szerveroldalon, ha nem választasz ki semmit, úgyhogy azt nem vágom...
Az empty(), amire kérdeztél, teljesen jó, igen.
A foreach-et és más ciklusokat is tovább lehet léptetni "kierőszakoltan" continue-val: [link].
===
(#9117) Lacces : ez függ attól, van-e jóféle iterátor a bejárandó elemhez.
Meg a láncolt listánál szokták így is, hogy egyszerű legyen, mint egy marék lepkefing: while( loszar->next() ){...} .(#9122) Lacces :
"Másik épp nézem át, de a javascript / jquery az hol tárolódik?"
Őőőőő, nincs kereső a gépeden?
Letöltöttem a Yii-t, és nagyjából 10 másodperc alatt megvolt keresővel... -
Sk8erPeter
nagyúr
"hol van a modul könyvtár?"
Gondolom létre kell hozni.... és igen, gyors Guglizás után - nem használtam még ezt a frameworköt - pl. itt mutatja a "Yii User Management Module" telepítésének módját: [link].
van ez a rész:
"Extract the Yii User Management Module under the modules/ directory of your new Web Application. Replace the _0.4 with the latest Version available.$ cd testdrive/protected
$ mkdir modules
$ cd modules
$ wget http://www.yiiframework.com/extension/yii-user-management/files/User_Management_Module_0.4.tar.bz2
$ tar xvf User_Management_Module_0.4.tar.bz2
""mkdir modules", magyarul ő is létrehozza a modules könyvtárat, aztán odanavigál, majd kibontja a modul tartalmát, amin belül először a modul nevét tartalmazó könyvtár van, ami jelen esetben - most letöltöttem - a "user" nevű.
"és hogy shop mappát rakjam oda, vagy a shop mappa tartalmát?"
Értelemszerűen ennél a modulnál is shop könyvtárat kellene beleraknod a modules könyvtárba. Ez ebben a formában elég logikus, gondolj bele, mi lenne, ha mondjuk 100 modult telepítenél, akkor 100 modul tartalma lenne ömlesztve? Az úgy irtó gány lenne.
Tehát ha most telepítenéd a fenti modult, meg azt a webshoposat, akkor elméletileg így kéne kinéznie a könyvtárszerkezetednek:yiikönyvtárad
|- ....
|- modules
|- shop
|- user
|- ...Épp azáltal lesz moduláris a felépítés, hogy jól elkülöníthető egységeket kapcsolsz hozzá a meglévő rendszeredhez (vagy épp választasz le róla).
Egész értelmesen sikerült megfogalmaznom egy liter bor és 5 sör után.
-
Sk8erPeter
nagyúr
Ne add fel, mert ha feladod, abból nem tanulsz.
Igazából gyorsan, fejből írtam a kódot, szóval természetesen tartalmazhat hibát, szóval ez inkább szemléltetés akart lenni.
De jó lenne tudni, hogy nálad mi volt a konkrét hiba oka, ezért próbáld meg pl. ilyen módon lekezelni a hibát: [link], meg itt is vannak jó példák: [link].
Aztán írd meg, konkrétan milyen hibaüzenetet írt!
Már ha az .error() függvénybe belelép egyáltalán. -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #9066 üzenetére
Most látom, hogy itt én is simán ("#saleBtn")-t írtam az elején, helyesen a dollárjellel kiegészítve: $("#saleBtn").
-
Sk8erPeter
nagyúr
Ahogy elnézem, az oldaladon van egy ilyen:
<input type="submit" name="fb" value="Facebook">Innen várnád, hogy beállítódjon a $_POST['fb'], de mivel történik egy átirányítás a Facebookra, és ott történik az authentikáció, ezt a $_POST értéket legfeljebb a Fácsé kapná meg az átirányítás során, a Te oldaladon a visszairányításnál már gondolom ez nincs beállítva. Szóval nem a $_POST['fb'] meglétét kellene vizsgálni. Mondjuk nem próbáltam még PHP-vel a FB-os authentikációt, de első ránézésre így lenne logikus.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9077 üzenetére
DE AKKOR IS JQUERY RULEZ!!!!!!!!44NÉGYNÉGYNÉGY
-
Sk8erPeter
nagyúr
Persze, így érthető, remélem azért nem tűnt nagyon sértőnek, amit írtam, ha igen, akkor bocs.
Mi is átéltük, milyen az, amikor fogalmunk sincs, mi fán terem a jQuery.
Szóval kérdezz nyugodtan, ha felmerül valami, van amúgy külön topicja is: jQuery kérdések. -
Sk8erPeter
nagyúr
("#saleBtn").click(function(){
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var jsonobj=new Function("return "+xmlhttp.responseText)();
$("#goodsResult").text(jsonobj.entity.countrycode);
}
}
xmlhttp.open("GET","../SERVER/my_extension.php?query=cc",true);
xmlhttp.send();
});Ez jQuery-vel kifejezve (ha már azt használsz), kicsit kibővítve, nagyon egyszerű példával élve:
("#saleBtn").click(function () {
var
processing_file = "../SERVER/my_extension.php?query=cc",
jqxhr = $.getJSON(processing_file, function (jsonObj) {
if(jsonObj.status == 'success'){
$("#goodsResult").text(jsonObj.data.entity.countrycode);
}
else{
$("#goodsResult").text(jsonObj.data.msg);
}
}).error(function () {
alert("There was an error while processing your request!");
})
});A PHP-fájlban (lehetne másképp is, rengeteg módszer létezik rá, ez csak egy gyorspélda):
<?php
$query = isset($_GET["query"]) ? $_GET["query"] : '';
$jsonStuff['status'] = FALSE;
$jsonStuff['data'] = array('msg'=>'');
if ($query == "cc") {
$jsonStuff['data'] = file_get_contents('test.txt');
$jsonStuff['msg'] = 'Success';
$jsonStuff['status'] = TRUE;
}
else{
$jsonStuff['data']['msg'] = "no data received";
}
echo json_encode($jsonStuff);(Megj.: a ?> lezárást szándékosan nem tettem ki, nem is kötelező, sőt, ha nem várunk pl. HTML-outputot utána, inkább nem is érdemes.)
===
(#9065) modder : néha meg tudsz lepni a reakcióiddal.
Senki nem mondta, hogy f@szfej, de ha az ember elkezdi használni a jQuery-t, a használható, akár kezdőknek szóló tutorialok között biztos, hogy megemlítik az AJAX-os függvényeket. Az XMLHttpRequest-es szarakodással meg az ember igazából ezerszer többet szív és gépel feleslegesen, mintha egyszer elolvasná a doksik között az AJAX-ra vonatkozó részt (lásd jQuery a cross-browser dolgokat eleve lekezeli). -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #9062 üzenetére
Igen, én sem értem, minek keverni a szezont a fazonnal...
Ez kb. olyan, mintha egy jQuery-kódot valaki teleszórna document.getElementById()-kkel... -
Sk8erPeter
nagyúr
Készítettem neked egy megoldást:
<?php
$evil = "function lp0(){echo base64_decode('UmVhZCB0aGF0IG1vdGhlcmZ1Y2tpbmcgbWFudWFsISEh');}lp0();";
eval($evil);Ha kíváncsi vagy a kimenetre: http://ideone.com/dfDiG.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #9046 üzenetére
Fricska akart lenni a sok gyökér kérdésre reagálva.
Bővebben: sokan úgy kérdeznek, hogy óvodás szintű, degeneráltak által is érthető dokumentációk/tutorialok/e-bookok/... állnak rendelkezésre arról, hogyan kell megoldani egy adott problémát, de sokan ezt lusták elolvasni/kipróbálni/felfogni, és úgy gondolják, jobb, ha inkább f@szságokat kérdeznek a fórumokon, majd valaki megmondja a megoldást attól kezdve, hogy hogyan kapcsolja be a gépet, nem zavarja őket, ha kicsit hülyét csinálnak magukból, belefér.
Az ilyenektől eléggé felhígul egy szakmai fórum, elviszi a témaköröket a "buta kérdések topicja" irányba.
Új hozzászólás Aktív témák
Hirdetés
- ZBook Fury 16 G9 16" FHD+ IPS i7-12850HX RTX A2000 32GB 512GB NVMe magyar vbill ujjlolv IR kam gar
- AKCIÓ!!! GAMER PC: Új i5-14400F +RTX 4060/5060/4070/5070 +16-64GB DDR4! GAR/SZÁMLA! 50 FÉLE HÁZ!
- Elite Dragonfly G3 13.5" FHD+ IPS érintő i5-1235U 16GB 512GB NVMe ujjlolv gar
- Újszerű 17.3" FHD (1920x1080) IPS 40pin 144Hz matt LED kijelző. AUO B173HAN04.9
- Lenovo kezdő laptop (i3 6th, 500 GB, 4 GB) reklámáron! AkciÓÓ!
- Bomba ár! Lenovo ThinkPad P43s - i7-8G I 8GB I 256GB SSD I Nvidia I 14" FHD I Cam I W10 I Garancia!
- Bomba ár! Dell Latitude 5430 - i7-1255U I 16GB I 512SSD I HDMI I 14" FHD I Cam I W11 I NBD Garancia!
- SanDisk Extreme Portable 8TB (SDSSDE61-8T00-G25)
- AKCIÓ! Gigabyte B450M R7 2700X 16GB DDR4 512GB SSD RX VEGA64 8GB CM 690 III FSP 600W
- Telefon felvásárlás!! iPhone 12 Mini/iPhone 12/iPhone 12 Pro/iPhone 12 Pro Max
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest