- ViewSonic VX2779-HD-Pro: megfizethető gamer monitor
- Apple notebookok
- Autós kamerák
- Apple asztali gépek
- Samsung Galaxy Tab S6 - letett valamit az asztalra
- Mini PC
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen TV-t vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
Hirdetés
-
OnePlus Pad 2 helyett OnePlus Pad Pro
ma Állítólag a OnePlus idei táblagépe nem a második generáció lesz, hanem az első modell Pro változata.
-
Elindíthatja Kínában az FSD tesztjét a Tesla
it Sanghaj 10 Tesla jármű számára engedélyezte a tesztet, így előkészíthetik az FSD kínai indulását.
-
Olcsó USB WiFi AC adapter
lo Egy olcsó WiFi AC USB adapter jó szolgálatot jelenthet, ha az új router csak elvileg támogatja a 2,4 GHz-es átvitelt.
Új hozzászólás Aktív témák
-
Peter Kiss
senior tag
válasz bendikeee11 #15300 üzenetére
Fájlkiterjesztés be van regisztrálva a webszerver alá, hogy tolja át a PHP értelmezőn?
-
bendikeee11
tag
válasz Peter Kiss #15301 üzenetére
Már sikerült megoldani, köszi.
Yesterday is History, Today is a Gift, Tomorrow is Mystery.
-
#57018880
törölt tag
Valaki aki ismeretes és járatos a Smarty3 template engine-ben fel tudna világosítani, hogy miként tudok két .tpl között változókat átadni? Hasonlóképpen mint az egybeinklúdolás, mert a php forrás zanzásított(encoded) és oda nem tudok írni.
Előre is hálás köszönet.
-
trisztan94
őstag
Nem tudom, hogy az előzőek után mennyire merjek itt kérdezni, egyszer megpróbálom még..
----
PHP cURL request-et szeretnék küldeni egy REST API felé. Sosem használtam cURL-t, tehát fogalmam sincs, hogy hogyan kell kinéznie, nagyon sok a doksi és holnapra ennek meg kellene lennie. Tehát ha úgy vesszük, szívességet kérnék.
Az API dokumentációjában azt írták, hogy így kell kinéznie egy cURL request-nek:add the following header: Content-Type: text/plain
submit the payload using the --data-binary parameterÉs itt egy sample request:
curl -X POST -H "Content-Type: text/plain" --data-binary @addresses.txt
"http://batch.geocoder.cit.api.here.com/6.2/jobs?
&app_code=AJKnXv84fjrb0KIHawS0Tg
&app_id=DemoAppId01082013GAL
&action=run
&header=true
&inDelim=;
&outDelim=,
&outCols=recId,latitude,longitude,locationLabel
&mailto=<my_email>
&outputcombined=true
&language=de-DE"Ezt sikerült eddig összehegesztenem:
$cURLHandler = curl_init();
curl_setopt($cURLHandler, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
curl_setopt($cURLHandler, CURLOPT_BINARYTRANSFER, true);
curl_setopt($cURLHandler, CURLOPT_POST, true);
$url = "";
if($cURLHandler) {
}
else {
throw new RuntimeException("Nem sikerült felvenni a kapcsolatot egy távoli szerverrel.");
}Tehát megadtam a header-t, a binarytransfer paramétert és azt, hogy HTTP POST-al küldje.
Kérdések
Mi az a -X és -H és hogyan kell őket megadni PHP-ban?
Hogyan tudom megadni a fájlt amit küldenék? (a fenti példában @addresses.txt)
Hogyan tudom megadni az url-t amire menjen a kérés?
Hogyan tudok az URL-hez paramétereket hozzáadni? Simán ¶mnév=érték-kel az URL-hez hozzáfűzve, vagy azt is külön kell?Illetve még annyi, hogy így kell-e kinéznie a cURL request-nek?
[ Szerkesztve ]
https://heureka-kreativ.hu
-
moltam88
tag
válasz trisztan94 #15304 üzenetére
A példa egy parancssori curl hívás, itt a manual hozzá: http://curl.haxx.se/docs/manpage.html
A -X paramétert elvileg megadtad a következővel: curl_setopt($cURLHandler, CURLOPT_POST, true);
A -H -t pedig ezzel: curl_setopt($cURLHandler, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));Az url-t is curl_setopt()-tal kell megadni: curl_setopt($ch, CURLOPT_URL, $url); A GET-es paramétereket küldd az url-hez hozzáfűzve (rakd bele őket egy tömbbe, és az url-hez fűzd hozzá a következő módon: $url .= '?'.http_build_query($params); )
A data-binary-s részt még nem használtam, de talán próbáld meg ez alapján:
http://stackoverflow.com/questions/14920475/curl-post-of-custom-binary-data-not-form-contents[ Szerkesztve ]
-
csabyka666
addikt
Üdv mindenkinek!
FPDF-el generálok PDF formátumot PHP-ből, és azt szeretném tudni, hogy egy táblázat kirajzolásakor meg lehet-e oldani azt az FPDF-ben, hogy dinamikus legyen a cella mérete (magyarán: a tartalom hosszúságához állítsa be automatikusan)? Manuálisan beállítva működik, viszont így le kell fixálnom előre a cellák méretét, szóval nem túl elegáns a módszer...
Van egy ötletem a PHP-s megvalósításra is: megkeresem azt a cellát, amelyikben a leghosszabb a szöveg, és ahhoz állítom be az összes cella méretét, de ha van valami egyszerűbb megoldás, akkor nem szenvednék ezzel...
Köszönöm a válaszokat előre is!
Ágdarálást, kaszálást, területtisztítást vállalok profi gépekkel! Elsősorban Zala megye és vonzáskörzete, de minden megkeresést meghallgatok. +36305633091
-
Hege1234
addikt
használta már esetleg valaki ?
jól értettem hogy ez kigyűjti hogy ki milyen készülékről éri el az oldalam ?
vagy hasonlít a mediaquery-hez csak ez php ? -
Dave-11
tag
Van egy PostgreSQL-es adatbázisom, és ebbe töltök fel adatot PHP-val. PDO-t használok.
Van egy nev nevű oszlopom, amibe feltöltöm a szöveget, de sajnos a végére valahogy belekerül egy szóköz, és amikor később próbálom visszakeresni az adott névhez tartozó adatokat, akkor nem kapok a lekérdezés eredményeként semmit, mert az adatbázisba felvett név nem egyezik az eredetivel.
Valami ilyesmi:
Eredeti: "Kis Pál"
Adatbázisban: "Kis Pál "
Text és varying character típust is próbáltam, de mindkettőnél megjelenik a hiba.
Tudnátok segíteni?:D Semmi :D
-
trisztan94
őstag
-
Dave-11
tag
válasz trisztan94 #15311 üzenetére
Hát végül is ennyi az egész kód:
$q = $db->prepare("INSERT INTO tabla (nev) VALUES (:nev)");
$q->execute(array(":nev" => $aktualis_nev));A varchar alatt a character varying-ot érted?
Meg még nálam adtam neki határt, hogy maximum 200 lehet.:D Semmi :D
-
trisztan94
őstag
válasz Dave-11 #15312 üzenetére
Így berakja szóköz nélkül?
$q = $db->prepare("INSERT INTO tabla (nev) VALUES (:nev)");
$q->execute(array(":nev" => trim($aktualis_nev)));Lehet az a baja, hogy nem adtál meg neki hosszt. Sokat szptam korábban egy PostgreSQL adatbázis miatt. Miért nem MySQL-t használsz?
"A varchar alatt a character varying-ot érted?"
[ Szerkesztve ]
https://heureka-kreativ.hu
-
Hege1234
addikt
-
Sk8erPeter
nagyúr
válasz trisztan94 #15313 üzenetére
"Sokat szptam korábban egy PostgreSQL adatbázis miatt. Miért nem MySQL-t használsz?"
Hajjaj, máris veszélyes vizekre eveztünk, nehogy elkezdd bebizonyítani, hogy a MySQL sokkal jobb, mint a PostgreSQL...
Eleve rossz a kérdés. Nincs jobb-rosszabb reláció a két adatbázis-kezelő között, mást tudnak, más előnyei és hátrányai vannak. Ha épp PostgreSQL használata a feladat, akkor nem jó kérdés, hogy miért nem MySQL-t használ az illető.(#15312) Dave-11 :
Fogalmunk sincs, mi van az $aktualis_nev változóban.Sk8erPeter
-
trisztan94
őstag
válasz Sk8erPeter #15315 üzenetére
Jogos.
Csak rossz tapasztalataim vannak egy Postre-hez kotodo meloval, ezert valoban kicsit elfogult vagyok ilyen teren.
https://heureka-kreativ.hu
-
Dave-11
tag
válasz Sk8erPeter #15315 üzenetére
"Fogalmunk sincs, mi van az $aktualis_nev változóban."
Fentebb írtam, hogy egy név, amit épp feltöltök az adatbázisba. Például a "Kis Pál". Egyszerű karakterlánc van benne.
Még annyit, hogy ezt nem a felhasználó írja be, hanem egy szöveges fájlból olvasom be őket, ahol vesszővel vannak elválasztva egymástól.
:D Semmi :D
-
Dave-11
tag
válasz trisztan94 #15318 üzenetére
Elvileg nem lenne szabad lennie, mert úgy van, hogy van egy sor, és abban vannak egymástól vesszővel majd egy szóközzel elválasztva. Tehát így:
Anna, Árpi, Aladár
Ez például egy sor. Majd ezt fogom, beolvasom, és a kapott sort szétbontom egy tömbbe az explode() függvénnyel. Ezen a tömbön végigmegyek, és az aktuális nevet feltöltöm a táblába.
A fájlt egyébként UTF-8-as kódolásban mentem, de majd rápróbálok a BOM nélkülire még egyszer.:D Semmi :D
-
Sk8erPeter
nagyúr
válasz Dave-11 #15317 üzenetére
Fentebb azt írtad, minek KELLENE benne lennie. De továbbra sem osztottad meg, hogy csinálod a feldolgozást. Mondjuk írogathatunk még pár hsz.-t oda-vissza, de jobb lenne, ha inkább egyből ellátnál minket a szükséges infókkal, hogy tudjunk neked érdemben segíteni, ne csak találgassunk.
Mutasd meg, hogy dolgozod fel azt, hogy "van egy sor, és abban vannak egymástól vesszővel majd egy szóközzel elválasztva". Kóddal, konkrétan, ne csak azt mondd el, hogy KELLENE működnie, hanem hogy csinálod most, és akkor több eséllyel jövünk rá, miért nem úgy működik, ahogy szeretnéd.
Amúgy Trisztán korábban javasolta már a trim() használatát is.Ezt csak most látom:
"A fájlt egyébként UTF-8-as kódolásban mentem, de majd rápróbálok a BOM nélkülire még egyszer."
Milyen racionális érvet tudnál felhozni amellett, hogy nem eleve "UTF-8 without BOM" a karakterkódolása a fájlodnak, és ami miatt tartalmaznia kell szerinted a BOM-karaktert?[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz fordfairlane #15321 üzenetére
Először én is erre gyanakodtam, de azt írta, explode()-ot használ, és a név UTÁN szerepel szóköz.
Ha azt használja, hogy
explode(',', 'Anna, Árpi, Aladár')
akkor abból az lesz, hogy
array (
0 => 'Anna',
1 => ' Árpi',
2 => ' Aladár',
)
ergo a név ELÉ kerül a szóköz. Ha azt használja, hogy
explode(', ', 'Anna, Árpi, Aladár')
magyarul a delimiter a vessző utáni szóköz, akkor eltűnnek a szóközök a név ELŐL.De igazából ezért írtam neki, hogy mutassa meg a megoldását, és akkor kiderül, mi van.
Sk8erPeter
-
Phvhun
őstag
válasz Sk8erPeter #15322 üzenetére
Na most ez lehet nem a legoptimálisabb megoldás, de ez megeszi bárhol és bármilyen hosszu is legyen a szünet az elemek között.
function tuti_jo($input)
{
$tem = str_replace(Array("\n","\r","\t", "\0", "\x0B"), " ", $input);
$tem = trim($tem);
$tem = str_replace(",", " , " , $tem);
$tem = str_replace(" ", "" , $tem); //2 space
$tem = array_filter(explode(" , ", $tem));
return $tem;
}Szerk: array_filter() kiszedi az üres elemeket, ha valami ilyesmi lenne a bemenet:
Anna, Kati ,, ,Elemér, JózsiSzerk2: Asszem félreértettem a problémát, és felesleges ez a hsz.
[ Szerkesztve ]
-
Dave-11
tag
válasz Sk8erPeter #15320 üzenetére
Na itt a kódrészlet ami kell:
$db = new PDO('pgsql:host=localhost; dbname=adatbazis', 'postgres', 'jelszo123');
......
$f = fopen("be.txt", "r");
while(!feof($f))
{
$tmp = fgets($f);
$nevek = explode(', ', $tmp);
foreach($nevek as $akt_nev)
{
$q = $db->prepare("INSERT INTO tabla (nev) VALUES (:nev);");
$q->execute(array(":nev" => $akt_nev));
}
}
fclose($f);
......
A be.txt tartalmáról már beszéltünk:D Semmi :D
-
Dave-11
tag
Na egyébként véget vethetünk ennek a beszélgetésnek, a trim()-mel gyönyörűen megy, köszönöm mindenkinek aki kicsit is foglalkozott a problémámmal
[ Szerkesztve ]
:D Semmi :D
-
Sk8erPeter
nagyúr
válasz Phvhun #15323 üzenetére
Jaja, félreértetted, ráadásul ez messze van a "tuti_jo()"-tól... Meg egy kissé agyonbonyolított.
Próbáld ki a függvényedet erre:
tuti_jo('Anna, Kati ,, ,Elemér, Józsi, Akárki , Pista')
ebből ezt kapod:
array (
0 => 'Anna ,Kati ,,',
1 => 'Elemér ,Józsi',
2 => 'Akárki,Pista',
)Valszeg ez nem igazán felel meg az elvárásoknak, amit eredetileg szerettél volna kihozni belőle.
Sk8erPeter
-
Phvhun
őstag
válasz Sk8erPeter #15326 üzenetére
Ja nem teszteltem le, mindegy.
-
trisztan94
őstag
Hali
A térképes app amit csinálok xls fájlokból (is) dolgozik. Feltölt a júzer egy xls-t vagy xlsx-et és az abban található címekből összerak egy útvonalat.
Eddig úgy volt, hogy a cím darabjai fixen az I, J, K és L oszlopokban voltak (irányítószám, város, utca, házszám), viszont most kiderült, hogy úgy kellene, hogy a felhasználó kiválaszthassa feltöltéskor, hogy melyik oszlop(ok)ban van a cím. Tehát le kell kezelni azt is, ha az egész cím egy oszlopban van, meg ha több oszlopban van és össze kell fűzni a végén..Ez volt az eddigi kódom:
for($row = 1; $row <= $lastRow; $row++)
{
$string = $row . "|";
for($column = 'I'; $column != 'M'; $column++)
{
if($worksheet->cellExists($column.$row))
{
$cell = $worksheet->getCell($column.$row)->getValue();
switch($column){
case 'I':
$string.= '"'.trim($cell).' ';
break;
case 'J':
$string.= trim($cell).' ';
break;
case 'K':
$string.= trim($cell).' ';
break;
case 'L':
$string.= trim($cell);
break;
}
}
}Ez nagyon szépen kiszedte az eredményeket és összefűzte a stringeket.
Most, hogy ez ki lett találva, átalakítottam erre:
for($row = 1; $row <= $lastRow; $row++)
{
$string = $row . "|";
foreach ($columns as $column)
{
if($worksheet->cellExists($column.$row))
{
$cell = $worksheet->getCell($column.$row)->getValue();
switch($column){
case $columns[0]:
$string.= '"'.trim($cell).' ';
break;
case $columns[1]:
$string.= trim($cell).' ';
break;
case $columns[2]:
$string.= trim($cell).' ';
break;
case $columns[3]:
$string.= trim($cell);
break;
}
}
}
}Ez így rendesen működik is akkor, ha 4 oszlopban van a cím.
A kérdés az lenne, hogy hogyan tudom megcsinálni, hogy akkor is működjön, ha kevesebb, mint 4 oszlopban van a cím?
A $columns változó egy tömb, pl:
[0]=>A
[1]=>B
stbMindig annyi elem van benne, amennyit kiválasztott a júzer.
[ Szerkesztve ]
https://heureka-kreativ.hu
-
trisztan94
őstag
válasz trisztan94 #15328 üzenetére
Másik dolog,
Azt is ki kellene szűrni, ha hülye user úgy tölt fel egy .xls-t, hogy nem minden sorban van adat, vagy éppen rossz adat van benne, mondjuk pl. benne hagyják a fejlécet.
Azt, hogy üres-e a cella egy sima $cell != '' elágazással ellenőrzöm.
Az biztos, hogy a cím egy irányítószámmal kezdődik, amit egy városnév követ, utána egy utca majd házszám, tehát erre szerintem egy Regexp lenne a legjobb, nem? Elég lenne azt csekkolni, hogy van-e egy négyjegyű szám a string elején? Ha igen, tudnátok nekem írni erre egy regexpet pls?Így néz ki egy sample string:
1158 Budapest Késmárk u. 7/b.
https://heureka-kreativ.hu
-
moltam88
tag
válasz trisztan94 #15329 üzenetére
Regulárisnak próbáld ki ezt:
/(\d{4})\s+(.*?)\s+(.*)/ [link] -
moltam88
tag
válasz trisztan94 #15328 üzenetére
Ha jól értem itt az a probléma, hogy változhat az oszlopszám, de úgy kell előállítani a stringet, hogy a cellák között mindig legyen egy szóköz.
Erre nem igazán értem miért próbálkoztál switch-el, mikor az összes cellára ugyanazt kell csinálni.
Lehetne valami ilyesmi módszerrel:
- A belső ciklus előtt létrehozol egy temp változót üres sztringgel, ebben fűzöd össze az aktuális sorban levő címet az oszlopokból.
- A belső ciklusban a cella értékét trimelve hozzáfűzöd a temp változóhoz, illetve hozzűfűzöl egy szóközt is.
- A belső ciklus után nyomsz egy trimet a temp változóra (ez kiveszi az utolsó cella után rakott szóközt). Itt ellenőrizheted, hogy megfelelő adat van-e benne (illeszkedik-e rá a reguláris, nem üres-e, stb.), és ha igen akkor feldolgozod, ahogy szeretnéd.[ Szerkesztve ]
-
trisztan94
őstag
válasz moltam88 #15330 üzenetére
Köszi!
-----
(#15331) moltam88Így csináltam:
for($row = 1; $row <= $lastRow; $row++)
{
$string = $row . "|";
$temp = "";
foreach ($columns as $column)
{
if($worksheet->cellExists($column.$row))
{
$cell = trim($worksheet->getCell($column.$row)->getValue());
$temp.=$cell.' ';
}
$string.='"'.$temp;
}
$string = trim($string);
$string.='"|HUN'.PHP_EOL;
fwrite($fileHandle, $string);
}Ennek ez lett az eredménye:
3|"1158 "1158 Budapest "1158 Budapest Késmárk u. 7/b. "1158 Budapest Késmárk u. 7/b."|HUN
Így kellene kinéznie:
3|"1158 Budapest Késmárk u. 7/b."|HUN
Mit csinálok szarul?
Elég kába vagyok, jól megfáztam, nem nagyon megy a gondolkodás
[ Szerkesztve ]
https://heureka-kreativ.hu
-
trisztan94
őstag
válasz trisztan94 #15332 üzenetére
Jó, tényleg nem megy a gondolkodás, megvan a megoldás. A $string.='"'.$temp; utasítást a belső ciklusban hagytam véletlenül, kirakva a belső ciklus utánra már no problem.
Thx
https://heureka-kreativ.hu
-
Sk8erPeter
nagyúr
válasz trisztan94 #15328 üzenetére
Nekem az nem tiszta, ezt miért switch-case-zel oldottad meg. Csak gyorsan néztem rá a kódra, de ahogy lejött, annyi a lényeg, hogy végigmész azokon az oszlopokon, amikben van valami, és összefűzöd az egészet. Na de akkor itt nem kell switch-case elméletileg, csak végigmész az első kitöltött oszloptól az utolsóig, a benne levő cellákat meg összefűzöd. Persze az más kérdés, hogy mivel kapod meg, hogy melyik oszloptól meddig van bármi eredményed.
(#15329): hát egy címre rohadt nehéz jó regexpet írni, mert ezerféle lehetőség van, ahogy írhatják. Például az irányítószám után lehet, hogy szerepel pont. Az utcanév után nem biztos, hogy a júzernek eszébe jut odatenni, hogy utcáról/körútról/akármicsodáról van szó. Lehet, hogy az utcát úgy írja, hogy "u." vagy úgy, hogy "utca", körutat úgy, hogy "krt.", "krt", "körút", és így tovább. Lehet, hogy a számozást úgy írja, hogy "7/b.", "7/b" "7b", "7b.", "7 b", "7-b", és még lehetne sorolni... Szóval ez elég necces kérdés.
Most ezt gyorsan bepötyörésztem, rettentő buta megoldás, de illeszkedik arra, hogy
1158 Budapest Késmárk u. 7/b.
-->
\d{4} [A-záéíóöőúüű]+ [A-záéíóöőúüű]+ [A-záéíóöőúüű.]+ [A-záéíóöőúüű0-9./]+Mondom, ez egyáltalán nem biztos, hogy jó, csak a mintádra illeszkedik. Ilyen kb. 20 másodpercnyi pötyögés volt benne, szóval ennél tuti létezik sokkal jobb megoldás is. Ékezet is lehet benne, kezeli azt az esetet, ha a négy számjegyből álló irányítószám után van pont, ilyesmik. Amúgy nem biztos, hogy foolproof megoldás.
Itt le tudod tesztelni gyorsan, ha akarod: http://regexpal.com/-------
SZERK.: hehe, ez jó most látom, ezt a lapot kb. egy órája töltöttem be, aztán most visszaváltottam a böngészőben erre a fülre a többiről, és úgy írtam a választ, frissítés nélkül, hát vasárnap van, ez van, látom közben haladt a dolog, na mindegy, most már nem törlöm ki.
Amúgy annyi, hogy a regexpben az nem biztos, hogy a legjobb, hogy .* van, mert az BÁRMIRE illeszkedik, nem csak mondjuk a magyar ábécé betűire, és valami megkötést nem árt tenni. Persze nem tudom, nálad milyen adatok lehetnek. Viszont az a whitespace-eknél jobb, hogy \s+ van, nem csak egy darab szóköz, mert így akármennyi whitespace lehet közöttük.[ Szerkesztve ]
Sk8erPeter
-
moltam88
tag
válasz Sk8erPeter #15334 üzenetére
Igen, az irányítószám után érdemes lehet szigorúbban vizsgálni, és nem .* -gal, erre valóban nem gondoltam. Egyébként az se biztos, hogy van a közterületnek típusa (utca, út, tér, stb.), én találkoztam már olyannal is, hogy pl.: Vasútállomás 23. (szolgálati lakás volt a máv-nál, vagy ilyesmi...). Így talán inkább érdemes 3 részre bonatani a vizsgálatot:
- irányítószám 4 jegy
- városnév (karaktermegkötésekkel)
- utána meg nagyjából bármi lehet, karakterekre érdemes szűrni.Mindenesetre mi példáink alapján össze lehet rakni egy szigorúbb verziót is
Ezt most találtam rá: http://regex101.com, a fenti regexet is erről linkeltem. Első ránézésre sokkal többet tud mint a regexpal, pedig korábban én is azt használtam.
[ Szerkesztve ]
-
Sk8erPeter
nagyúr
válasz moltam88 #15335 üzenetére
Na ja, én is ilyen esetekre gondoltam, amikor írtam, hogy nem triviális feladat a címre regexpet írni; nem beszélve a felhasználói hibázásokról. Persze az ideális eset, ha már eleve bevitelkor validálásra kerülnek a címek, de egy Excel-fájlnál ez nyilván nem téma.
A legjobb regexp-összepakoló és -értelmező, amivel eddig találkoztam - bár offline -, az a RegexBuddy (http://www.regexbuddy.com/).
Amikor egy komplexebb regexppel találkozol, csak bedobod, és ez lebontja neked szépen. Igen sokat segít, ha nincs kedved gondolkozni, és kinek van kedve gondolkozni, ha nem muszáj?Sk8erPeter
-
kemkriszt98
aktív tag
Sziasztok, van egy egyszerű mysql adatbázisom 3 oszloppal: id(ez a pk), username,pass. A kérdés az, hogy le lehet egy sort úgy hogy megadjuk a felhasználó nevet?
Én így próbáltam:
$parancs = "SELECT * FROM usernames WHERE username=".$_GET['username'];
$eredmeny = mysql_query($parancs,$con);
$sor = mysql_fetch_array($eredmeny);de ezt a hibaüzenetet kaptam: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\minden fele\wamp\www\tys\get_user_by_username.php on line 6
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
trisztan94
őstag
válasz Sk8erPeter #15336 üzenetére
+(#15335) moltam88
Köszi srácok!
Igazából nem az egész címre kell a csekkolás, tehát, hogy milyen formában írta bele a felhasználó, csupán azt kell nézni, hogy egyáltalán cím-e. Amúgy is csak akkor tud vele valamit kezdeni a geocoder, ha irányítószámmal kezdődik, tehát szvsz bőven elég az, hogy megnézzük, hogy 4 számmal kezdődik-e (esetleg egy magyar irányítószámok adatbázison még átfuttathatjuk). A többi lényegtelen, mert elég okos a cucc, ismeri a közterületek neveinek rövidítését (u., krt., stny., stb), az sem okoz neki gondod, ha többféleképpen van leírva a házszám (7/b, 7b, stb).
Szvsz összesen 3 lehetőség van:
rossz az irányítószám -> error
jó az irányítószám -> a címet is sikerült geocode-olni -> pass
jó az irányítószám -> hibás a cím -> errorhttps://heureka-kreativ.hu
-
Sk8erPeter
nagyúr
válasz trisztan94 #15338 üzenetére
"rossz az irányítószám -> error"
Ha geocodingról van szó, nem biztos, hogy feltétlenül kell irányítószám (pl. Google Maps-nek is beadhatsz címet irányítószám nélkül, adhat egyértelmű találatot is rá, igaz, van, amikor visszakérdez, hogy "így értette?", és felajánl mondjuk 4 lehetőséget).
Lehet, hogy egyből tesztelni kéne, ad-e vissza eredményt a használt térképszolgáltatás. Ha ez túlzott overhead, akkor persze ez nem pálya, és mondjuk ha mégis fontos az irányítószám, és várhatóan mindig megadnak, akkor ez gyorsabb szűrő, hogy van-e egyáltalán, az tuti.(#15337) kemkriszt98 :
ezt így semmiképp, mert konkatenálod a query-t egy felhasználótól jövő adattal, ezzel kapcsolatban nézz utána az SQL Injection fogalmának.
Használj a mysq_* kezdetű fv.-ek helyett pl. PDO-t: http://maerlyn.eu/2011/12/03/pdo.html
vagy mysqli-t.
Prepared statementeket használj. Paraméterezd a query-t, ne konkatenáld.
A mysql extension már egy ideje deprecated. Jó lenne, ha az ilyen mysql_query()-t és a többit javasoló tutorialok egyszerűen törlődnének a zzegész zzzinternetről.Sk8erPeter
-
kemkriszt98
aktív tag
válasz Sk8erPeter #15339 üzenetére
Az a helyzet, hogy egy android alkalmazás és egy adatbázis közti kommunikációt szeretném ezzel a kóddal létrehozni, azelőtt sosem láttam php-t => abból amit írtál egy szót sem értek
Egyébként ha $_GET['id'] -t használok akkor megy.[ Szerkesztve ]
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
trisztan94
őstag
válasz Sk8erPeter #15339 üzenetére
nem biztos, hogy feltétlenül kell irányítószám
De kelljen
Ha nem követelem meg, hogy legyen benne szépen irányítószám + város + teljes cím, akkor a hülyének rossz találatokat is berakhat az útvonalba a dolog (Például, ha csak annyit ír be, hogy Kossuth Lajos utca. Hát abból kb. városonként 4 db van) és akkor nekem jön majd a zugatás, hogy "szarul tervez".
Tehát egyszerűen vagy pontosan adja meg, vagy sehogy. Amúgy is ez egy ilyen full automatizált dolog, tehát feltölti, feldolgozza, elküldi a txt fájlt a batch geocoder-nek, folyamatosan figyeli a response-t, amikor kész, akkor letölti a feldolgozott fájlt (tehát geocode-olt címeket), megint feldolgozza és végül megtervezi az útvonalat. Nincs közben idő arra, hogy "nem úgy értetted, hogy...x". Főleg, hogy nem 10-15 címmel, hanem 500-1.000.000 címmel dolgozunk (jó, sosem lesz az 1.000.000, de az a maximum amit elbír), ekkora mennyiségnél egyszerűen nincs lehetőség megkérdezni, hogy úgy gondolta e.[ Szerkesztve ]
https://heureka-kreativ.hu
-
Sk8erPeter
nagyúr
válasz trisztan94 #15341 üzenetére
Jaja, mindenképp jobb ez úgy, ha szigorúbbak a követelmények, csak nem tudtam, milyen alkalmazásról van szó, de természetesen indokolt, hogy megköveteled az irányítószámot. A júzer meg tanulja meg, hogy ne legyen kretén.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz kemkriszt98 #15340 üzenetére
A "mysql_fetch_array() expects parameter 1 to be resource, boolean given in ..." hibaüzenet oka:
mysql_query() will also fail and return FALSE if the user does not have permission to access the table(s) referenced by the query.
Szóval a mysql_query FALSE-szal tért vissza.
De mondom, ezt ne is használd. Ott a linkelt tutorial a PDO-ról, amiből képbe kerülhetsz, ami szintén MySQL-adatbázishoz való csatlakozásról szól, melyik része nem tiszta?Amúgy az furcsa, hogy ha a $_GET['id']-t adod meg a username-nek, akkor megy, mert akkor vagy az id tartalmazza a usernevet, vagy pedig a usernév vár azonosító-paramétert, egyik sem normális.
De még egyszer mondom: NE fűzd össze a $_GET és hasonló jellegű paramétereket a query-vel, előtte szűrni kell, különben kapsz egy brokit a seggedbe. Így már elég figyelemfelkeltő, hogy miért ne csináld? Ha ragaszkodsz a mysql_* jellegű függvényekhez (ami továbbra is ellenjavallt), akkor legalább az összefűzögetős hülyeség előtt eressz a változódra egy mysql_real_escape_string()-et.Sk8erPeter
-
kemkriszt98
aktív tag
válasz Sk8erPeter #15343 üzenetére
A konkatenálod meg ehhez hasonló kifejezésekkel összezavartál és a linkelt tutorial kimaradt amúgy most már világos. Egyébként én nem voltam elég világos... ha id-t használok akkor gond nélkül megkapom a user id-jét
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
Sk8erPeter
nagyúr
válasz kemkriszt98 #15344 üzenetére
Akkor nézd meg még egyszer, nem maradt ki a linkelt tutorial. De ha már, akkor szerepeljen itt még egy link: [link].
[ Szerkesztve ]
Sk8erPeter
-
kemkriszt98
aktív tag
válasz Sk8erPeter #15345 üzenetére
Nem tőled maradt ki hanem nekem az elolvasása amúgy megnéztem, átírtam a kódot és megy...
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
kemkriszt98
aktív tag
Sziasztok, adott ez a php kód.
Ha böngészőből futtatom látszólag jól írja ki a dolgokat... viszont ha android alkalmazásból kérem le a dolgokat akkor valami nem stimmel ... beírom a jó felhasználónevet akkor elvileg ezt kéne visszakapjam: admin+++123 viszont ha ezt egy stringben tárolom a contains("+++") függvény hamisat ad... előtte viszont azt vizsgáltam, hogy : string == "error" beírtam egy rossz username-t így elvileg error-t kellet volna kapnom de mégsem azt kaptam.... csak arra tudok gondolni, hogy a php hozzáfűz valamit...."Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
Sk8erPeter
nagyúr
válasz kemkriszt98 #15347 üzenetére
Na, gyorsan átálltál PDO-ra, ügyes. Kivételesen nem iróniából mondom, ritka az, amikor javasoljuk egy újonnan érkezőnek, hogy tegye ezt, és még figyel is a tanácsra. Szóval ez mindenképpen pirospont neked.
Ez viszont továbbra is csúf:
$user->execute(array(":username" => $_GET['username'],));
nem jó praktika közvetlenül felhasználni a felhasználótól jövő adatokat, azt előbb validálni kellene, és megfelelő hibával visszatérni, ha például a username query string üres maradt. Pl. egy if(isset($_GET['username'])) ellenőrzés (esetleg empty($_GET['username']), és akkor egyben azt is ellenőrzöd, van-e valami üres értéknek számítótól eltérő értéke) valahol nem ártana, hogy egyáltalán be van-e állítva.
Az Androidos alkalmazásodban a .contains() előtt legalább azt debuggold, hogy egyáltalán mit kapsz válaszul... Szóval mit kapsz a szervertől?
Btw. UTF-8 without BOM a karakterkódolása a PHP-kódot tartalmazó fájloknak? Notepad++-ban könnyen tudod ellenőrizni és konvertálni, ha nem így lenne.[ Szerkesztve ]
Sk8erPeter
-
kemkriszt98
aktív tag
válasz Sk8erPeter #15348 üzenetére
Ok, azt majd megnézem.... amúgy azért nem éri meg bajlódni azzal hogy üres e a usertől kapott adat mert az android alkalmazás nem küldi el a get-et üresen...
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
Sk8erPeter
nagyúr
válasz kemkriszt98 #15349 üzenetére
Sosem lehet magyarázat a hibakezelés, főleg két sor lespórolására, hogy "nem érdemes vele bajlódni".
Sk8erPeter
Új hozzászólás Aktív témák
- ViewSonic VX2779-HD-Pro: megfizethető gamer monitor
- Honor 90 - modellalkat
- Samsung Galaxy S10e - esszenciális
- Luck Dragon: Asszociációs játék. :)
- Vicces képek
- Macska topik
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Ukrajnai háború
- Letartóztatták, mert AI segítségével csalt az egyetemi vizsgán
- Samsung Galaxy Z Fold4 - egyre megy, honnan nézed
- További aktív témák...
- BenQ PD3205U 4K Tervezői Monitor!32"/99% sRGB/Pantone/AQCOLOR/Type-c/Mac Ready/Beszámítás!
- Samsung Odyssey G8 Ívelt Ultrawide Oled Monitor!34"/Oled/WQHD/175hz/0,1ms/Freesync-G-sync/Beszámítás
- Ahh! DELL Latitude 3410 Tartós Profi Laptop -60% 14" i5-10210U 4Mag 16GB 512GB SSD FHD IPS
- Ohh! DELL Latitude 3410 Tartós Profi Laptop -60% 14" i5-10210U 4Mag 8GB 256GB SSD FHD IPS
- PlayStation 4/Slim/Pro konzolok teljes karbantartása, pasztázással Thermal Grizzly 1 órán belül!!