- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- VoidXs: Tényleg minden játék optimalizálatlan?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- hcl: MS Office365 Linuxon
- gban: Ingyen kellene, de tegnapra
- Mr Dini: Mindent a StreamSharkról!
- erkxt: A Roidmi becsődölt – és senki nem szól egy szót sem?
- Hieronymus: Három júniusi képem
Új hozzászólás Aktív témák
-
Sixkiller6
őstag
jó reggelt,
kérdésem lenne (mint topic-nyitó
), évek óta nem nyúltam php-hez, most viszont egy kisebb családi céges igényt kéne kielégítenem. Következő a probléma:
php-s weblap, mysql a háttérben
a db-ből érkező adatok ékezetes betűi nem jelennek meg, pontosabban mindenféle krikszkrakzsszal. a html rész charset-je iso-8859-2, a mysql db utf8
phpmyadminon keresztül az adatbázisban lévő adatok jól néznek ki.bármi tipp? ha a böngésző karakterkódolását átállítom, akkor viszont a weblap ékezeteiből lesz mosolygós csilingelős kínai, de jók az adatbázis-adatok.
mit szúrok el?
ui: ja, egy másik régi projektemet gyorsan feltettem, az teljesen jól megy.
-
rt06
veterán
válasz
PazsitZ #5341 üzenetére
marmint ha azt a kodot egy nyito, illetve zaro php tag-gel beirod a formazoba, neked nem dob hibat?
es igen, egymasba agyazott switch-case alatt arra gondolok, es azert nem illik, mert switch case-be nem lenne szabad akkora kodreszeket irni, mint amekkorakat szoktam, abban csak egy fgv hivas, vagy ertekadas szabadna, hogy szerepeljen...elvileg (pmd is szokott hisztizni miatta)
-
Speeedfire
félisten
válasz
Sk8erPeter #5337 üzenetére
Értem, dolgozni lehet vele, módosítani is, de azt nem éppen díjazza a php, illetve nem szakszerű.
A switch-case-nél meg lehet adni másik adatot is?
pl ha 2 feltételem van, néha 3-4 is?
Mondjuk ha csak ajánlott akkor annyira nem is lényeges számomra, nagyon megszoktam a már az if-elseif-else ágakat.Látom egy egész lavinát indítottam el.
-
zka67
őstag
válasz
PazsitZ #5344 üzenetére
Szerintem zárjuk le ezt a vitát, lassan kénytelen leszek belátni, hogy igazatok van, vannak más módszerek is.
A példa nem volt a legjobb, arra szerettem volna kilyukadni, hogy nagyon sok programozó nem figyel oda, hogy mekkora gépigénye lesz a programjának. Hogy hogyan jutottam el ide a get-től, ne kérdezzétek
-
PazsitZ
addikt
Hozzászólva a $_GET, $_POST, $_COOKIE, $_REQUEST tömbökhöz. Valóban csak fenntartásokkal érdemes piszkálgatni ezeket a tömböket.
Azt alapból nem látom jó módszernek, a bemeneti adatokat rögtön escapeljük pl.
Ami megy az adatbázisba azt kell escapelni, ami pedig az outputra azt -speciális eseteket leszámítva- specialchar-al ellátni.Itt miért jobb, hogy átrakod a $_GET tömbbe?
A memória panaszodnak pont ellentmondasz jelen példával, mivel a változók "duplikálásával" pontosan a memóriát eszed.
De példa az általad írt sorra:if (isset($_REQUEST["page"])) $page = $_REQUEST["page"];
else $page = 0vagy
if (isset($_REQUEST["page"])) $page = (isset($_POST["page"])) ? $_POST["page"] : $_GET["page"];
else $page = 0Utóbbi esetben igaz megnyújtottam egy kemény if-el a futásidőt
(bár feltételezem előbb-később te is vizsgálnád létezik-e egyáltalán GET-ben page változód)
(bátorkodtam feltételezni, hogy nem raksz le page nevű cookiet) -
zka67
őstag
válasz
Sk8erPeter #5339 üzenetére
Én kérek elnézést, félreértettelek. Nem célom a kötekedés, nem is annak szántam.
Én továbbra sem értek veled egyet, hiszen a $_GET és $_POST tömbök megváltoztatása semmilyen hatással nincs a külvilág számára. Ugyanolyan változók mint a többi. Ha valamiért nem lehetne megváltoztatni őket, akkor a PHP fordítónak illene szólnia érte.
Mondok egy egyszerű példát:
[1] - [2] - [3] - ... - [20], ezek az oldalszámok, amikre kattintva ?page=n értéket küld get-el.
Ugyanezen a lapon hozzáadhatsz újat vagy módosíthatod a lista elemeit, ekkor post-al küldöd el a page értéket, hogy ugyanazon a lapon maradj. Azért, hogy a kód egyszerű legyen, miért ne használhatnám az alábbit?if (isset($_POST['page'])) $_GET['page'] = $_POST['page'];
Tudom, meg lehetne oldani egy plusz változóval és két if-fel és semmi különbséget nem vennék észre a sebességben, csak ezért tart lassan ott manapság a programozás, hogy egy egyszerű szorzótábla kiírásához is 128 magos 50 THz-es processzor kell 64 PB rammal, mert a programozók nem törődnek ilyen apróságokkal, "vegyen bele a tulaj ramot"-al elintézik a dolgot.
Jó, lehet ez nem a legjobb példa rá, de ez van, tudod miről beszélek.
-
SaNyEe
aktív tag
Hi!
Volna egy kisebb gondom.
Tetszőleges mélységű menü-t készítek, s ehhez tartozik egy tömb, ami objektumokat tárol.
A megjelenítés során egy rekurzív függvény írja ki a menüpontokat, egész addig hívja újra önmagát amíg a foreach-ből kapott elem tömb. Amennyiben nem az, akkor az li tageket kirakja és közéteszi az objektumból a kívánt információt.Szerkezetileg a tömb így néz ki:
$tomb[id] = objektum (ez a szülő)
$tomb[id] = másik objektum (szintén szülőelem)
$tomb[szulo_id][id] = egy szülőobjektum leszármazottjaAmikor statikusan kézzel létrehoztam egy ehhez hasonló példatömböt akkor minden szépen működött.
Amikor megírtam a tömb feltöltő algoritmusát akkor már nem jártam ekkora sikerrel. Hibaüzenet semmi, azonban az első olyan elemnél ami nem szülő szintű objektumot tárol egyszerűen megszűnik a feltöltés, s ugrunk a kiiratáshoz.
Az id-k és a szülőid-k nem tudják átfedni egymást, mindig egyediek, nem értem mi a probléma.
Teszteléskor csináltam olyat, h a gyermekekből kivettem a szülő_id-t és sorszámmal helyettesítettem akkor ment, akkor is ment, ha a szulo_id-t és az id-t kicseréltem, ekkor viszont nem tudom bejárni a kapott fát úgy ahogy a megjelenítésben szükséges lenneMegoldási javaslat?
-
rt06
veterán
sajnos az alabbi kodon elhasal
$string = "prefix_{$array["index"]}_suffix";
hibauzenet: Parse error, unexpected T_STRING(index)!
eclpise-hez lehet meg ilyet beallitani, de az meg nem kezeli normalisan az egymasba agyazott switch-case szerkezetet (tudom, ne agyazzam egymasba, nem illik)
-
Sk8erPeter
nagyúr
Bírom, hogy mindig az ilyen rendkívül fontos dolgokba kötsz bele...
(de ha a belekötésre reagálok is, az már nem érdekel) Miért nem érdemben szólsz hozzá?
Most speciel arra gondoltam, hogy ha mondjuk egy foreach-csel végigmászkál, és bizonyos dolgokat ellenőriz a $_POST tömbön (csak példa, ne keress ebben is hibát, ha kérhetem), akkor végül is tök felesleges másik változónak átadni, de a lényeg az volt, hogy az ilyen bemeneti értékeket lehetőleg ne módosítsa...erről is sikerült elterelned a figyelmet. Csak nem nagyon értem, mi a célod a kötekedéssel. -
zka67
őstag
válasz
Sk8erPeter #5337 üzenetére
Mért kéne végigrohangászni foreach-csel? Egyszerűen
$input = $_POST;
és kész.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #5336 üzenetére
Az nem baj, ha dolgozol vele, felhasználod az értékeit (nem muszáj átadni másik változónak, sőt, sokszor felesleges - pl. végigrohangászhatsz egy foreach ciklussal a $_POST értékeken, átadni az értékeket másik változónak meg csak felesleges időveszteség (már amennyiben ez egyáltalán érzékelhető ideig tart)) csak az a furcsa, ha módosítod. Én nem tenném, persze mindenki azt csinál ezekkel a változókkal, amit csak akar.
Most megtaláltam cucka egy régi hsz.-ét, amire emlékeztem, ahol ő is pontosan ugyanerről ír, csak jóval több hozzáértéssel, mint ahogy én vakerászok: [link]A switch nagyon egyszerű, és megkímél a sok-sok if-elseif-else ág írogatásától, pl. a Te kódod esetén jelenleg így néz ki:
if-elseif-else megoldással:
if ($_POST['tipus'] == 'navigacio') {
// ...
}
elseif ($_POST['tipus'] == 'tartalom') {
// ...
}
elseif ($_POST['tipus'] == 'felhasznalo') {
// ...
}
// ...
else{ //ha egyik sem a fentiek közül
// ...
}ugyanez switch-case megoldással:
switch($_POST['tipus']){
case 'navigacio':
//...
break;
case 'tartalom':
//...
break;
case 'felhasznalo':
//...
break;
//...
default: //ha a fentiek közül egyikkel sem egyezik meg (ez az if-elseif-else ágból az utolsó, az else ág)
//...
break;
}(amúgy most nézem, nálad nincs az if-elseif után egy végső else, ami arra vonatkozik, ami egyik korábbi feltételre sem igaz, persze nem kötelező, de nem árt)
Szerintem legalábbis utóbbi átláthatóbb, jobban egységbe foglalja a feltételvizsgálatot.
Ezek tényleg csak tanácsok, nem kötekedés.
------
(#5324) nuendo: tényleg egész szépen elrendezi a kódot ez a PHP Formatter.
-
Speeedfire
félisten
válasz
Sk8erPeter #5333 üzenetére
nem veszem zokon, minden ötlet/tanács jól jöhet
amilyen leírásokat eddig olvastam ott nem adták át másik változónak, mindig a get, post adatokkal dolgoztak
néha átadom egy ideiglenes változónak az értéket, de ezt általában csak akkor amikor sok változóm van már
a switchet eddig sem értettem, ezért azt soha nem is használtam még
nekem átlátható a kód szerencsére, ha régebbi munkámra mondtad volna akkor megértettem volna mert ott én sem látom már át néha, de a mostaniakat már igen és könnyen meg is találom, hogy mi mit csinál -
Sk8erPeter
nagyúr
Az a "bajom", hogy ez a "nyomorult" változótípus olyan változótípus, aminek a $_POST, $_SERVER, $_REQUEST, stb. változókhoz hasonlóan nem illik értéket adni, mivel ez a szkript bemeneti adata, és ha hozzányúlkálsz, akkor adott esetben előfordulhat, hogy saját magaddal szúrsz ki. Akkor már érdemes ezeket a bemeneti adatokat átadni egy másik változónak, és azt már tetszőlegesen módosíthatod. Persze megteheted, hogy ezeket a bemenetként kapott adatokat is módosítod, de azt úgy nevezik, hogy gányolás.
Ez hasonló ahhoz, mintha mondjuk C-ben az argc, argv változókat módosítanád. Az is gányolás. -
zka67
őstag
válasz
Sk8erPeter #5332 üzenetére
Mi bajod van vele? Hiszen az is csak egy nyomorult változó...
-
Sk8erPeter
nagyúr
válasz
Speeedfire #5313 üzenetére
a rengeteg elseif helyett megoldhattad volna switch-csel, így nagyon átláthatatlan
szerk.: amúgy bocs a kötekedésért, csak rég voltam a topicban, kicsit visszaolvastam, és szemet szúrt ez meg az előző -
Sk8erPeter
nagyúr
válasz
Speeedfire #5251 üzenetére
Ez aztán jó ronda megoldás...
($_GET változónak értéket adni? Hmm...
)
-
Speeedfire
félisten
válasz
fordfairlane #5330 üzenetére
hiszek neked
-
fordfairlane
veterán
válasz
Speeedfire #5329 üzenetére
Escape van, már a legelején, ez csak egy kódrészlet volt.
Hát az totál rossz, ebben a formában nem escapel semmit. Ha már mindenáron a $_POST tömböt előre kiescapelni akarod:
$_POST = array_map('mysql_real_escape_string',$_POST);
-
Speeedfire
félisten
válasz
fordfairlane #5328 üzenetére
Escape van, már a legelején, ez csak egy kódrészlet volt.
A funkcció tényleg jó lehet mert igazából ugyan azok vannak csak más értékekkel.
A harmadik részt nem teljesen értem, mire gondolsz.
-
fordfairlane
veterán
válasz
Speeedfire #5325 üzenetére
$sqlJelszo = mysql_query("select jelszo from szapar_felhasznalo where fnev='".$_POST['fnev']."' jelszo='".$_POST['jelszo']."' ");
if (!$sqlJelszo) {
die('Hiba: ' . mysql_error());
}Nagyon csúnya ez így. Először is használj saját függvényt, amelyik lefuttatja a query-t, és kiírja az sql hibát.
function sql_query($q) {
$res = mysql_query($q);
if (mysql_errno()) {
die('Hiba: ' . mysql_error());
}
return $res;
}Másrészt pedig nem használsz escapelést a szöveges tartalomnál, ami súlyos hiba.
$query = 'select jelszo from szapar_felhasznalo';
$query .= ' where fnev="'.mysql_real_escape_string($_POST['fnev']).'"';
$query .= ' AND jelszo="'.mysql_real_escape_string$_POST['jelszo']).'"';
$jelszo_res = sql_query($query);Harmadrészt, és ez csak egy javaslat: Már most szedd szét az action mappinget magától az actionöktől. Tehát az if-elseif-else ág csak függvényeket hívogasson, mást ne csináljon, és külön függvényekbe rakd az egyes funkciók implementációját, különben makaróniként fog tekeregni nemsokára a kód a rengeteg globális változójával, amik egymást írják felül.
Szerk: Ja igen, kimaradt az " AND ", tényleg. Javítom én is
-
wis
tag
válasz
Speeedfire #5325 üzenetére
WHERE 'valami' AND 'valami'
Szóval: "select jelszo from szapar_felhasznalo where fnev='".$_POST['fnev']."' AND jelszo='".$_POST['jelszo']."' "
-
Speeedfire
félisten
válasz
Tele von Zsinór #5322 üzenetére
így már majdnem tökéletes is, viszont a felhasználónál hibát jelez az sql, akár h nézem nem látom a hibát
elseif ($_POST['tipus'] == 'felhasznalo') {
$tipus = 'szapar_felhasznalo';
$ertek = "fnev='".$_POST['fnev']."', email='".$_POST['email']."', jog='".$_POST['jog']."'";
$sqlJelszo = mysql_query("select jelszo from szapar_felhasznalo where fnev='".$_POST['fnev']."' jelszo='".$_POST['jelszo']."' ");
if (!$sqlJelszo) {
die('Hiba: ' . mysql_error());
}
if (mysql_num_rows($sqlJelszo) == 0) {
$ertek .= ", jelszo='".$_POST['jelszo']."' ";
}
}Az alap elv az h ha nem frissítem a jelszót, akkor azt békén hagyja, ellenkező esetben feltölti. Viszont hibát ír ki, csak nem tudom h feltöltéskor vagy lekérdezéskor. Azt lehagytam, hogy a jelszót miatt panaszkodik.
Hiba: 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 'jelszo='hash-kod" at line 1
nuendo: köszi, ahogy lesz egy kis időm leglesem -
nuendo
tag
válasz
Speeedfire #5321 üzenetére
-
Tele von Zsinór
őstag
válasz
Speeedfire #5321 üzenetére
Tegyél idézőjelet minden érték köré, lásd `mezőnév` = "érték", azt látom, legalább a mysql_real_escape_string() hívás megvan. Számok köré is, ha a felhasználótól kapod.
-
Speeedfire
félisten
válasz
Tele von Zsinór #5319 üzenetére
Fentebb linkeltem a forrást.
nuendo: megköszönném -
nuendo
tag
válasz
Speeedfire #5318 üzenetére
van egy jó kis oldal ilyen forráskódelemző....csak sajna nem tom a címét..este othon leszek és már tudni fogom, de létezik ilyen!!
-
Tele von Zsinór
őstag
válasz
Speeedfire #5318 üzenetére
Első blikkre rögtön gyanús, hogy nincsenek idézőjelek a string értékeid körül. Mutasd a queryt, ami a hibát okozza.
-
Speeedfire
félisten
Itt van egy hiba jelenség például:
Postolt adatok:
A hiba:
Hiba: 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 '!, tipus=tartalom, datum=2010-08-27 19:21:00, fid=1, rovid=
Kezdő post<' at line 1Van valami olyan editor amiben ki is írja a php szintaktikai hibákat?
-
biker
nagyúr
válasz
Speeedfire #5313 üzenetére
pedig hasonlóan csinálnám én is
-
nuendo
tag
válasz
Speeedfire #5313 üzenetére
a lényeg először is hogy felejts el azt a html táblázatot, mert ha dinamikusan akarsz bele iratni dolgokat..akor majd a php print vagy echo-ba ird ki!
-
biker
nagyúr
válasz
Speeedfire #5311 üzenetére
ha nem mondod el mi kell, hogy segítsek?
-
biker
nagyúr
válasz
Speeedfire #5309 üzenetére
amennyre értem, mit akarsz, lehet hát.
-
Speeedfire
félisten
Dinamikusan lehet egy tábla adatait frissíteni?
pl van egy sablon php fájlom, ahova postolom az adatokat, 2 állandó van az id és a tábla neve, a többi mindig változik
Ezt meglehet valahogy oldani? Mondjuk a $_POST-ot feldarabolom és azt illesztem be?
Csinált már ilyet valaki? -
biker
nagyúr
<table border="1" cellpadding="1" cellspacing="0">
<tr><td align="center" valign="top"></td><td align="left" valign="center"></td><td align="center" valign="bottom"></td><td align="right" valign="center"></td></tr>
<tr><td colspan="2" align="left" valign="top"></td><td bgcolor="blue"></td><td align="center" valign="center" bgcolor="blue"><font color="white">123</font></td></tr>
<tr><td rowspan="2" bgcolor="red"></td><td></td><td colspan="2" align="right" valign="bottom"></td></tr>
<tr><td align="center" valign="center" bgcolor="yellow">456</td><td bgcolor="yellow"></td><td bgcolor="yellow"></td></tr>
</table>nem próbáltam, de sztem jó
-
Speeedfire
félisten
válasz
Speeedfire #5304 üzenetére
stornó
-
whited
addikt
hello
valaki megtudná csinálni nekem ezt a táblázatot editplusba úgy 8perc alatt ?
[link] -
Speeedfire
félisten
Kicsiny katalógus oldalam tovább fejlődött így a követelmény is nagyobb lett.
Beépítettem az input mező alá egy karakter számlálót, ami a leütött karaktereket kiírja egy mezőbe. A tartalom adatbázisba illesztéséhez 500 karakterre van szükség.
A mező még csak 466-on van de már így is el fogadja, gondoltam a js rosszul számolt, de nem a notepad-ba bemásoltam és megfelelő.
Szóval akkor csak a php oldalon lehet a hiba.$megszamol = strlen($_POST['szoveg']);
elseif ( $megszamol < 500 ) {
echo '<div id="hiba"><p>Írj még egy kicsit hozzá, kicsit kevés!</p></div>';
}Feltöltés után azt írja ki az
echo $megszamol hogy 466 karakterValami tipp?
Új hozzászólás Aktív témák
- Autós topik látogatók beszélgetős, offolós topikja
- Google Pixel 8 Pro - mestersége(s) az intelligencia
- Kedvenc zene a mai napra
- Ilyen lesz a Lies of P: Overture
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Milyen légkondit a lakásba?
- Luck Dragon: Asszociációs játék. :)
- Nem tetszik a Procon-SP-nek, hogy a Nintendo távolról kivégezheti a Switch 2-t
- 200 megapixeles zoomkamerát sem kap az S26 Ultra?
- További aktív témák...
- SZÉP Lenovo ThinkPad P15 G2 Tervező Laptop -75% 15,6" i9-11950H 64/2TB RTX A4000 8GB UHD OLED
- Szép! Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB/512GB FHD IPS
- Eladó Apple MacBook Pro 13" A1706 (Late 2017, Silver - EMC 3163)
- Amazfit GTR 2 Classic okosóra dobozában töltőkábellel
- Mac mini M1 chip 8 magos CPU-val, 8 magos GPU-val
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest