- Milyen okostelefont vegyek?
- Honor Magic6 Pro - kör közepén számok
- One mobilszolgáltatások
- iPhone topik
- Olcsó Galaxyk telepíthetik a One UI 7-et
- Milyen GPS-t vegyek?
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Google Pixel topik
Új hozzászólás Aktív témák
-
Des1gnR
őstag
válasz
fordfairlane #16299 üzenetére
Jaj bocs, elfelejtettem írni, hogy átneveztem ordertoxml.php-ra mert félreérthető neve volt.
-
Des1gnR
őstag
válasz
Sk8erPeter #16297 üzenetére
Összeszedtem ami kell és remélem tudtok segíteni. Az eddigieket is nagyon köszönöm
Itt a 3 PHP fájl:
[link]Semmi sem titkos, csak így egyszerűbb.
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16291 üzenetére
Hát ja, sajnos nem meglepő, hogy rohadt lassú, mert tele van regexpekkel, egyenként újból és újból végigkotorássza a szöveget arra a kifejezésre, amelyik esetleg illeszkedik (mármint mindegyik regexpre külön-külön), stb., plusz elég karbantarthatatlan is a kód, mert nem valami tömbszerű megoldás van, vagy bármi általánosabb, hanem az str_replace-ekhez vagy épp preg_replace-ekhez be van drótozva stringként az adott smiley - ezenkívül belerak további lassításokat, ilyenekkel, hogy előbb preg_match-csel ellenőrzi, van-e illeszkedés, és AZUTÁN preg_replace-el. Szerintem keress valami jobb kódot/library-t, rengeteg szócikk van Stack Overflow-n. Hozzáteszem, ez a smiley-cserélős móka egyáltalán nem triviális probléma, nehéz általános megoldást írni rá szerintem, ami minden esetet lefed.
(#16281) tothjozsi96 :
"Próbáld meg kivenni a strlen-t, szerintem az lesz a baja ..."
Miért lenne már az strlen a baja?(#16292) Des1gnR :
Hibajelzés be van kapcsolva?
"Viszont ha oda illesztem be ezt a kis kódot ahová kellene, akkor nem hozza létre az XML-t"
És ennyi a hibajelenség, semmi több?
Amúgy mondom, nagyon gáz ez a megoldás, hogy a rendeles.php fájlodba be van okádva minden. Rakd már egy globális függvénybe legalább, amit include-olás (/require) után meghívsz, még az is jobb.
Amúgy ha már ilyen jellegű kódbeillesztés, akkor inkább require_once()-t használj, az garantáltan csak egyszer include-olja a kódot.A kódot sem ártana legalább nagyvonalakban ismernünk... (Nem kell az egész, csak legalább valami útmutatás, hogy mi történik a fájlodban.)
(#16293) tothjozsi96 :
"Az include("rendeles.php")-t próbáltad már?"
Ugye tudod, hogy mi a különbség a require() és az include() között?Semmit nem oldana meg lecserélni a require()-t include()-ra. Annyi különbség lenne, hogy abban az esetben, ha nem létezne a fájl, nem produkálna egy fatális hibát.
-
Des1gnR
őstag
válasz
tothjozsi96 #16295 üzenetére
Kiírnia nem is kell semmit.
Ha a meghiv.php-m így néz ki:
<?php
include 'rendeles.php';
?>
Akkor is létrejön az XML. -
Des1gnR
őstag
válasz
tothjozsi96 #16293 üzenetére
Próbáltam, de nem változik semmi.
-
Des1gnR
őstag
válasz
Sk8erPeter #16290 üzenetére
Sajnos kétértelmű, de jól érted, a PHP-t szeretném meghívni egy másik PHP-ból.
Próbaképpen csináltam egy meghiv.php-t amely így néz ki:
<?php
require 'rendeles.php';
?>Ez így frankón működik is. Lefut a rendeles.php és létrehozza az XML fájlt az adott mappába.
Viszont ha oda illesztem be ezt a kis kódot ahová kellene, akkor nem hozza létre az XML-t
-
tothjozsi96
addikt
válasz
Sk8erPeter #16288 üzenetére
A format_comment valójában arra van hogy a kettős pont D-ből ez legyen:
Tehát csak bizonyos helyeken van meghívva.
Igen, tehát a teljesítményt jó lenne ha nem fogná vissza.
De ez egy ilyen letöltött kód, tehát nem saját.Elég rosszul van megírva, de mutatok egy examplet.
function format_comment($text, $strip_html = true)
{
global $smilies, $TBDEV;
$s = $text;
unset($text);
// This fixes the extraneous ;) smilies problem. When there was an html escaped
// char before a closing bracket - like >), "), ... - this would be encoded
// to &xxx;), hence all the extra smilies. I created a new :wink: label, removed
// the ;) one, and replace all genuine ;) by :wink: before escaping the body.
// (What took us so long? :blush:)- wyz
$s = str_replace(";)", ":wink:", $s);
if ($strip_html)
$s = htmlsafechars( $s );
if( preg_match( "#function\s*\((.*?)\|\|#is", $s ) )
{
$s = str_replace( ":" , ":", $s );
$s = str_replace( "[" , "[", $s );
$s = str_replace( "]" , "]", $s );
$s = str_replace( ")" , ")", $s );
$s = str_replace( "(" , "(", $s );
$s = str_replace( "{" , "{", $s );
$s = str_replace( "}" , "}", $s );
$s = str_replace( "$" , "$", $s );
}
// [code] tag (do first to make sure we take it out of the equation
$s = preg_replace( "#\[code\](.+?)\[/code\]#ies", "code_tag( '\\1' )", $s );
// [list]
while( preg_match( "#\n?\[list\](.+?)\[/list\]\n?#ies" , $s ) )
{
$s = preg_replace( "#\n?\[list\](.+?)\[/list\]\n?#ies", "BB_list('\\1')" , $s );
}
while( preg_match( "#\n?\[list=(a|A|i|I|1)\](.+?)\[/list\]\n?#ies" , $s ) )
{
$s = preg_replace( "#\n?\[list=(a|A|i|I|1)\](.+?)\[/list\]\n?#ies", "BB_list('\\2','\\1')" , $s );
}
// [b]Bold[/b]
$s = preg_replace("#\[b\](.+?)\[/b\]#is", "<b>\\1</b>", $s);
// [i]Italic[/i]
$s = preg_replace("#\[i\](.+?)\[/i\]#is", "<i>\\1</i>", $s);
// [u]Underline[/u]
$s = preg_replace("#\[u\](.+?)\[/u\]#is", "<u>\\1</u>", $s);
$s = preg_replace( "#\[(left|right|center)\](.+?)\[/\\1\]#is" , "<div align=\"\\1\">\\2</div>", $s );
while( preg_match( "#\[indent\](.+?)\[/indent\]#is" , $s ) )
{
$s = preg_replace( "#\[indent\](.+?)\[/indent\]#is" , "<blockquote>\\1</blockquote>", $s );
}
$s = preg_replace( "#\(c\)#i", "©", $s );
$s = preg_replace( "#\(tm\)#i", "™", $s );
$s = preg_replace( "#\(r\)#i", "®" , $s );
// [img]http://www/image.gif[/img]
$s = preg_replace("/\[img\](http:\/\/[^\s'\"<>]+(\.(jpg|gif|png)))\[\/img\]/i", "<img border=\"0\" src=\"\\1\" alt='' />", $s);
// [img=http://www/image.gif]
$s = preg_replace("/\[img=(http:\/\/[^\s'\"<>]+(\.(gif|jpg|png)))\]/i", "<img border=\"0\" src=\"\\1\" alt='' />", $s);
// [color=blue]Text[/color]
$s = preg_replace("#\[color=([^\];\d\s]+)\](.+?)\[/color\]#is",
"<span style='color:\\1;'>\\2</span>", $s);
// [color=#ffcc99]Text[/color]
/* $s = preg_replace(
"/\[color=(#[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9])\]((\s|.)+?)\[\/color\]/i",
"<font color='\\1'>\\2</font>", $s);
*/
// [url=http://www.example.com]Text[/url]
$s = preg_replace(
"/\[url=([^()<>\s]+?)\](.+?)\[\/url\]/i",
"<a href=\"\\1\">\\2</a>", $s);
// [url]http://www.example.com[/url]
/* $s = preg_replace(
"/\[url\]([^()<>\s]+?)\[\/url\]/i",
"<a href=\"\\1\">\\1</a>", $s);
*/
// [size=4]Text[/size]
$s = preg_replace(
"#\[size=([1-4])\](.+?)\[/size\]#si",
"<span style='font-size:\\1em;line-height:100%'>\\2</span>", $s);
// [font=Arial]Text[/font]
$s = preg_replace(
"/\[font=([a-zA-Z ,]+)\](.+?)\[\/font\]/i",
"<span style='font-family:\\1;'>\\2</span>", $s);
// //[quote]Text[/quote]
// $s = preg_replace(
// "/\[quote\]\s*((\s|.)+?)\s*\[\/quote\]\s*/i",
// "<p class=sub><b>Quote:</b></p><table class=main border=1 cellspacing=0 cellpadding=10><tr><td style='border: 1px black dotted'>\\1</td></tr></table><br />", $s);
// //[quote=Author]Text[/quote]
// $s = preg_replace(
// "/\[quote=(.+?)\]\s*((\s|.)+?)\s*\[\/quote\]\s*/i",
// "<p class=sub><b>\\1 wrote:</b></p><table class=main border=1 cellspacing=0 cellpadding=10><tr><td style='border: 1px black dotted'>\\2</td></tr></table><br />", $s);
// Quotes
$s = format_quotes($s);
// URLs
$s = format_urls($s);
// $s = format_local_urls($s);
// Linebreaks
$s = nl2br($s);
// [pre]Preformatted[/pre]
$s = preg_replace("/\[pre\]((\s|.)+?)\[\/pre\]/i", "<tt><span style=\"white-space: nowrap;\">\\1</span></tt>", $s);
// [nfo]NFO-preformatted[/nfo]
$s = preg_replace("/\[nfo\]((\s|.)+?)\[\/nfo\]/i", "<tt><span style=\"white-space: nowrap;\"><font face='MS Linedraw' size='2' style='font-size: 10pt; line-height: " .
"10pt'>\\1</font></span></tt>", $s);
// Maintain spacing
$s = str_replace(" ", " ", $s);
foreach($smilies as $code => $url) {
$s = str_replace($code, "<img border='0' src=\"{$TBDEV['pic_base_url']}smilies/{$url}\" alt=\"" . htmlsafechars($code) . "\" />", $s);
}
return $s;
}És az a baj hogy lefut az összes elméletileg és azért lassul meg ilyen csúnya módon.
-
Sk8erPeter
nagyúr
válasz
Des1gnR #16289 üzenetére
Ja, akkor sorry, ezek szerint félreértettem azt, hogy a "Van egy PHP fájlom amely létrehoz egy XML fájlt az ftp-n. Ezt egy másik PHP-n keresztül szeretném meghívni, de nem tudom hogyan kell." mondatban az "ezt" mire vonatkozik.
Ha jól értem, most nálad az van, hogy van egy fájlod, aminek a kódja egy az egyben ki van dobálva, az kreálja az XML-fájlt. Te pedig ezt a műveletet valamilyen másik fájlból szeretnéd végrehajtani.
Hát akkor tedd ezeket a kódokat egy függvénybe/osztály metódusába, valami értelmesen szervezett struktúrába, include-old ezt a fájlt a másik PHP-fájlból, majd egyszerűen csak hívd meg a megfelelő függvényt/metódust, és meg is vagy.
Gondolom így értetted...Bár elvileg lehetne simán include-olni is, de az ilyen egy az egyben, bármi normálisan kitalált struktúra nélkül kidobált kód mindenképp kerülendő.
-
Des1gnR
őstag
válasz
Sk8erPeter #16288 üzenetére
Ilyet nem írtam
Szerk: Igen
-
Sk8erPeter
nagyúr
válasz
norby10 #16278 üzenetére
A HTML-kódodat is meg kellene mutatnod, mármint konkrétan a form vonatkozó elemét, vagyis a fájlmezőt. Ha azt írod, 1 elemmel működik, többel nem, az így elsőre arra utal, hogy nem tömbszerűen adtad meg a name HTML-attribútum értékét. Vagy valami hasonló. Szóval jó, hogy a backendet megmutattad, de kellene az is, amit a kliens lát.
(#16287) Des1gnR :
Mit jelent az, hogy XML-t "meghívni"?
Szerk.:
a köv. üzenetből úgy tűnik, én értettem félre, és a PHP-fájlt akarod meghívni, az úgy más.(#16276) tothjozsi96 :
Mit tartalmaz ez a format_comment() függvény?
Másik kérdés, hogy van-e értelme állandóan átalakítgatnod, ahelyett, hogy eleve átalakítva mentenéd el. Persze lehet, hogy nálad pont arra van szükség, hogy a "nyers" formában töltődjön fel, de úgy tűnt, elég egyszerű esetről van szó nálad, tehát feltölthetnéd a sorokat eleve formázva is. Így megjelenítéskor nem kéne átalakítgatni semmit. Már ha jól értem a gondodat.
Meg megmutathatnád, egészen konkrétan, kódszinten hogyan alakítod át.
A tisztításra (pl. script-tagek eltávolítása, stb.) meg rengeteg kész library van, lehet, hogy érdemes lenne megfontolni ilyenek használatát, pl. olyat, ami a teljesítményt sem veti vissza. -
Des1gnR
őstag
Sziasztok!
Van egy PHP fájlom amely létrehoz egy XML fájlt az ftp-n. Ezt egy másik PHP-n keresztül szeretném meghívni, de nem tudom hogyan kell.
Tudnátok segíteni?Szerk: Fontos lenne, hogy az XML-t létrehozó PHP tartalma ne jelenjen meg sehol.
-
Orionk
senior tag
-
norby10
csendes tag
válasz
tothjozsi96 #16281 üzenetére
de azért Köszi
-
norby10
csendes tag
válasz
tothjozsi96 #16281 üzenetére
nem ez a megoldás, még mindig az a probléma
-
norby10
csendes tag
válasz
tothjozsi96 #16279 üzenetére
be van az elöző postban
-
norby10
csendes tag
Sziasztok lenne egy kis gondom, írtam egy feltöltő kódot, amivel több filet töltök fel.Annyi a gond vele, hogy felmásolja a fileokat de 0byte a méretük, vagyis mégse másolja fel!
Mi lehet a gond?
-
tothjozsi96
addikt
válasz
Sk8erPeter #16262 üzenetére
Bocsi, csak telefonról írtam.
Az a baj hogy van ez a memcache üzenőfal amiben segítettél.
Volt szó róla hogy vannak smiley-ek amit meg akarok jeleníteni, de erre van egy függvény-em ami kiválogatja hogy mi engedélyezett, tehát nincs minden engedélyezve pont ezért mert valaki beírja hogy <script> alert ....Gondolom ismerős ...
Az a baj hogy ha a foreach-on belül teszem rá a formázás fgv-t tehát format_comment($text)
akkor nagyot terhel mert soronként fut le, de nekem globálisan kellene.
Na most, ha a memcache->get("uzenofal")-ra ráteszem ezt akkor az a baj hogy nem ír ki egy üzenetet sem, de van bent egy count és írja hogy van 102 üzi, na most próbaképpen rátettem a memcache get-re egy htmlspecialchars-t úgy már az üzenetek számát sem írta ki ...
-
DNReNTi
őstag
válasz
Speeedfire #16274 üzenetére
Kár, hogy minden ilyen program Budapesten van, vannak érdekesnek tűnő előadások, de hát k. drága a benzin.
-
Speeedfire
félisten
Kint vannak az idei webconf programok.
-
válasz
peterfihugo #16271 üzenetére
Kérdezd le szerveroldalon:
<?php
$user_ip = $_SERVER["REMOTE_ADDR"];
$json = file_get_contents('http://ipinfo.io/'. $user_ip);
$geolocation = json_decode($json, true);
$city = $geolocation['city'];Ez csak egy példa, file_get_contents helyett használhatsz curl-t is.
Vagy kliens oldalon összepakolod az url-t JQuery-vel. -
peterfihugo
csendes tag
Sziasztok, eléggé kezdő vagyok a témában ezért kellene tőletek egy kis segítség:
Nah szóval adott ez a kódrészlet…innen le is tölthetitek, ha úgy jobban átlátjátok.....hxxp://pressuretackle.com/show.rar
hxxp://szallasok.hu/hotel-wellamarin-zamardi/szallas <- itt meg is tekinthetitek élőben, hogy mit is csinálna ez az egész valójában. A jobb oldalon lévő karikában az Oszkár telekocsis logós részre kattintva átvinne az Oszkár telekocsi oldalára ez a hivatkozás -><script>
$.get("http://ipinfo.io", function (response) {
$(".tartozkodasi_hely").html(response.city);
var hely = 'Az Ön jelenlegi becsült tartózkodási helye:\n' +response.city;
//alert(hely);
}, "jsonp");
</script>
<a href="http://utitars.oszkar.com/day-<?= date("j"); ?>/honnan-/hova-<?=$hotel["telepules"]; ?>/month-<?= date("n"); ?>/year-<?= date("Y"); ?>/" target="_blank" title="Utazzon Oszkárral | Úticél: <?=$hotel["telepules"]; ?>">nah most a hivatkozásban a “hova-” ugye php-val megoldottam saját adatbázisból. Ami nekem nagyon kellene, az az, hogy a “honnan-…..” a pontok helyére hogyan vihetném be az előzőleg scripttel behívott response.city értékét (ami ugye ip alapján a város nevét írja ki. Mert ugye a tartozkodasi_hely nevű class-ba a script behívja ezt az értéket, de a href-be hogy tudnám kiíratni a script által meghatározott város nevét a “honnan-” után?
fúú…már nagyon idegesít a dolog, és lehet hogy nem tudtam leírni érthetően, mit szeretnék, de azért bízom benne, hogy tudtok nekem segíteni -
Orionk
senior tag
válasz
fordfairlane #16268 üzenetére
Igen, inkább indítottam egyet. Viszont nem értem, hogy ennek a Facebook beágyazásnak miért kell webszerver.
Itt van ez az oldal LINK AZ OLDALHOZ
Ha az oldalon a piros hőlégballon fölé viszitek az egeret, akkor az elindul. Nálam Chrome on, amikor elindul, akkor a PNG képnek a körvonalai mozognak és nem olyan szépek.
Ez mitől lehet és hogyan lehetne javítani ?
köszi
-
Orionk
senior tag
válasz
fordfairlane #16266 üzenetére
köszi szépen.
Ehhez kellene webszerver ?
, de miért ? Most csak statikus html oldalt csinálok php nélkül.
Indítsak hozzá egy apachot ?
-
fordfairlane
veterán
válasz
Orionk #16265 üzenetére
Nálam localhoston működik. Ennyi az oldal:
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="utf-8">
</head>
<body>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/hu_HU/sdk.js#xfbml=1&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like-box" data-href="https://www.facebook.com/degazholegballonklub" data-colorscheme="light" data-show-faces="true" data-header="true" data-stream="true" data-show-border="true"></div>
</body>
</html>Ha webszerver nélkül, közvetlenül nyitom meg az oldalt a böngészőben, akkor nem megy.
-
Orionk
senior tag
válasz
DNReNTi #16264 üzenetére
Ezt kaptam Scriptnek :
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/hu_HU/sdk.js#xfbml=1&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>Ezt meg DIVnek :
<div class="fb-like-box" data-href="https://www.facebook.com/degazholegballonklub" data-colorscheme="light" data-show-faces="true" data-header="true" data-stream="true" data-show-border="true"></div>
Kipróbálod légyszi, hogy neked beteszi-e ?
Őszintén nem tudom, hogy mire gondolsz ezzel a kérdéssel:
Van app kiválasztva aminek az id-ját felhasználja a jssdk? -
Orionk
senior tag
Sziasztok !
Használt már valaki ilyen Facebook ablak legeneráló akármit?
https://developers.facebook.com/docs/plugins/like-box-for-pagesHa igen, akkor közülük valakitől egy kis segítséget kérnék szépen.
Kitöltöm, hogy milyen szeretném, hogy legyen a Facebook ablakom és megnyomom a Get Code gombot. Ezután kapok egy rövid scriptet, amit rögtön a <body> után kell bemásolnom, meg egy rövid DIVet, ami tartalmazza magát az ablakot, amit legeneráltattam és oda helyezem, ahova akarom.
Sajnos ezt megcsinálom és mégsem rakja ki az ablakomat. Kellene még valami javascript fájl,vagy valami ?
köszi szépen.
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16258 üzenetére
1. légyszi használd a "Válasz" linket, még a saját hozzászólásodhoz is, hogy bárhonnan követhető legyen az üzenetszál, hogy most ez melyik téma folytatása
(jelen esetben kitalálható, de akkor is
)
2. ez tipikusan olyan kérdés volt, amire semmi értelmeset nem lehet válaszolniNulla konkrét részlet, hogy mi nem működik, mi a pontos hiba (kb. ilyen "nem működik, mi lehet a gond"-szintű hibajelzés), nulla konkrét kód, stb. Szóval így nem fogjuk kitalálni, mi lehet a gond nálad.
(#16252) Lacces :
isset($data[$key])
--> a foreach-ciklusban ennek a feltételnek nem sok értelme van. Nyilván igaz lesz, miután ezeken a kulcsokon mész végig. -
Kommy
veterán
Sziasztok,
lehetséges olyat csinálni php segítségével, hogy van egy mappám benne fájlok xxx_dátum_yyy.txt formátumban, ezek egy játék log fájljai, az yyy jelöli, hogy éppen melyik session fut a szerveren, az xxx pedig a szerver neve.
A kérdésem az lenne ezzel kapcsolatban, hogy lehetséges e úgy olvasni ezeket a fájlokat, hogy Szerver nevenként külön az utolsó módosítási dátumút.
-
tothjozsi96
addikt
Lejárt a szerk. idő ...
Rátettem a formázást és nem listázza ki az üzeneteket.
-
tothjozsi96
addikt
válasz
Sk8erPeter #16251 üzenetére
Rájöttem, köszi!
A memcache->get-re ráteszem a formázást és úgy csak egyszer fog lefutni.
Köszi! -
Lacces
őstag
válasz
fordfairlane #16255 üzenetére
A felső sql-es változó másolásából maradt vissza
.
De aposztróf kiszedése ellenére sincs semmi változás...De most megy, újraindtottam az adatbázist, és viszi... a PDO-s commit paranccsal
-
Lacces
őstag
válasz
Peter Kiss #16253 üzenetére
Elméletben nem, a többinél sincs, és ennél sem szerepel a példák alapján...
-
Lacces
őstag
Hali.
Kellene egy PDO expert személy. Most egy kicsit natívan fejlesztek, és meglepődöm, hogy egyedül az update nem működik nálam (Select, delete, és insert igen)
Ez a következő kód:
pastebin
try {
$sql = "UPDATE tbl_events " .
"SET name=':name', city=':city', place=':place', event_start_date=':event_start_date', event_end_date=':event_end_date', " .
"description=':description', category_id=':category_id', owner_id=':owner_id', coord_latitude=':coord_latitude', " .
"coord_longitude=':coord_longitude', picture_path=':picture_path', is_adult=':is_adult', created_on=':created_on', updated_on=':updated_on' " .
"WHERE id=':id'";
// $sql = str_replace(':id', $id, $sql);
// foreach($data as $key => $value) {
// $value = (isset($data[$key]) || $data[$key] == "" ? $value : null);
// $sql = str_replace(':'.$key, $value, $sql);
// }
// echo $sql;
// echo "<br>";
$stmt = self::$db->prepare("UPDATE tbl_events " .
"SET name=':name', city=':city', place=':place', event_start_date=':event_start_date', event_end_date=':event_end_date', " .
"description=':description', category_id=':category_id', owner_id=':owner_id', coord_latitude=':coord_latitude', " .
"coord_longitude=':coord_longitude', picture_path=':picture_path', is_adult=':is_adult', created_on=':created_on', updated_on=':updated_on' " .
"WHERE id=':id'");
$stmt->bindValue(':id', $id, \PDO::PARAM_INT);
foreach($data as $key => $value) {
$value = (isset($data[$key]) || $data[$key] == "" ? $value : null);
$stmt->bindValue(':'.$key, $value);
}
$stmt->execute();
} catch (\PDOException $ex) {
return $ex;
}Az $stmt->execute() 1-es értékkel tér vissza. De az adatbázisban nem látom az update hatását, semmit sem csinál... viszont ha kikomenteztem az sql kiíratos részt, akkor megkaptam az sql query-t, megyek szépen a phpmyadmin-ban bemásolom, és láss csodát updatelte a kíván sort az adatbázisban, és ez fura... szóval az sql query az jó. És a PDO execute metódusa is 1-el tér vissza, de a PDO által nem frissül...
Mi lehet ennek az oka?
Sőt a bajt tovább tetézi, hogy a MySQL error logjában sincs semmi... -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16250 üzenetére
Felhasználói szemszögből egyáltalán érzékelhető ez a különbség?
Egyébként egy kerülő megoldás az lehetne, hogy egyből, még feltöltés előtt cseréled ezeket a szövegeket. -
tothjozsi96
addikt
válasz
Sk8erPeter #16249 üzenetére
Lenne egy érdekesség amit most vettem észre.
Ezeken az üzeneteken van formázás, amibe nagyon sok str_replace van.Gyakorlatilag alapból a fal lefut ez a formázás nélkül: 0.0009 alatt.
De így ezzel a formázással tehát ami be teszi a smileyeket meg ilyesmiket így már 0.02 vagy 0.06, tehát jóval nagyobb mint előtte.
És elvileg soronként értelmezi a foreach miatt, nem tudom hogy ezen lehet-e egyszerűsíteni ...
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16248 üzenetére
De attól még akkor sem jó így, az előző magyarázatot továbbra is fenntartom...
Úgy szokás, hogy hozzárendelsz egy-egy szerepkört a júzerekhez, ami egy tágabb fogalom, benne foglaltatik pl. az is, hogy ő törölhet, módosíthat, blabla, ő csak módosíthat, de nem törölhet, és így tovább... tehát azt érdemes ellenőrizni, hogy az adott júzernek van-e konkrétan olyan joga (nem szerepköre, mert a szerepkör tágabb fogalom, amiben több jogosultság is benne lehet), hogy töröljön. Na mindegy, ez csak egy javaslat, érdemes lehet megfontolni, hogy később ne legyenek problémáid belőle.
-
tothjozsi96
addikt
válasz
Sk8erPeter #16247 üzenetére
Az csak egy példa volt, már 40 van megjelenítve.
A rang pedig jó, pont az a lényeg hogy ami SQL-ben megvan adva az szerint van UC_CLASSKülön van definiálva...
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16246 üzenetére
Hát itt 20-at jelenítesz meg, 40-et akartál.
De végül is oké. Amúgy azt hittem, csak a csatlakozott kliensnek akarsz megjeleníteni ennyit, az fura, ha pont az adminnak kevesebbet jelenítesz meg, mint amennyi van, legalább biztosíts lehetőséget a továbbiak törlésére (lapozásra) is az adminnak.
Ez az >= UC_MODERATOR kicsit fura feltétel, szerepköröknek kellene lennie, és akinek van joga törölni, csak az törölhessen, ebből még gond származhat, ha ilyen "nagyobb-egyenlő, mint valami konstans" feltételt raksz be (mi van, ha bővíted a szerepköröket, és nagyobb számot kell rendelni valami másik szerepkörnek, akinek nem kéne, hogy joga legyen a törléshez) - csak egy szerepkör legyen, aki tud törölni, ezt rendelgesd hozzá júzerekhez, és annak az egyenlőségét ellenőrizd inkább.
És ez továbbra is csak egy átmeneti megoldás, csak hogy működjön a dolog legalább, ennél azért jóval szebben is lehet, hogy ne mindig nagy tömbökkel operálj, szóval majd később ezt a megoldást azért szépítsd.
De örülök, ha sikerült működésre bírni, szívesen. -
tothjozsi96
addikt
válasz
Sk8erPeter #16245 üzenetére
Így nem egyszerűbb???
echo "Összesen: " . $valami . " üzenet van beküldve!<br />";
$szam = 1;
foreach($adatok as $eredmeny) {
if (get_user_class() >= UC_MODERATOR) {
$del="<span class='date' title='Törlés'><a href=/memcache_fal.php?del=".$eredmeny["id"]."><img src='pic/torles.gif' style='height:10px; border:none;' /></a></span>";
}
echo "<span class='date'>[".strftime("%H:%M",$eredmeny["date"])."]</span> $del <a href='javascript:window.top.SmileIT(\"[b]$eredmeny[username]:[/b]\",\"shbox\",\"shbox_text\")'><img style='height:10px; border:none;' alt='Válasz' title='Válasz' src='pic/jobbra.gif' /></a> <a href='$BASEURL/userdetails.php?id=".$eredmeny["userid"]."' target='_blank'>" . get_user_class_color($eredmeny["class"], $eredmeny["username"]) . "</a> " . $eredmeny["text"] . "<br />";
if ($szam++ == 20) break;
}És kész is!
Köszi még egyszer! -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16244 üzenetére
Fasza, ha működik.
Általános gyakorlat az, hogy a szuperglobális tömböket NEM használjuk fel közvetlenül, alaposan validáljuk előtte.
"Már csak egy utolsó dolog van vissza, nem tudom hogy limitáljam max. 40 üzenetet akarok megjeleníteni, de nem tudom hogy tudnám így a tömbök miatt."
Hát úgy, hogy a tömb utolsó 40 elemét veszed. Pl. array_slice-t használhatsz erre a célra. Egy egyszerű példa:
http://stackoverflow.com/questions/5468912/php-get-the-last-3-elements-of-an-array/5468954#5468954
Természetesen neked nem 3 kell, hanem 40.
DE arra figyelj, hogy előtte count()-tal ellenőrizd le, hogy több eleme van-e, mint 40, és ha igen, csak akkor szabdald fel, és vedd az utolsó 40 elemét.Viszont az is lehet, hogy ezt már érdemes lenne vagy a memcache-nek egy külön kulcsa alatt tárolni, vagy adatbázisba pakolni, és kitörölni a memóriából, mert ha úgysem érdekes jelen esetben, akkor minek terpeszkedjen a memóriában feleslegesen.
-
tothjozsi96
addikt
válasz
Sk8erPeter #16243 üzenetére
Zsír, meg is oldottam megint a kiegészítéseddel a problémát!
Így néz ki a törlés része:
if (isset($_GET['del'])){
$conversations = $memcache->get('uzenofal');
unset($conversations[$_GET['del']]);
$memcache->set('uzenofal', $conversations, MEMCACHE_COMPRESSED, 999);
}És így a bevitel:
$conversations_current = array($azonosito =>
array('id' => $azonosito, 'date' => time(), 'username' => $username, 'userid' => $userid, 'class' => $class, 'text'=> $text),
);Tehát a tömb azonosítója megegyezik a tömb-ben tárolttal és így simán ki lehet olvasni mindent, és uniqid()-vel fut szépen!
Már csak egy utolsó dolog van vissza, nem tudom hogy limitáljam max. 40 üzenetet akarok megjeleníteni, de nem tudom hogy tudnám így a tömbök miatt.
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16242 üzenetére
Szívesen!
Jó a felvetés, legegyszerűbb (még ha nem is szép) megoldás jelen esetben az lenne, ha maga az azonosító lenne a tömbindex, és annak értéke pedig az adatokat tartalmazó tömb lenne. Ez továbbra is tömbök tömbje, ahogy a korábbi megoldás is volt, csak annyi különbséggel, hogy itt explicite meghatározod a tömbindexet, nem pedig az automatikus számozásra bízod (mivel eddig numerikus indexek voltak használva, 0, 1, 2, ...).
Tehát valahogy így, pszeudokóddal:$conversations = array(
AZONOSÍTÓ1 => array(
"text" => "asdasd",
),
AZONOSÍTÓ2 => array(
"text" => "blabla",
),
AZONOSÍTÓ3 => array(
"text" => "qweqwe",
),
);az AZONOSÍTÓ1, AZONOSÍTÓ2, stb. kulcs lehet szám, vagy lehet egy string is (attól függően, milyen típusú azonosítót használsz).
Akár redundánsan is tárolhatod az azonosítót, úgy, hogy pl.:AZONOSÍTÓ3 => array(
'id' => AZONOSÍTÓ3,
'text' => 'qweqwe',
),Ez bizonyos esetekben leegyszerűsítheti a dolgot, persze figyelni kell rá, hogy ez konzisztens maradjon, ne legyen egyik helyen ilyen azonosító, másik helyen amolyan.
Egyébként tényleg érdemes lehet bevezetni egy osztályt, hogy szebben tudd tárolni és kezelni az adatokat.Jelen esetben ezzel az egyszerű megoldással tehát úgy tudnád törölni, hogy egyszerűen írsz egy unset($conversations[AZONOSÍTÓ3]); sort, ezzel kitörölve az adott tömbindexet, és ezután replace-eled a korábbi tömböt a memcache-ben, és meg is vagy.
Itt is egyébként figyelni kell arra, nehogy egy másik csatlakozott kliens egy korábbi kiolvasott adatból tudjon beírni, úgy, hogy visszarakja valahogy ezt az értéket a tömbbe...
Ezért is mondom, hogy szebb megoldást továbbra is valamilyen NoSQL-megoldással lehetne készíteni. -
tothjozsi96
addikt
válasz
Sk8erPeter #16241 üzenetére
Nagyon köszi az eddigi segítséged.
Egy kérdésem van, hogy szedjem ki az adott tömbömből azt az értéket amit valaki törölni akar?
Mondjuk van 40. üzenet, és valaki kitörli a 35.-et, akkor azt hogy???
Ezt meg tudnám oldani, de nem értem hogy hogy vegyem ki, mert nyilván memcache->delete kellene, de nem tudom hogy mert ezért van az ID, hogy behatároljuk hogy hova tartozó az üzenet.
Gondolkodom erősen, ha van ötleted akkor ...
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16240 üzenetére
Tehát akkor mégis működik a kódom, amit mutattam?
Ahogy elnézem, csak annyi különbség van, hogy a get-metódusnál nem array-t használsz, és hogyha ez így működőképes, az számomra arra utal, hogy hibás/hiányos a hivatalos dokumentáció:
http://hu1.php.net/manual/en/memcache.get.php
itt ezeket a fejléceket írja:
string Memcache::get ( string $key [, int &$flags ] )
array Memcache::get ( array $keys [, array &$flags ] )
Magyarul ezek szerint ha string kulcsot adsz meg, akkor stringet is kapsz vissza; de Te a kódod szerint tömböt kaptál vissza. Akkor itt a hivatalos doksiban kéne lennie még legalább egy mixed Memcache::get ( string $key [, int &$flags ] ) sornak is... Ez így logikus is lenne, hiszen a set-metódussal is mixed állítható be, így lekérésnél is nyilván mixed lehetne. Na, ezt is megtudtuk.DE:
- jól érzed, ez az 'id' => rand(1,999999999) sor teljesen rossz. Mi van, ha a rand() eredményeként éppen olyan azonosító jön ki, ami már létezik? Sehol nem ellenőrzöd. De amúgy sem szokás sehol így generálni az azonosítót. Ja, és az azonosító nem feltétlenül kell, hogy szám legyen (lásd uniqid()), vagy ha mégis az kell, akkor oldd meg, hogy inkrementálva legyen, de akkor meg figyelni kell arra is, hogy ha több kliens is csatlakozik, akkor atomikusan történjen az inkrementálás, ne tudjanak korábbi/"kettő közötti" állapotot kiolvasni. Cél egyáltalán ezt feltölteni majd valami adatbázisba, hogy meglegyenek a régi adatok? Mert ha nem, szerintem simán használhatnád a uniqid() függvényt, és meg is vagy. Ha adatbázisba feltöltöd, ott max. akkor problémás, ha az id-hez egy automatikusan inkrementálódó int van beállítva; az nyilván nem fogadja el az angol ábécé karaktereit.
Az inkrementálós megoldáshoz nem ártana valami lockolás, hogy egyszerre csak egy kliens tudja módosítani az értéket, de simán megtehetnéd azt, hogy egyszerűen a set/replace-szel egy MÁSIK kulcsot állítasz be, ami ezt a számot tárolja, azt lekéred, megnöveled, stb.
- minek kéred le a replace/set után még egyszer az adatokat a get-metódussal? Hiszen már ott van a $conversations-tömbödben. Mondjuk annyiból jó lehet, hogy ha közben más kliens módosította az adatokat, akkor azt is megkapod...
- erre a feladatra szerintem tényleg jobb lenne valami NoSQL-megoldás, amiről korábban írtam."Amúgy ez a compress asszem valami tömörítés a memcache-ben."
Igen (MEMCACHE_COMPRESSED), de ezt szerintem hagyd ott szépen, ahogy mutattam, lásd:
http://stackoverflow.com/questions/2105663/what-is-compression-for-in-phps-memcache/2106096#2106096 -
tothjozsi96
addikt
válasz
Sk8erPeter #16239 üzenetére
Igen, csak este volt és már majdnem letöröltem mindent azért mert nem jött össze.
Oké, itt a működő kód.
$conversations_before = $memcache->get('uzenofal');
// új értékek
$conversations_current = array(
array('id' => rand(1,999999999), 'date' => time(), 'username' => $username, 'userid' => $userid, 'class' => $class, 'text'=> $text),
);
// ellenőrzöd, hogy van-e egyáltalán már ilyen érték feltöltve, mert csak akkor lehet replace-elni ezzel a kulccsal később!
// összefűzöd a két tömböt
$conversations = ($conversations_before !== FALSE) ? array_merge($conversations_current, $conversations_before) : $conversations_current;
// replace, ha van már ilyen kulcs, set, ha nincs még
if($conversations_before !== FALSE) {
$memcache->replace('uzenofal', $conversations, MEMCACHE_COMPRESSED, 999);
}
else {
$memcache->set('uzenofal', $conversations, MEMCACHE_COMPRESSED, 999);
}
}
$adatok = $memcache->get('uzenofal');
foreach($adatok as $eredmeny) {
if (get_user_class() >= UC_MODERATOR) {
$del="<span class='date' title='Törlés'><a href=/memcache_fal.php?del=".$eredmeny["id"]."><img src='pic/torles.gif' style='height:10px; border:none;' /></a></span>";
}
echo "<span class='date'>[".strftime("%H:%M",$eredmeny["date"])."]</span> $del <a href='javascript:window.top.SmileIT(\"[b]$eredmeny[username]:[/b]\",\"shbox\",\"shbox_text\")'><img style='height:10px; border:none;' alt='Válasz' title='Válasz' src='pic/jobbra.gif' /></a> <a href='$BASEURL/userdetails.php?id=".$eredmeny["userid"]."' target='_blank'>" . get_user_class_color($eredmeny["class"], $eredmeny["username"]) . "</a> " . format_shoutbox($eredmeny["text"]) . "<br />";
}Viszont lenne még egy kérdésem.
A törlést nem tudom hogy oldjam meg.
Nagyon faintosan működik így is.
De amint látod az ID ahogy beírom az elég "random".Mivel eddig volt egy ilyen megoldásom hogyha van értéke a memcache-nek akkor az id az növekvő, tehát $memcacheérték + 1 ha nincs akkor meg értelemszerűen 1-ről indul ...
Amúgy ez a compress asszem valami tömörítés a memcache-ben.
A memcache-ben még benne hagytam az idő-t, de azt majd kiveszem, mert csak akkor fog frissülni hogyha újat írnak be. -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16238 üzenetére
Szívesen, de akkor másold már be légyszi azt a kódot (legalább egy körülbelülit), ami működik, ha már ennyit szenvedtünk vele...
(Nekem most nincs kedvem agyalni a témán, de a megoldás érdekelne.)
(#16237) : Ja, nyilván nem jó, mert ötezerszer szerepel benne az "uzenofal" kulcs...
-
tothjozsi96
addikt
válasz
Sk8erPeter #16236 üzenetére
Köszi a segítséget.
Megoldódott!!!Az array nem kellett a get-re.
Így jó! -
tothjozsi96
addikt
válasz
Sk8erPeter #16236 üzenetére
Kicsit nézegettem, most így írja be, de szerintem ez se jó ...
array(1) { ["uzenofal"]=> array(2) { ["uzenofal"]=> array(2) { ["uzenofal"]=> NULL [0]=> array(2) { ["username"]=> string(5) "coder" ["text"]=> string(4) "heló" } } [0]=> array(2) { ["username"]=> string(5) "coder" ["text"]=> string(3) "asd" } } }
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16235 üzenetére
"Mellesleg felesleges a replace mert mindennek van külön ID-je és ahogy mondtam ez üzenőfal ..."
Ez hogy jön ide, hogy mindennek van külön id-je?Sehogy: eddig az volt a problémád, hogy a korábbi értékek egyszerűen törlődnek, mert szimplán felülírtad őket a Memcache::set metódussal. Arra kellett a replace, hogy a korábbi és az új értékek egyesítéséből keletkező tömbbel helyettesítsd a régebben feltöltött tömböt.
Így meg tudod tartani a régebbi és az új értékeket is. (Persze itt majd figyelj a memóriahasználatra, erre írtuk, hogy a túl régieket törölni kéne a memóriából, előtte esetleg beírva adatbázisba, ha meg akarod tartani hosszú távon, hogy visszakereshető legyen később.) -
tothjozsi96
addikt
válasz
Sk8erPeter #16234 üzenetére
Én már nagyon megvagyok zavarodva.
Mellesleg felesleges a replace mert mindennek van külön ID-je és ahogy mondtam ez üzenőfal ...Az adatokat var_dump-al kaptam, amúgy.
Bocs, este van már látom mi a baj ...
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16233 üzenetére
Ez egy brutálisan egymásba ágyazott tömb (nem "dupla tömb", hanem sokszorosan egymásba ágyazott darab, az "uzenofal" kulccsal ellátott tömbbe beírtál egy másik "uzenofal" kulccsal ellátott tömböt, és abba egy továbbit, stb...), amiből egyértelműen következik, hogy rosszul történik a beírás. Ergo nem igaz az, hogy "szépen beírja", mert rossz.
-
tothjozsi96
addikt
Most így szépen beírja, csak kiolvasni nem tudom eddig még.
array(2) { ["uzenofal"]=> array(2) { ["uzenofal"]=> array(2) { ["uzenofal"]=> array(2) { ["uzenofal"]=> array(2) { ["uzenofal"]=> array(2) { ["uzenofal"]=> array(2) { ["uzenofal"]=> NULL [0]=> array(5) { ["id"]=> int(1) ["username"]=> string(5) "coder" ["class"]=> int(8) ["userid"]=> string(1) "1" ["text"]=> string(3) "csá" } } [0]=> array(5) { ["id"]=> int(1) ["username"]=> string(5) "coder" ["class"]=> int(8) ["userid"]=> string(1) "1" ["text"]=> string(3) "asg" } } [0]=> array(5) { ["id"]=> int(1) ["username"]=> string(5) "coder" ["class"]=> int(8) ["userid"]=> string(1) "1" ["text"]=> string(5) "asdfh" } } [0]=> array(5) { ["id"]=> int(1) ["username"]=> string(5) "coder" ["class"]=> int(8) ["userid"]=> string(1) "1" ["text"]=> string(4) "asdh" } } [0]=> array(5) { ["id"]=> int(1) ["username"]=> string(5) "coder" ["class"]=> int(8) ["userid"]=> string(1) "1" ["text"]=> string(2) ":D" } } [0]=> array(5) { ["id"]=> int(1) ["username"]=> string(5) "coder" ["class"]=> int(8) ["userid"]=> string(1) "1" ["text"]=> string(2) "új" } } [0]=> array(5) { ["id"]=> int(1) ["username"]=> string(5) "coder" ["class"]=> int(8) ["userid"]=> string(1) "1" ["text"]=> string(2) ":D" } }
Mivel dupla tömb ezért így is próbálkoztam, de nem jó ...
$adat = $memcache->get("uzenofal");
foreach($adat as $valami) {
foreach($valami as $kulcsom) {
echo $kulcsom["text"];
}
} -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16231 üzenetére
De már megint mi a frász ez a kód?
Miért raksz egy foreach-ciklust a tömb-definiálásba?Csak hogy konkretizáljuk, én így értettem, hogy merge-ölöd a tömböt (tehát összefűzöd) a korábbi értékekkel, először lekérve a korábbi értéket, majd replace-elve (persze ellenőrizd először, hogy van-e már feltöltve egyáltalán ilyen érték!):
// korábbi értékek
// http://hu1.php.net/manual/en/memcache.get.php
// eszerint a get-nek array-t kell megadni, ha array-t vársz
$conversations_before = $memcache->get(array('uzenofal'));
// új értékek
$conversations_current = array(
array('id'=>1, 'text'=>'qwe'),
array('id'=>1, 'text'=>'ret'),
);
// ellenőrzöd, hogy van-e egyáltalán már ilyen érték feltöltve, mert csak akkor lehet replace-elni ezzel a kulccsal később!
// összefűzöd a két tömböt
$conversations = ($conversations_before !== FALSE) ? array_merge($conversations_before, $conversations_current) : $conversations_current;
// replace, ha van már ilyen kulcs, set, ha nincs még
if($conversations_before !== FALSE) {
$memcache->replace('uzenofal', $conversations, MEMCACHE_COMPRESSED, 999);
}
else {
$memcache->set('uzenofal', $conversations, MEMCACHE_COMPRESSED, 999);
}Persze ezt most csak kézzel írtam, nem teszteltem, de a gondolatmenet remélem átjött.
Szóval vág? -
tothjozsi96
addikt
válasz
Sk8erPeter #16230 üzenetére
De, tehát ezt a szerver tárolja.
Szóval mindenki "kliens" látja."Miért nem kéred le felülírás ELŐTT az előző értéket, fűzöd hozzá ehhez a tömbhöz az új értékeke"
Ezzel próbálkozok, de nem megy ...
ÁÁÁÁÁÁÁÁÁÁÁ
De így most szupi!!!$valami = array(
array("id" => $_GET["id"], "text" => $_GET["text"]));
foreach($valami as $gecike) {
$akarmi = array(
array("id" => $gecike["id"], "text" => $gecike["text"]),
array("id" => 5, "text" => "mindegy"),
array("id" => 10, "text" => "asdasd"),
);
}Tehát most:
1valamicske
5mindegy
10asdasdEzt írja a böngésző és:
http://localhost/?id=1&text=valamicskeSzóval kiírja az összes értékét a tömb-nek, jöjjön a memcache rá és lássuk hogy jó-e.
Izgulok. -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16228 üzenetére
Én értelek, csak te nem értesz.
Miért nem kéred le felülírás ELŐTT az előző értéket, fűzöd hozzá ehhez a tömbhöz az új értékeket, és replace-eled EZUTÁN a korábbi tömböt? Első körben.
Vagy most az a baj, hogy ha csatlakozik egy másik kliens, akkor annál még nincs beállítva ez az érték, vagy mi? -
tothjozsi96
addikt
Tehát, egyszerű példával mutatom.
Van egy ilyen kódom:
$akarmi = array(
array("id" => 5, "text" => "mindegy"),
array("id" => 10, "text" => "asdasd"),
);
foreach($akarmi as $cucc) {
$conversations = array(
array("id" => $_GET["id"], "text" => $_GET["text"]),
array("id" => $cucc["id"], "text" => $cucc["text"]),
);
}
foreach($conversations as $beszelgetes) {
echo $beszelgetes["id"] . " - " . $beszelgetes["text"] . "<br />";
}És ebből ez jön vissza:
1 - valamicske
10 - asdasdTehát, az 1-es mező az GET-el megvan adva, szóval
http://localhost/?id=1&text=valamicskeÉs amint látszik az 5-ös kimarad de a 10-est beírja.
-
tothjozsi96
addikt
válasz
Sk8erPeter #16227 üzenetére
Nem értjük egymást.
Nekem az a problémám hogy nem tudom tárolni a régebbi bejegyzéseket is.
Mindig csak az ujjat írja fel, a régi megy a levesbe.Tehát, a memcache set úgy működik hogy mindig újra írja az egész kulcs értékét.
Na most, így mindig elveszik az "előző" üzenet.Tehát, valahogy tárolnom kell a GET tartalmát és a memcache előző tartalmát.
Így érted? -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16225 üzenetére
Jó, hát most nem tudom tesztelni, akkor használd a replace-t, úgy, hogy a módosított tömböt rakod a helyére, és kész, első megközelítésként jó lesz, aztán szépíted, ha lehet. Direkt azért linkeltem az előbb, ne csak a hsz. felét olvasd el.
(#16226) : Ez a kód most remélem csak egy rossz vicc volt!
-
tothjozsi96
addikt
Közben kezdek rájönni a megoldásra.
$conversations = array(
array("id" => $id, "text" => $text),
foreach($cache as $ertek) {
array("id" => $ertek["id"], "text" => $ertek["text"]),
}
);
$memcache->set("uzenofal", $conversations, false, 999);Tehát kell a tömb-be egy foreach ami külön létrehozza a sorokat és így tárol.
Így jó is lenne az üzenőfal szerintem!!! De viszont valami hiba van, mert semmit se jelez ...Gondolom valami szintaktika hibás mert array(), foreach hááát ...
-
tothjozsi96
addikt
válasz
Sk8erPeter #16224 üzenetére
Kicsit megnézegettem ezt a Memcache->add-ot.
Ez kb. arra jó hogy egyszer beállít egy fix értéket, ami utána nem módosul, max. ha lejár a memcache ideje.
Akár mit írok be már nem írja felül az értékét a kulcs-nak.Jelen esetben nem jobb mint a set ...
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16223 üzenetére
Fontolóra vehetnéd a Memcache::add metódust is, így az előbbi megoldás helyett, ahol egy nagy tömbben töltöd fel a beszélgetéseket, akár egyenként is feltölthetnéd, tehát így:
foreach($conversations as $conversation) {
echo $conversation["id"] . " - " . $conversation["text"] . "<br />";
$memcache->add('beszelgetes', $conversation, MEMCACHE_COMPRESSED, 99);
}Próbát megér, még nem használtam, majd írd meg, ez mit eredményez, ha lekéred az adatokat. Így elvileg bármikor tudsz hozzáadogatni, nem írja fölül, mint a set.
(Ott van még a replace-metódus is egyébként, ha majd az kéne, de ezt próbáld meg előbb.)Egyébként fontolóra vehetnéd valamilyen NoSQL-megoldás használatát is (mint pl. a mongoDB), az ilyen feladatokra szintén nagyon hatékony tud lenni (lásd Facebook).
-
tothjozsi96
addikt
válasz
Sk8erPeter #16222 üzenetére
Oké, mindjárt megnézem mit csinál erre.
Jó lenne nagyon ez a memcache üzenőfal.
Kicsit már lemondtam róla.Na, így már faxa!!!
array(4) { [0]=> array(2) { ["id"]=> int(1) ["text"]=> string(11) "első üzenet" } [1]=> array(2) { ["id"]=> int(2) ["text"]=> string(14) "második üzenet" } [2]=> array(2) { ["id"]=> int(3) ["text"]=> string(15) "harmadik üzenet" } [3]=> array(2) { ["id"]=> int(4) ["text"]=> string(15) "negyedik üzenet" } }
Ezt adja vissza var_dump-al, tehát működik.
Már csak azt kellene megfejtenem hogy hogy mentsem el az új adatot és a régit egyben! -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16221 üzenetére
Ő, de miért nem magát a $conversations tömböt tárolod, úgy, ahogy van?
http://php.net/manual/en/memcache.set.php
a függvény fejléce a doksiban:
bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )
Mint látható, a második paraméter "mixed", tehát nincs korlátozva, hogy milyen típust állíthatsz így be.
Próbáld ki ezt (nem tudom most tesztelni):foreach($conversations as $beszelgetes) {
echo $beszelgetes["id"] . " - " . $beszelgetes["text"] . "<br />";
}
$memcache->set("beszelgetes", $conversations, false, 99);A $conversations tömbhöz meg értelemszerűen hozzáadhatsz, illetve abból törölhetsz, aztán újból beállíthatod az előbbi módon (elvileg jónak kéne lennie).
Egyébként itt a harmadik paraméternél nem lenne jobb false helyett használni esetedben pl. a MEMCACHE_COMPRESSED vagy más konstanst?
http://stackoverflow.com/questions/2105663/what-is-compression-for-in-phps-memcache/2106096#2106096U.i.: plíz használd a Programkód gombot, miután kijelölted a kódot! Köszi!
-
tothjozsi96
addikt
Úgy nézem hogy sajnos nem fog működni ez a full memcache üzenőfal.
$conversations = array(
array("id" => 1, "text" => "első üzenet"),
array("id" => 2, "text" => "második üzenet"),
array("id" => 3, "text" => "harmadik üzenet"),
array("id" => 4, "text" => "negyedik üzenet"),
);foreach($conversations as $beszelgetes) {
echo $beszelgetes["id"] . " - " . $beszelgetes["text"] . "<br />";
$memcache->set("beszelgetes", array("id" => $beszelgetes["id"], "text" => $beszelgetes["text"]), false, 99);
}$memoriaban = $memcache->get("beszelgetes");
var_dump($memoriaban);Így megnéztem, és csak a negyedik üzenetet tárolja, tehát nem jó ...
Nem tudom hogy lehetne tárolni a régieket, mert máshogy nem lehet kiolvasni az összeset csak foreach-al.
-
tothjozsi96
addikt
válasz
Sk8erPeter #16219 üzenetére
Megvilágosodtam kicsit, értem már hogy kell kiolvasni, de van egy problémám.
Hogy tároljam úgy hogy az előző üzenetek is megmaradjanak???
Mivel a memcache úgy működik hogy van 1 kulcsom és azon belül vannak az adatok.
Na most, hogy tároljam az előző üzeneteket is?
Így lehetne hogy $memcache->set("uzenofal", $_GET["text"] . $regiuzikCsak így az a baj hogy nincsen elválasztva hanem egybe van az összes üzenet.
Mert . van ott, de ha beírom hogy , akkor nem menti el.Ezt nem értem hogy lehetne ...
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16218 üzenetére
Úgy értettem, hogy nem stimmel az a mondat, hogy "Nyilván jquery-vel látszik csak a különbség", mert nincs köze a jQuery-nek ahhoz, hogy miért gyors a dolog. Azért gyors, mert a memóriában tárolsz, onnan olvasol, és nincs ott az adatbázis-kezelési overhead. Plain JavaScripttel, meg teljesen más megközelítéssel is meg lehetne írni az egészet, a lényeg a gyorsaságban jelen esetben a szerveroldal (mert az a szűk keresztmetszet, a kliensoldali kód nyilván gyors, hacsak nem egy szutyok).
Jé, most lettem PH! félisten, atyaúristen.
-
tothjozsi96
addikt
válasz
Sk8erPeter #16217 üzenetére
Mivel ez az üzenőfal iframe-el működik ezért alapból túl nagy sebesség különbözet nincsen ránézésre.
Tehát egy átlag felhasználó nem fogja észre venni ...
Köszi, és megnézem! -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16214 üzenetére
Ennek itt mi értelme van? Ha már tényleges felhasználás a cél, akkor miért nem egyértelműen használod fel a kulcsokat, miért általánosan akarsz végigmenni a tömbön? A másik, hogy remélem, ez a tömb csak példa, és nem úgy néz ki a gyakorlatban, hogy összekutyulva asszociatív tömb és numerikus kulcssal ellátott tömb egyben. Akkor már miért nincs az 5-nek, meg a "mégvalami"-nek is valami normális indexe? Ha tényleg nincs, hát akkor adjál nekik (nem egy CMS által generált kódot használsz, ahol néha ilyen ocsmány kutyult tömböket használnak, hanem te írod az egész kódot), ha van, akkor meg aszerint használd a kulcsokat, ne általánosan akarj végigmenni foreach-ciklussal. Legalábbis az elég furcsa, ha az a valódi felhasználás, hogy igazából nem is tudod egyértelműen már a kódból, hogy mi is van a tömbben.
Egyébként már írták neked, hogy használd tömbök tömbjét, miért nem teszed?
Most nem is tudom, hogy működik a megoldásod (vagy ez csak példakód?). Sőt, ami szebb lenne, miért nem használod inkább objektumok tömbjét?
A tömbök tömbje mondjuk ilyen lehetne:
$conversations = array(
array("id" => 5, "text" => "asdasdasd"),
array("id" => 6, "text" => "blabla"),
);
de ez finoman szólva nem valami szép, inkább objektumok tömbje kéne. Szóval definiálnál egy osztályt, amiben értelmesen tárolhatnád az adatokat, lenne több attribútuma, aztán példányosítanád. Ezerszer nagyobb rugalmasságot kapnál cserébe.(#16213) : Nem "ágyazott" foreach-ciklus, hanem EGYMÁSBA ágyazott ciklus. Ha nem lenne egyértelmű, ez két egymásba ágyazott foreach-ciklus (és ezt a végtelenségig lehet bővíteni):
foreach(...) {
foreach(...) {
// ...
}
}(#16216) :
"Nyilván jquery-vel látszik csak a különbség"
Hogy mi van?Mégis mi a frász köze lenne a jQuery-nek a dolog gyorsaságához?
-
-
DNReNTi
őstag
válasz
tothjozsi96 #16214 üzenetére
Van valami különösebb oka annak, hogy adatbázis helyett ezt a megoldást választottad?
-
tothjozsi96
addikt
Ti ezt hogy íratnátok ki úgy hogy az id szerint törje a sorokat és hozzá legyen rendelve a text???
$tomb = array("id" => 1, 5, "text" => "valami", "mégvalami");
foreach($tomb as $kulcs => $value) {
echo $value . "<br />";
} -
tothjozsi96
addikt
válasz
Sk8erPeter #16212 üzenetére
Néztem a var_dump-al és print_r-el is, szépen kiír mindent, de értelemszerűen ürítve lenne a fal, igazából naponta törlődne a memcache-ből az értéke, mellesleg txt fájlba van mentve minden napról mentés is hogyha valami fontosról volt szó vagy valaki káromkodott és törölte.
Meg próbálom ezt az "ágyazott foreach-ciklus"-t megvalósítani.
Köszi! -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #16211 üzenetére
Már szó volt a tömbök tömbjéről, és ehhez értelemszerűen két egymásba ágyazott foreach-ciklusra lesz szükséged, hogy normálisan elérd a tömbben tárolt tömb kulcsait/értékeit. Már ha jól értem, mit szeretnél, hogy először csak mindent jól ki akarsz íratni, és annyi; bár lehet, hogy félreértelek, jó lenne tudni, nálad mit jelent az, hogy $value...
(Na, látod, ez a hátránya az ilyen fos változóneveknek.
) Egyébként hogy értelmesen lásd, mit tartalmaz egy tömb, csak egy gyorsteszt erejéig debuggolhatnál, vagy írasd ki az értékét var_export()-tal, print_r()-rel, var_dump()-pal, stb... (Nyilván aztán amint megtudtad, mi van benne, ezeket a sorokat selejtezd ki, amúgy is illik inkább normálisan debuggolni a kódot, nem kiíratni minden hülyeséget.)
De lehetőleg felejtsd el az ilyen változóneveket, mint az $array, meg $value, mert ezek a nevek semmit nem mondanak a változók tartalmáról, így ha ránézel a kódra, mindig előbb el kell gondolkodni rajta, az mit is tartalmaz pontosan. Nem kell félni a hosszú, beszédes változónevektől, SŐT."Elég sokat terhel az SQL fal, és így szinte 0% load.
"
Hát ha minden a memóriában tárolódik, és onnan is kell kiolvasni, akkor nem csoda, mivel semmiféle adatbázis-kapcsolódási, oda való feltöltési (lockolási, stb.) overhead nincs a dologban. Viszont ahogy Athlon64+ említette, épp emiatt ne felejtsd el a túl régieket törölni, különben szép kis memóriahasználatod lesz.(#16205) kemkriszt98 :
Akkor fasza, ha megoldódott, viszont az echo után használj már szóközt, háthogynézezmárkianélkül. -
tothjozsi96
addikt
Lejárt a szerk. idő
De megnéztem így:
foreach($adatok as $array => $value) {
print($value . "<br />");
}Így kiír mindent, de viszont úgy tördeli a sorokat ahogy vannak az értékek, azt nem tudom hogyan tudom kiolvasni külön-külön, tehát most egy sorban van egy adat.
Nekem meg úgy kellene hogy soronként és egy sor például: date, username, textNem tudom hogy hogyan tudnám megoldani.
Elég sokat terhel az SQL fal, és így szinte 0% load. -
tothjozsi96
addikt
válasz
Peter Kiss #16209 üzenetére
Ez a lényeg:
Adatokat innen nyerem ki:
$adatok = $memcache->get("uzenofal");És így kiír mindent szépen.
print_r($adatok["date"] . "<br />" . $adatok["text"]);De így egybe írja ki, nekem meg sor tördelve kell!
-
Peter Kiss
őstag
válasz
tothjozsi96 #16208 üzenetére
Mutass kódot.
-
tothjozsi96
addikt
válasz
Peter Kiss #16207 üzenetére
Ez már megoldva, de viszont hogy írassam ki???
Mert foreach() nem jó valamiért ... -
Peter Kiss
őstag
válasz
tothjozsi96 #16206 üzenetére
Tömbök tömbjét tárolod mondjuk (a set() második paramétere)?
Annyit kell csak tenned, hogy a túl régi üzeneteket mindig takarítsd ki előtte.
-
tothjozsi96
addikt
Lenne egy kérdésem, hátha valaki tud segíteni.
Éppen egy memcache üzenőfalat írok, tehát semmi féle sql nincs benne.
Az a bajom vele hogy mindig csak az új adatokat írja be, gyakorlatilag szépen írja is amit kell neki csak nem tudom hogy hogyan tároljam el a régieket is ...Tehát van ez a sor:
$memcache->set("uzenofal", array("date" => time(), "class" => $class, "userid" => $userid, "username" => $username, "text" => $text), false, 999);És nekem kellene a régi adat, tehát így mindig csak egy üzenet lesz eltárolva ami a legújabb, próbáltam úgy is hogy array("date" => time(), $cache["date"]) ...
De így se jó, nyilván az $cache = $memcache->get("uzenofal")-al ...
Aki ilyen nagy tömb szakértő vagy ért hozzá annak megköszönném ha segítene!Szerk.:
Közbe rájöttem hogyha nem nem elválasztó jelekkel csinálom hanem ponttal tehát time() . $cache["date"] akkor így már jó ...
De nem tudom hogy írassam ki az adatokat. -
kemkriszt98
tag
válasz
kemkriszt98 #16204 üzenetére
így módosították a parancsot és végre valahára működik
wget --delete-after http://artclublumir.com/cron/cron.php > /home/artclubl/public_html/cron/cron_log.txt -
kemkriszt98
tag
válasz
Sk8erPeter #16203 üzenetére
1. Az if-nek az a története, hogy mikor anno ajánlottad a mysql_connect() helyett a PDO-t akkor még feltett szándékom volt NEM megtanulni a PHP-t így nem is nagyon néztem, hogy mit vágok ki a példakódokból... de át fogom írni úgy ahogy az előbb tanácsoltad...
2. Bemásoltam itt
3.Igen, ha beírom a böngésző címsorába írom vagy parancssorból futtatom akkor minden tökéletes.
4.A beírt parancsot is megosztottam (akkor te is hozzászóltál) és azt mondtátok, hogy jó... mást meg nagyon nem írhattam el mert a pontos idő beállítása grafikus felületen történik...Egyébként azóta a szolgáltató közölte, hogy be kell állítani a portod de úgy se nagyon működik....
-
Sk8erPeter
nagyúr
válasz
kemkriszt98 #16189 üzenetére
Ez az if($send) egy elég értelmetlen feltétel, főleg, hogy már ezelőtt a sor előtt az execute-tal végre próbálsz hajtani egy műveletet, és ha ez a változó mondjuk NULL, akkor már korábban kapsz erre az arcodba egy hibaüzenetet (mivel nyilván NULL értékkel rendelkező változón nem igazán lehet metódust meghívni). Meg azt írtad, dobódik egy kivétel, "Connection timed out" üzenettel. De másold már be a PONTOS, teljes hibaüzenetet!
Még valami:
$con = new PDO('mysql:host=mysql5.hostbase.net;dbname=artclubl_luminita','*','*');HELYETT így kellene inicializálnod a PDO-t:
$con = new PDO(
'mysql:host=mysql5.hostbase.net;dbname=artclubl_luminita',
"*",
"*",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;',
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
)
);A PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION azért érdekes, hogy kivétel dobódjon probléma esetén, és ne ilyen béna if-else ellenőrzésekre legyen szükség. Emiatt pedig try-catch blokkba kell raknod az egészet, és megfelelően loggolni a hibaüzeneteket.
Itt azt írod, hogy "direkt URL-lel" megy. Tehát ha szépen beírod a böngésződ címsorába, akkor az UPDATE-művelet is sikeresen lefut, nincsen időtúllépés?
Sőt, ha parancssorból hajtod végre, akkor is sikeresen lefut az UPDATE-művelet?
Magyarul egyedül akkor van probléma, ha a tárhelyszolgáltató admin-felületén szerkesztgetett, oda beírt ütemezett feladat futna le? Igazából erről olyan sok részletet nem osztottál meg, hogy hogyan csináltad, arra lehetne tippelni, hogy elrontottál valamit a szerkesztéskor, de tényleg csak tippelgetni lehet ennyi alapján.(#16199) PumpkinSeed:
"Nem láttam még olyan oldalt aminek ez hozta volna meg a sikert."
Én igen, SoundCloud, YouTube, ...
(Jó, értem én...)
-
emitter
őstag
Sziasztok!
Ha valakinek van kedve és ideje, a jarokelo.hu közösségi ügybejelentő weboldalnál php-programozót keresnek (önkéntes munkában): link
Új hozzászólás Aktív témák
Hirdetés
- Shield TV-t csinált a Shieldből az NVIDIA
- Ízléses, masszív és praktikus mikrotorony jött a Jonsbo műhelyéből
- Milyen okostelefont vegyek?
- Milyen routert?
- Honor Magic6 Pro - kör közepén számok
- Fujifilm X
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- OLED monitor topik
- Napelem
- Everest / AIDA64 topik
- További aktív témák...
- Samsung Galaxy Xcover 5 64GB, Kártyafüggetlen, 1 Év Garanciával
- Beszámítás! Lenovo Legion Slim 5 16AHP9 notebook - R7 8845HS 16GB RAM 512GB SSD RTX 4060 8GB Win11
- Ultimate előfizetés új fiókra akár 2105 Ft/hó áron! Azonnali, automatizált aktiválással, csak Nálam!
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- Konzol felvásárlás!! Playstation 5, Playstation 5 Pro
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest