Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz Dave-11 #14724 üzenetére
php.ini fájlban legyen engedélyezve a két megfelelő extension:
extension=php_pgsql.dll
extension=php_pdo_pgsql.dllez a két bejegyzés legyen benne!
A MySQL és PostgreSQL szerverek pedig futhatnak egymás mellett nyugodtan, mert alapértelmezetten más porton kommunikálnak (pont a konfliktus elkerülése érdekében).Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #14753 üzenetére
"Ez egy PostgreSQL tömb, annak ez a formátuma. Tényleg eléggé hasonlít a JSON-ra"
Hát szerintem nem a JSON-re hasonlít, hanem pont egy tömbinicializációra, ugyanúgy, mint például C-ben/C++-ban/C#-ban/Javában/stb... általában JSON-ben az objektum kulcs-érték párok gyűjteménye, ez pedig nem az.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #14758 üzenetére
Sejtettem, de itt nem szögletes zárójelek vannak, és nincsenek idézőjelek. Csak azért jegyeztem meg Trisztánnak, mert kiderült, hogy PostgreSQL tömbről van szó, annak a szintaktikája meg végül is teljesen indokolt, a JavaScriptes tömbökre meg ez speciel pont kevésbé emlékeztet. A json_encode-dal meg végképp nem tudom, mit akar kezdeni ebben az esetben.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #14760 üzenetére
Ezt olvasd el, generáltasd le, és akkor láthatod, milyen útvonalat kell megadnod:
http://tools.dynamicdrive.com/password/Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #14763 üzenetére
"Nem az útvonal a legnagyobb probléma, vágom ám, hogy hogyan működnek az útvonalak"
Ömm, pont azért linkeltem, mert ezek szerint mégsem vágod. Ott le van írva a módja...
Egyébként ha azt írod, hogy vágod, akkor miért kérdeztél rá? (Idézlek: "Még egy kérdés: a .htaccess a public_html mappa gyökerében van, a .htpasswd fájlt pedig egy mappával feljebb, a gyökér mappában van ("/"). Jól írtam az útvonalat?")"akárhova rakom a auth kódot a .htaccess-ben, mindig internal server error-t kapok"
Igen, ha rossz az útvonal-megadás a fájlhoz, akkor teljesen "normális", hogy 500 Internal Server Error a büntetésed.
De egyszerűbb lett volna ismét Guglizni.
http://httpd.apache.org/docs/2.0/mod/mod_auth.html#authuserfile
"If it is not absolute (i.e., if it doesn't begin with a slash), it is treated as relative to the ServerRoot."
Lényeg: abszolút elérési útvonal kell a document rootodhoz képest eggyel visszábbra, mert azt írod, oda pakoltad a .htpasswd-fájlt (egyébként jól tetted, hogy nem a publikusan elérhető könyvtárba pakoltad).Valami ilyesmi lesz az egész:
AuthName "Azonositsd magadat, IDEGEN!!!!444negynegynegy"
AuthType Basic
AuthUserFile /home/akarmi/trisztanweboldala.hu/.htpasswd
AuthGroupFile /dev/null
require valid-userEbből persze az
AuthUserFile /home/akarmi/trisztanweboldala.hu/.htpasswd
a lényeg, ehhez képest a public_html útvonala ez lenne:
/home/akarmi/trisztanweboldala.hu/public_html
Remélem, így már érthető.Tehát amit csinálnod kell: pont a document rootban írasd ki a document root útvonalát:
echo $_SERVER['DOCUMENT_ROOT'];
ebből megtudod ezt az ilyesmi útvonalat:
/home/akarmi/trisztanweboldala.hu/public_html
és ehhez képest eggyel feljebb lévő útvonalat kell megadnod, a .htpasswd-del kiegészítve.Szerk.:
legalábbis ha jól értettem, nem az a probléma, hogy megkapod a bejelentkezéshez szükséges popupszerűséget a böngészőben, beírod a helyes adatokat, és utána kapsz szerverhibát, hanem már eleve az adott könyvtárhoz navigálásnál kapsz 500-as hibát, tehát még a bejelentkezésre való lehetőséget sem látod. Ugye?[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz fordfairlane #14765 üzenetére
Kösz, hogy leírtad ugyanazt, amit én, csak rövidebben
Sk8erPeter
-
Sk8erPeter
nagyúr
Ezt írtad, hogy abból, hogy
href="http://valami.hu/kep.jpg"
legyen az, hogy
href="http://valami.hu/kep.jpg" data-lightbox="example-2"
és kijelölted a lila részt, vagyis azt, hogy "http://valami.hu/kep".
Erre regexpet írni nem nagy szám, de az "example-2" szöveget honnan kéne szedni? Az a cél, hogy egyszerűen szó szerint example-2-t írjunk bele, ez nem csak egy minta, hogy arra az attribútumra kell majd a replace? Az example-2 szöveghez minek a "http://valami.hu/kep"? Gondolom valamit elírtál, de ezek fényében nehéz segíteni.
Nem az a cél, hogy a href-ben lévő lilán kijelölt részt cseréld a data-lightbox attribútumhoz? Ha igen, akkor miért kell a protokoll (http://), miért kell az elérési út, miért nem elég a fájlnév maga (jelen esetben a kep.jpg-ből a "kep")?
Mit replace-eljünk a lila részből?
Kicsit túl sok kérdést hagytál nyitva...[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Csak a jpg-kiterjesztésre keres (png- és többi képformátum szándékosan kizárva, hogy megfeleljen annak, amit írtál):
$count = null;
$returnValue = preg_replace('/(href=".*?\\.jpg")/i', '$1 data-lightbox="example-2"', $test_string, -1, $count);A $count változó csak azt tartja nyilván, hogy mennyi találat van, egyébként nem lényeges.
GYORSTESZT:
http://www.functions-online.com/preg_replace.html
$test_string = '<a href="http://valami.hu/kep.jpg">valami jpg-kép</a>
<div>asdlajkdsasjld</div>
<a href="asd/kep.jpg">valami jpg-kép</a>
<a href="/akarmi/asd/kep.jpg">valami jpg-kép</a>
<a href="/akarmi/asd/nem.jpg.png">nem jpg-kép</a>
';
$count = null;
$returnValue = preg_replace('/(href=".*?\\.jpg")/i', '$1 data-lightbox="example-2"', $test_string, -1, $count);EREDMÉNY:
<a href="http://valami.hu/kep.jpg" data-lightbox="example-2">valami jpg-kép</a>
<div>asdlajkdsasjld</div>
<a href="asd/kep.jpg" data-lightbox="example-2">valami jpg-kép</a>
<a href="/akarmi/asd/kep.jpg" data-lightbox="example-2">valami jpg-kép</a>
<a href="/akarmi/asd/nem.jpg.png">nem jpg-kép</a>[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Akkor lehet úgy, hogy például felsorolod azokat a képformátumokat, amik nálad előfordulhatnak, most csak azokat írtam bele, amik így hirtelen eszembe jutottak (jpg, png, gif, bmp, tif, tiff, ico, még egy csomó kiterjesztés van):
'/(href=\".*?\.(?:jpg|png|gif|bmp|tiff?|ico)\")/i'
Ez lesz az első paramétere a preg_replace()-nek.
Úgy tudod bővíteni több kiterjesztéssel is, hogy a | karakterrel választod el, és utánaírod az adott kiterjesztést, a fenti mintának megfelelően (a | karakter a "vagy"-ot jelenti).Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14776 üzenetére
Biztos azért, mert 125 van a fájlban.
(#14775) Tamoo :
örömSk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14781 üzenetére
És ebben a mondatban hol szerepel az, hogy a visszatérési értékét kellene felhasználni?
Angol amúgy megy? Mert nem meglepő módon a php.net az elsődleges dokumentációs forrás.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14785 üzenetére
Mármint az angol nyelvet nem szereted? Hát az kellemetlen, mert infósként nagyjából lehetetlen az angol nyelv értése és használata nélkül létezni.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz rootkiller #14798 üzenetére
Mentsd el session-változó(k)ba vagy adatbázisba az adott felhasználóhoz tartozó, megfelelő paramétereket, és az admin.php megnyitásakor ellenőrizd le, hogy az adott felhasználói azonosítóhoz lett-e már korábban elmentve ilyen paraméter-együttes - ha igen, töltsd be azt, ha nem, akkor pedig az alapértelmezett oldalt (tehát legyenek alapértelmezett paraméterek).
A session-változóba mentésnek természetesen hátránya, hogy adott böngészőhöz kötődik, míg az adatbázisba mentésnél akárhol jelentkezik is be, az admin.php megnyitásakor mindig az utoljára mentett paramétereket töltheted be számára.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz rootkiller #14811 üzenetére
Könyörgöm, használd már azt a nyomorult Google-t, folyamatosan kérdezel ilyen hülyeségeket, amiknek a megoldását nagyjából 10 másodperc alatt meg lehetne találni, de még ehhez is lusta vagy... Most komolyan, neked gyorsabb fórumra bepötyögni a hsz.-t 30 másodperc alatt, aztán várakozni, mint rátalálni a megoldásra 10 másodperc alatt?
A hibaüzenetet bepötyögve egyből rátalálhatsz a megoldásra, úgyhogy most házi feladatként rádbízom, hogy megtaláld. Drukkolok hozzá.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14814 üzenetére
"nincs valami jsfiddle oldalhoz hasonló ahova php-t lehet feltenni?"
Olyasmi:
http://ideone.com/Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14817 üzenetére
Szívesen, de azért úgy rakd fel ideone.com-ra, hogy az működjön is. Például kezdd a szokásos <?php nyitótaggal, meg nyilván helyi fájlokat ne próbálj megnyitogatni vagy írogatni (fopen, fwrite és társai felejtős), mert nem fog menni. (Ahogy jsFiddle-nél is hiába hivatkozol képforrásként helyi fájlra, nem fog menni (hacsak nem a jsFiddle szerverén valóban ott lévő fájlt include-olod).) Ott például helyettesítheted valami példakimenettel az adott függvényt.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14821 üzenetére
Fogalmam sincs, meddig tárolják. Eddig ritkán láttam ott 404-et, az valszeg amiatt volt, mert a szerző eltávolította. De lehet, hogy írják a honlapon a max. tárolási időt, keresd meg.
Amúgy már akartam kérdezni, miért játszadozol mindig fájlba írogatásokkal, abból olvasással? Ez a látogatószámlálósdi csak játék, még mindig a fájlba írogatást, olvasást gyakorolgatod? Vagy mi a célod vele?Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14824 üzenetére
"Lusta vagyok adatbázissal szenvedni (létrehozni, szenvedni az undorító karakterkódolással (amit nagyon gyűlölök))"
Ha a karakterkódolás szenvedés, akkor valamit eddig rosszul csináltál. Leírhatnád, hogy csinálod, és biztos kiszúrjuk a hibát.- PDO-val adatbázishoz kapcsolódás, meg a többi alapvető dolog itt van, Tele von Zsinór kolléga cikkében: http://maerlyn.eu/2011/12/03/pdo.html.
Ott van egyből az elején, már a kapcsolódás után:
SET NAMES UTF8
Magyarul itt a kapcsolat kódolását egyből UTF-8-ra állítod.
- A fájljaid karakterkódolása is legyen UTF-8 without BOM, ezt Notepad++-ban nagyon könnyen tudod ellenőrizni.
- A meta tagek is lehetőleg így legyenek beállítva a <head>-részben.
- A HTTP headert pedig módosítsd PHP-vel így még mindenféle kimenet előtt:
header('Content-Type: text/html; charset=utf-8');
- Ezenkívül az adattábláid is legyenek UTF-8-as karakterkódolásúak (collation), valamelyik utf8_ kezdetű ezek közül, amelyik kell.Igazából ennyinek elégnek kellene lennie, ha valamit nem felejtettem ki a listából.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14826 üzenetére
Nem, nem jó. Ha ilyesmikkel játszadoztál eddig, nem csodálom, hogy szívásnak érezted az egészet. Részletesen felsoroltam a teendőket ahhoz, hogy az UTF-8-karakterkódolással (és így a mindenféle nyelvben megtalálható specifikus karakterekkel, ékezetekkel, és egyéb, speciális karakterekkel) ne legyen problémád.
"Na én ezt nem akarom minden egyes gyakoroló feladatnál megcsinálni. "
Ezt remélem, csak viccnek szántad. Ne már. Legegyszerűbb módon legyen egy vagy több fájlod, amiben mindenféle ilyen lépést megcsinálsz, és ezeket egyszerűen include-old mindig az index.php-dban, és kész.
Ezen fájlok valamelyikében kiküldöd az UTF-8-as fejlécet (a header() fv. mutatott használatával), máshol megnyitod a kapcsolatot az adatbázissal (ezt is úgy, hogy már a kapcsolat elején beállítod az UTF-8-karakterkódolást, ahogy írtam; hogy singleton-mintán keresztül kommunikálsz az adatbázissal, ami esetleg nehezíti a unit testet, vagy más, az tök mindegy most ebben a fázisban még, mivel valszeg azt sem tudod, mi az a singleton vagy a unit test). Az előző step-by-step útmutató szerintem eléggé világos.A fájljaidnak alapértelmezetten amúgy is UTF-8 without BOM-kódolásúnak kellene lenniük, egyszerűen az általad használt fejlesztőeszközben állítsd be (bár a fejlesztőkörnyezeteknél ez az alap, csak az egyszerűbb, Notepad++-szerű szövegszerkesztőknél szokott default lenni az ANSI, mármint Windows-on), hogy mindig UTF-8 without BOM-kódolású fájlokat hozzon létre.
Az adatbázisban is érdemes (szerintem) alapértelmezettre állítani valamelyik utf8_ kezdetű collationt.
Nem hiszem, hogy ezek olyan bonyolult lépések lennének. Hidd el, hogy az összhaszon nagyobb lesz vele, mintha lusta vagy egyszer ezt az utat végigjárni. Például akkor megtanulsz adatbázist kezelni, és nem bohóckodsz fájlokba írogatással és azokból olvasással olyan műveletek esetén, amiket illene adatbázissal elvégezni.
Adatbázis-kezelési ismeretek nélkül manapság egy fejlesztő akár éhen is halhat.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #14830 üzenetére
Hogy ne lehetne már ilyet?
Javaslom, felejtsd el ezt a kutyult lekérési stílust, hogy asszociatív tömb és numerikus tömb keverve van (mysqli_result::fetch_all(MYSQLI_BOTH) vagy PDOStatement::fetch(PDO::FETCH_BOTH), PDO-nál utóbbi a default, mysqli-nél a MYSQLI_NUM).
Döntsd el, melyikre van szükséged, és ragaszkodj ahhoz. Valószínűleg a MYSQLI_ASSOC vagy PDO::FETCH_ASSOC fog kelleni legtöbbször. Akkor használd azt, csak indokolt esetben kutyuld a tömböt.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #14833 üzenetére
Ja értem, na jó, ez mentségedre szolgál. (Csak a kérdés első felére nincs mentség. )
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #14835 üzenetére
Hát igen, nem árt, ha néha az ember gondolkodik. Amúgy hidd el, ha néha elakadsz, akkor jót tesz egy 5 percnyi szünet, még akkor is, ha kapkodás van (tudom, milyen az), meg az, hogy leírod magadnak papírra az akár alapvető feladatot, és evidens dolgok is eszedbe fognak jutni, és utána a homlokodra b@szol, hogy ez hogy nem jutott eszedbe.
Sk8erPeter
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14865 üzenetére
Akkor most próbáld meg végiggondolni, hogy mit és miért írt DNReNTi úgy, ahogy. Oka volt rá, hidd el.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14871 üzenetére
Ezek szerint még mindig nem jött át, mit csinálsz rosszul. A query stringben legyen megadva a kép azonosítója. Ne sessionnel szórakozz, mert jelen feladatnál nem szabadna, hogy munkamenethez kötődjön, hogy melyik képnél jársz... Hogyan linkeled be az adott képet, ha mondjuk meg akarod mutatni ismerősödnek? Hogyan könyvjelzőzöd a megfelelő URL-t? (Az URL ugyanis jelen megoldásban BÁRMELYIK képnél is jársz, http://79.121.121.12:8080/imgshit/?elem=0 vagy http://79.121.121.12:8080/imgshit/?elem=1. SEMMI nem utal ebből arra, hogy pontosan melyik képet is kellene megjeleníteni.)
Ezeket gondold végig, és ennek alapján csináld meg.Korábban említetted, hogy GYŰLÖLÖD az adatbázis-kezelést ( ). Ugye ezt nem valami fájlbaírós bohóckodással oldod meg?
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14873 üzenetére
"Hogyan tudok úgy változót deklarálni, hogy annak nem adok értéket?"
Mi a célod?Egyébként nyugodtan kérdezz vissza, ha nem tiszta a magyarázat. Ha nem érted, ne szégyellj kérdezni.
Amiről beszéltünk, hogy látsszon az URL-ben az a kép, amelyiket meg kell jeleníteni. Például http://example.com/images/index.php?image_id=65432Mint látható, itt $_GET['image_id'] == 65432, és legalább az URL könyvjelzőzhető, elküldhető másnak.
Tudsz úgy lekérést írni, hogy adatbázisból ezt a képet kérd le, és az előtte/utána lévő akárhány elemet, amelyiket mondjuk thumbnailként szeretnéd megjeleníteni.
Vágod?Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14875 üzenetére
A megfogalmazásod csöppet furcsa és érthetetlen.
Nyilván nem fog működni, ha az adatbázisban a következő elem id-je nem pont a soron következő, plusz 1-gyel növelt szám, illetve az előző kép azonosítója nem épp az 1-gyel levont érték. Gyakran lesz ez a helyzet, mivel az adatbázisból töröl olykor az ember fia vagy lánya rekordokat. (Kukázol képet, ami nem kő'.)
Magyarul írj olyan query-t, amivel megkapod az előző és a következő pár képet is, meg az aktuálisat. Nálad mondjuk csak három kép jelenik meg: az előző azonosítóval ellátott, az aktuális, valamint a következő, és kész. Írj olyan query-t, ami ezt a hármat lekéri.Annak a mondatnak nem sok értelme van, hogy "ÉN azt nem értem, hogyan működik a $p változó léptetése a tag-en keresztül." A tag, amire gondolsz, egy link. Egyszerűen belinkeled a következő képazonosítót, úgy, hogy beleteszed a query stringbe (http://example.com/kepek/index.php?image_id=345, ahol 345 a következő kép azonosítója) azt az azonosítót, ami a következő kép azonosítója; ezt kaptad meg az előző bekezdésben emlegetett query-vel az adatbázisból. Az előzőre linkelés ugyanígy történik, csak az előző képhez tartozó id-vel.
Ha nem oké még mindig, kérdezz.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #14877 üzenetére
Hogy érted azt, hogy "nem működik"? Mi történik, amikor használod?
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #14879 üzenetére
Nem tom, ha nincs a disable_functions direktívában beállítva (amit írt Tele von Zsinór), akkor annyi, hogy más is írt ilyen parát.
Sk8erPeter
-
Sk8erPeter
nagyúr
Hali!
1. a deprecated mysql_ kezdetű függvényekről át kell állni mysqli-re vagy PDO használatára
2. a végéről szedd ki a <center> taget, nemcsak felesleges (mivel nincs nyitótag), hanem obsoleted elem is (nem használjuk ma már, CSS-sel oldjuk meg a középre igazítást)
3. a táblázatos megoldást elkészítettem neked egy kicsit rugalmasabbra, nem tudtam most kipróbálni, csak fejből írtam a dolgot, Notepad++-ba gyorsan bepötyögve, de remélhetőleg nincs benne hiba, tehát:AZ EREDETI
echo "<table>";
echo "<tr><th>ID</th><th>User</th></tr>";
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
echo "<tr><td><img src=\"gif/".$row['ID'].".gif\"></td><td>".$row['User']."</td></tr>";
}
echo "</table>";HELYETT írd ezt a kódban:
// elemek száma egy sorban
$nrOfItemsInARow = 10;
// megszámoljuk az elemeket a ciklusban, 0-ról indítunk
$nrOfItems = 0;
// táblázat nyitótagje
echo '<table>';
// ciklus (TODO: PDO+MySQL-re vagy mysqli-re minél előbb átállni)
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
if ($nrOfItems % $nrOfItemsInARow === 0) { // osztási maradék (akkor kezdünk meg egy sort, ha osztható $nrOfItemsInARow-val)
// lezárjuk az előző sort, amennyiben nem az első elemnél járunk
if ($nrOfItems !== 0) { // az első elemnél nyilván nem kell lezárni még semmit
echo '</tr>';
}
// megkezdjük a sort
echo '<tr>';
}
echo '<td>
<a href="http://prohardver.hu/tag/'.$row['ID'].'.html">
<img src="gif/'.$row['ID'].'.gif" alt="'.$row['ID'].' ('.$row['User'].')" title="'.$row['ID'].' ('.$row['User'].')" />
</a>
</td>';
$nrOfItems++; // elemek számát növeljük
}
// maradékos osztás
$rowsRemainder = $nrOfItems % $nrOfItemsInARow; // pl. 33 elem van, 33%10 === 3
$colspanFromRemainder = $nrOfItemsInARow - $rowsRemainder; // pl. 10-3 === 7 --> ennyi üres hely marad még, ezt ki kell tölteni
// kitöltjük a maradék oszlopokat is colspan-attribútum segítségével
// (lásd pl. korábbi példa: 7 elemnyi hely marad)
if ($colspanFromRemainder > 0) {
echo '<td colspan="'. $colspanFromRemainder .'"></td>';
}
// lezárjuk az utolsó sort
echo '</tr>';
// lezárjuk a táblázatot
echo '</table>';
echo '<hr />';
echo '<p>Összesen: <strong>'.$nrOfItems.'</strong> db</p>';
echo '<hr />';Kommenteztem is rendesen, így remélhetőleg gyorsan megérted a kód működését.
Ez így rugalmas, mert elméletileg (ha nem írtam el a kódot) amennyiben a táblázatban egy sorban lévő elemek számát 10-ről szeretnéd megnövelni vagy lecsökkenteni, akkor csak a $nrOfItemsInARow = 10; sorban kell megváltoztatnod a számot. A többi pedig igazodik ehhez, minden egyebet kiszámol.Ja, még egy pluszt hozzátettem: belinkeli a felhasználók adatlapját is (lásd <a> tag), ezt is tördeltem, amennyiben nincs rá szükséged, vagy nem jó az eredmény, egyszerűen szedd ki a linkelést. Ezenkívül az <img> tag kapott alt- és title-attribútumot, ahogy illik.
Ha valami nem tiszta, kérdezz.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz fordfairlane #14910 üzenetére
patternekről sztem nincs sok értelme itt beszélni Az én kódom is echózott gyorsmegoldás.
Sk8erPeter
-
Sk8erPeter
nagyúr
Köszönöm, remek, hogy mindezt elmondtad
Mondjuk eleve vicc, hogy most akkor kezdhetek el mentegetőzni, de felmerül a kérdés, hogy 1. miért nem csináltad meg szépen, ahogy illik (talán mert sok idő lett volna, és nincs kedved hozzá?) 2. ha mindenki így áll hozzá, és saját seggét vakarászva, utólag okoskodva kritizál, akkor a kérdezőnek hogy oldódik meg a problémája. Igaz, utólag aztán elszégyellheti magát, hogy hát bizony ő milyen tudatlan, és akkor jól megmondtad. Neki is, de azért nekem is, hát nehogy már.
Elmondtam az elején, hogy pár percnyi szabadidőmben adtam tüneti gyorskezelést. Egy büdös szóval nem utaltam rá, hogy ezt így kellene csinálni (a Notepad++-ba gyorspötyögős dolgokat nem tartom annak ). Az ilyen echózott megoldás gusztustalan lehet, igazad van, simán hívhatod spagettikódnak. Igazából szebb lett volna valami template-szerű megoldás, a fordfairlane által említett alternatív szintaktika, és így tovább. (De könyörgöm, nézz már rá a korábbi kódra. Remélem, nem várod el, hogy megtanítsam a kérdezőnek a PHP-alapokat is.) Jó, mondjuk a válaszolónak is felelőssége van abban, hogy az ember hogyan kódol a továbbiakban, ezt aláírom. (Ismét felmerül a kérdés: amennyiben mindenki minden architekturális és egyéb mintát, kódolási stílust a kérdezőknek meg akar tanítani, ki a tököm fog válaszolni? Nem beszélve arról, hogy a PDO-sítást sem végeztem el ilyen alapon, mert nincs se kedvem, se időm rá. Én rohadék.)
Viszont tényleg kíváncsian várom a gyorsmegoldásodat, amit 5 percbe sokkal szebben lehetett volna sűríteni, csak úgy, hogy ne használd fel a kódomat még csak részben sem, mert úgy utólag könnyű. Szóval kérlek, állj elő a mutatvánnyal 5 perc alatt, ami mindenféle architekturális elképzelésednek megfelel.(#14913) fordfairlane :
Hidd el, én is külön szoktam tenni, template-ezni (vagy ahhoz hasonló megoldást használni) már csak azért is kell, hogy az ember saját magát ne szopassa, meg azért, mert egyébként undormány kód születik. Ja, ez is ronda. (Ja, én is használom az alternatív szintaktikát.)[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Szívesen!
Várj, egy kicsit elszégyellem magam, mert cucka kolléga azt mondta, dádá lesz, mert úgy írtam választ, hogy nem mérlegeltem egy cseppet sem, hogy az a hozzáállás, hogy ha nem minden szempontból kifogásolhatatlan a válaszoló megoldása, akkor bele se kezdjek. Ja, nem, mégsem. Valahogy le tudom ejteni, ha neked megoldotta a problémádat. Legközelebb meg majd legfeljebb rábízzuk a kollégára a megoldást. Majd ő megírja a tutit. De igazából nem akarom folytatni a kakaskodást, mert tök értelmetlen, de azért a kellemetlenkedését itthagyta nekünk rossz utóízként a kolléga.
Na, visszatérve: cseppet sem tökéletes a megoldás sem "szépség" szempontjából, ahogy a többiek "finoman" céloztak is rá, de a lényeg egyelőre, hogy menjen, majd írd meg, mire jutottál!
Sk8erPeter
-
Sk8erPeter
nagyúr
Ez esetben én kérek elnézést, tényleg félreértettem a hozzászólásodat, eredetileg számomra eléggé oltósnak tűnt (mintha maga a gyorsmegoldás lenne a világ legrondábbja), de valószínűleg csak igen rossz pillanatban olvastam.
(#14918) fordfairlane :
Igaz, feleslegesen sértődtem be.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Most eme kérdés kapcsán kíváncsiságból nézegettem néhány WordPress-doksit, és most kikerekedett szemekkel olvastam ezt a napiszar.hu-színvonalú állítást:
http://codex.wordpress.org/I_Make_Changes_and_Nothing_Happens#See_Where_You_Are
"The die() command is probably the single most useful debugging tool available."Az igen. Gratulálok, WordPress, elég szomorú, hogy ilyen szegénységi bizonyítványt sikerült kiállítani magatokról.
Xdebug, egy normális IDE, rendes debuggolási procedúra? Áááá, ugyan már, az luxus.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz csabyka666 #14955 üzenetére
$sql = "SELECT * FROM tabla WHERE id=$value"; //ez így persze nem fut le, de a lényeget értitek...
hogyan lehetséges az, hogy a mai napig látni összefűzött query-ket (NAGY HIBA!!), amik a potenciális veszélyforrásokat szépen magukba foglalják? Úgy értem, régen sokkal inkább tele volt a net akkora szar tutorialokkal, amikből az ember kezdőként sem győzött kukázni, szelektálni, hogy na most melyikben bízzak - de ma már van Google által nagyon jól indexelt Stack Overflow, ahol szerencsére legtöbbször a fejére koppintanak annak, aki ilyen csúfságokat akar elkövetni, meg van számtalan tutorial, ahol elsők között hívják fel a figyelmet arra, hogy sose bízz a felhasználótól érkező vagy általa bármilyen módon módosítható inputban, amikor adatbázis-lekéréssel foglalkozol.
Nézz utána az SQL Injection fogalmának, aztán pedig a PDO-nak és a prepared statementeknek. Így nem kell tartanod SQL Injectiontől.
Normális esetben ez valahogy így nézne ki csatlakozás után:// csatlakozás
$db = new PDO(
'mysql:host=localhost;dbname=test_db', // test_db-t módosítsd a megfelelő adatbázisnévre
'root', // módosítsd
'1234', // módosítsd
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;', // egyből UTF-8-ra fogja állítani kapcsolódás után a karakterkódolást
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // kivételeket fog dobálni probléma esetén
)
);
$query = 'SELECT ez, az, amaz FROM tabla WHERE id=:id'; // inkább sorold fel a valóban szükséges mezőket, ne mindig a *-ot használd!!
$stmt = $db->prepare ( $query );
$stmt->bindValue( ":id", $value, PDO::PARAM_INT );
$stmt->execute();
foreach ($stmt as $row) {
echo 'ez: '.$row['ez'].', az: '.$row['az'].', amaz: '. $row['ez'];
}Itt láthatsz még bőven példát PDO használatára:
http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Executing_prepared_statements_in_a_loopItt bindParam()-ot használ:
$values = array('bob', 'alice', 'lisa', 'john');
$name = '';
$stmt = $db->prepare("INSERT INTO table(`name`) VALUES(:name)");
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
foreach($values as $name) {
$stmt->execute();
}Itt egy példa tranzakciók használatára:
try {
$db->beginTransaction(); // note that calling beginTransaction() turns off auto commit automatically
$db->exec("SOME QUERY");
$stmt = $db->prepare("SOME OTHER QUERY?");
$stmt->execute(array($value));
$stmt = $db->prepare("YET ANOTHER QUERY??");
$stmt->execute(array($value2, $value3));
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Nem nézegettem még a kódját ilyen szinten, de most elég nagyot csalódtam a WordPress-ben (legalább tudom, minek a kipróbálásával ne akarjam tölteni egy percemet sem ), hogy ilyen elképesztő ordas nagy baromság ott virít szépen a dokumentációban, ami elvileg arra való, hogy a fejlesztők és érdeklődők tanuljanak belőle. Először azt hittem, viccelnek, aztán majd ott lesz a vigyorgós fej, hogy jól van, csak vicceltünk, ne vegyél mindent olyan komolyan, de sajnos komolyan gondolják.
Ez az "olyan, mint a f*szom, egy igazi csődtömeg, bottal sem piszkálnám" mondatrészleted igen érdekesen hangzik, remélem, azt vágod. Furcsa egy (ön)kritika. Mondjuk ezen legalább jót röhögtem.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14946 üzenetére
Ezt ugye vágod?
Igaz, itt nem core módosításáról van szó, hanem egy moduléról, de a modulok kódjába is csak végső esetben kéne beletákolni, hiszen egy update során úgy, ahogy van, elúszhatnak a módosításaid (hiszen update-eled a modul teljes könyvtárát) - aztán szenvedhetsz vele, hogy az azóta esetleg jelentősen megváltozott kódbázisba valahogyan megint belehegeszd. Tehát saját modulból vagy sminkből éri meg ilyenkor módosításokat végezni.
VAGY ha úgy nem megoldható, akkor megnézed, van-e frissebb változat a modulból; megnézed az issue queue-ban, nyitottak-e már topicot az adott problémának drupal.org-on, a modul vonatkozó hibalapján, született-e már patch a hiba megoldására; ha nem nyitottak, nyitsz issue-t, beleírod a problémát, és annak megoldását egy patch formájában. Elsőre bonyolultnak hangzik, de nem az, gyorsan megvan. Cserébe segítettél a közösségnek, ha jó a patch, akkor elfogadhatja a fejlesztő, és committolhatja, majd ha pusholja, akkor jó esetben feltünteti a nevedet; mindenesetre a dev-ágban máris elérhető lesz a javításod.Egyébiránt nekünk még azt sem árultad el, hogy a Drupalból és magából a modulból hányas változatot használod. Meg hogy egyáltalán milyen fájl sorairól beszélsz...
Ezenkívül van Drupal topic.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz pakriksz #14965 üzenetére
Pont itt tettem fel a kérdést költőien, ezelőtt 3 hsz.-szel, hogy hogyan lehetséges, hogy a mai napig ennyi összefűzött query van a kódokban, mikor a normális tutorialok első helyen kellene, hogy felhívják a figyelmet rá, hogy ez így gáz.
Ez a "nem csinál semmit, de hibaüzenet sincs" biztos? Hogyan kéred le a hibaüzeneteket?
Egyébként meg ennek a szintaktikának:$sql="INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1";tulajdonképpen nem sok értelmét látom (még ha egyébként helyes is!), amikor a következő:
UPDATE stats SET downloads = downloads+1
WHERE ip=:userip AND user=:user;szerintem sokkal beszédesebb.
Itt a query-ben direkt használtam a prepared statementes szintaktikát, a másik belinkelt hsz.-emben láthatsz példát rá, hogyan kéne átírni ezt a kódodat, hogy ne legyen összefűzött a query (mivel lehet, hogy nem megbízható adat, ha pl. query stringből érkezik, mindig érdemes a legrosszabbra számítani).
Hogy hogyan ellenőrzöd, hogy sikeres volt-e a query, vagy pedig történt valami hiba, azt is meg kellene mutatnod.=========================
(#14966) PumpkinSeed :
nincs mit.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz pakriksz #14968 üzenetére
"Mint írtam, ha nincs benne azonos sor, akkor hozzá kell adni! Így az update nem jó ide."
Bocs, igazad van, én voltam a hülye, kevertem a REPLACE INTO ... SET ...-szintaktikával... Ami egyből be is illeszti az új sort, ha nincs olyan még.
De tulajdonképpen előnyt nem hoz ahhoz képest, amit most használsz, szóval a korábbit, amit írtam az UPDATE-tel kapcsolatban, inkább felejtsd el, bullshit, visszavonom."» "INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1"
Erre már ír hibát, méghozzá hogy "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':userip, :user, 1) ON DUPLICATE KEY UPDATE downloads = downloads + 1' at line 1""
Azért az jó, hogy kihangsúlyoztam, hogy ezt direkt PDO prepared statement-es szintaktikával írtam, és hogy nézd meg, amit itt írtam...
Nyilvánvaló, hogy ez így nem fog működni, amíg nem megfelelő módon használod.
A :userip-nek és a :user-nek a query-ben szükséges egy megfeleltetés, értéket kell adni neki a query előkészítése után, így működnek a prepared statementek. Előnyük, hogy az SQL Injection általuk nem lehetséges.
Direkt azért linkeltem be azt a hsz.-emet, mert ott írtam példákat, hogy lehet átírni PDO-sra a lekéréseket.De akkor berakom neked ide is, a saját példádhoz igazítva (ha el nem írom):
// csatlakozás
$db = new PDO(
'mysql:host=localhost;dbname=test_db', // test_db-t módosítsd a megfelelő adatbázisnévre
'root', // módosítsd
'1234', // módosítsd
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;', // egyből UTF-8-ra fogja állítani kapcsolódás után a karakterkódolást
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // kivételeket fog dobálni probléma esetén
)
);
$query = 'INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1';
$stmt = $db->prepare ( $query );
$stmt->bindValue( ':userip', $userip );
$stmt->bindValue( ':user', $user );
$stmt->execute();ez fog dobni egy exceptiont, amit try-catch-blokkal kellene lekezelned. A [B]rowCount[/B]-metódusra ez vonatkozik:
http://hu1.php.net/manual/en/pdostatement.rowcount.php#109891
"Daniel Karp ¶1 year ago
Note that an INSERT ... ON DUPLICATE KEY UPDATE statement is not an INSERT statement, rowCount won't return the number or rows inserted or updated for such a statement. For MySQL, it will return 1 if the row is inserted, and 2 if it is updated, but that may not apply to other databases."Tehát ha a korábbi kód után írsz egy ilyet:
$affected_rows = $stmt->rowCount();
Akkor ezek szerint MySQL esetén az $affected_rows 1-et fog tartalmazni, ha új sor lett beszúrva, illetve 2-t, ha update-elve lett egy korábban már beillesztett sor.
Így ellenőrizheted, mi a query-d eredménye.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #14970 üzenetére
Az előzőekhez még annyit, hogy PHP-ben nincsenek - pl. C-ből, C++-ból megismert - mutatók. Referenciák vannak:
http://www.php.net/manual/en/language.references.whatare.php"What References Are
References in PHP are a means to access the same variable content by different names. They are not like C pointers; for instance, you cannot perform pointer arithmetic using them, they are not actual memory addresses, and so on. See What References Are Not for more information. Instead, they are symbol table aliases. Note that in PHP, variable name and variable content are different, so the same content can have different names. The closest analogy is with Unix filenames and files - variable names are directory entries, while variable content is the file itself. References can be likened to hardlinking in Unix filesystem."
Ezeket amúgy érdemes átfutni:
http://www.php.net/manual/en/language.references.phpSk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #14975 üzenetére
"Ez talán még jobb is, mint a pointer. "
Ezt meg hogy érted, hogy "jobb, mint a pointer"?"Ezek után gyakrabban fogom alkalmazni, ahol ennek szükségét érzem. "
Hát azért nem kell ennyire megörülni neki, akkor használd, ha valóban szükséges, erőltetni nem kell.Sk8erPeter
-
Sk8erPeter
nagyúr
Új hozzászólás Aktív témák
- Ryzen 7 7700X + Sapphire Radeon 6950XT Toxic 16GB + 32GB 6400Mhz RAM + 3TB SSD + minden vízzel hűtve
- Zyxel Zyair G-4100 v2 802.11g vezeték nélküli hot Spot dobozban
- BOMBA ÁR! Dobozos új Hp Envy x360 garanciával! /2in1/Ryzen5-5625U/16GB/512 SSD/FHD/OLED/TOUCH/GARI
- Jó Áron Eladó Asus Rog Strix Ryzen 7 6800HS 16gb ddr5 RTX3050 FHD 300hz Gyátói garancia
- iMac 21,5 2013 vége I Core i5 2,7 GHz I Intel Iris Pro I 8GB RAM I 256GB SSD