ugrás a tartalomhoz

URL Ellenőrzése.

Alex Black · 2013. Júl. 11. (Cs), 02.56
Sziasztok.
A segítségeteket szeretném kérni egy olyan dologban,hogy le kellene ellenőriznem egy URL-t.
Például www.honlapom.hu/lap?VÁLTOZÓ
A változó adatbázisban el van tárolva,ezt már elkészítettem.
Ha a változó-t megtalálom az URL-ben akkor a DB-ben megtalált változónál a sorban egy másik mező értékét majd növelem +1-el.
Kódot nem írtam,azért mert nem tudom hogyan is tudnám ezt kivitelezni.
a $SERVER['HTTP_REFERER'] környékén próbálkoztam,de sajnos nem jött igazán össze.
Kérlek adjatok tanácsot hogyan induljak el ebben a dologban.
Előre is köszönöm.
 
1

$_GET

Karvaly84 · 2013. Júl. 11. (Cs), 03.13
2

A feladat egyszerű, ahhoz,

Joó Ádám · 2013. Júl. 11. (Cs), 04.04
A feladat egyszerű, de ahhoz, hogy segíteni tudjunk, tudnunk kell, mi az, ami nem megy.
3

Feladat

Alex Black · 2013. Júl. 11. (Cs), 13.31
Hát,eltároltam a ? utáni betűkből és számokból álló legenerált kódsorozatot DB-ben.
Azt szeretném megoldani hogy le ellenőrzöm hogy az url-ben benne van e a kód vagy sem.
a $_GET-et ismerem,de hogyan tudnám ezt így alkalmazni?
?$_GET['valtozo']?
Konkrétan az nem megy hogy hogyan ellenőrizzem le,az lenne a legjobb ha a le ellenőrzés után bele teszem egy változóba amivel aztán feltételeket adhatok meg,az menne már,csak az nem hogy hogyan tegyem változóbba az URL-ben lévő ? utáni kódsorozatot.
4

paraméterek

Poetro · 2013. Júl. 11. (Cs), 13.39
Az URL-ben átadott, általad keresett paraméternek van értéke is, vagy csak kulcsa? Mert ha csak kulcsa van, akkor végig kell menned a $_GET tömbön, és minden egyes kulcsot meg kell vizsgálnod, hogy létezik-e az adatbázisban (vagy ha egy bizonyos formája van - mondjuk tudjuk, hogy 16 karakter hosszú -, akkor csak azokat amik megfelelnek ennek a követelménynek).
Ha pedig a keresett paraméter kulcsa előre ismert, és csak az értékben változik, akkor a $_GET tömbből kikeresed a kulcs alapján az értéket, és máris mehet az adatbázisba.
5

DB

Alex Black · 2013. Júl. 11. (Cs), 13.47
DB-ben már benne lesznek a KÓDok,csak az a lényeg ha jön pl a Pisti az oldalamra,és van az URL-jében ? után egy kódsorozat(ami már van db-be ez már megvan) akkor tudjam hogy kód-os URL-el érkezett.
Csak nem tudom hogyan tudom a getet össze kapcsolni ezzel a művelettel úgy hogy ha már jön az oldalamra már le legyen ellenőrizve a kód,és műveleteket végezhessek vele.
6

van az URL-jében ? után egy

Poetro · 2013. Júl. 11. (Cs), 14.11
van az URL-jében ? után egy kódsorozat

Akkor az benne lesz a $_GET tömbben.
kódsorozat(ami már van db-be ez már megvan)

Az le is kell ellenőrízni, hogy megvan-e az adatbázisban, ugyanis én hallottam már gonosz Pistikékről, akik mindenféle kódokat összehordanak.
hogyan tudom a getet össze kapcsolni ezzel a művelettel úgy hogy ha már jön az oldalamra már le legyen ellenőrizve a kód

Ebből a mondatból erősen hiányzanak írásjelek, de ami a lényeg, megnézed a $_GET tömb elemeit, összehasonlítod az adatbázissal, és ha ez sikeresen teljesült, akkor végezhetsz vele műveleteket.
7

???

aztek · 2013. Júl. 12. (P), 08.59
nekem eléggé zavarosnak tűnik.. milyen esetet tudok elképzelni, amikor egy URL alapján automatikusan inkrementálni kell egy adatbázis értéket..

STATISZTIKA?

csak mert ha én egy rosszindulatú felhasználó vagyok és írok egy végtelen ciklust, ami folyamatosan meghívogatja az adott címet anélkül hogy megvárná a választ, szerintem percek alatt kivégzem a szervert egy számítógéppel is, főleg hogyha nem perzisztens kapcsolatot használsz az RDBMS-hez..

egyébként jól mondték a többiek, a $_GET tömbön kell iterálni, de ha csak http://localhost/?{valami} formátumot használsz, abban az esetben a key-ek között kell keresgélned..
if (array_key_exists('{valami}', & $_GET)) {
	// ..
}
nem járhatóbb ha a változó mindig fix?

csak mert akkor nem kell mindenképp végigmenni az összes elemen, hanem csak akkor megyünk bele a logikai ágba, ha egyáltalán létezik az adott elem..

http://localhost/?s={valami}
if (isset($_GET['s']) && $_GET['s'] === '{valami}') {
	// ..
}
szóval ha elmondod mi az eredeti cél ezzel a megoldással, lehet kapsz jobb javaslatokat..

:)
8

Az első példádban miért kell

bamegakapa · 2013. Júl. 12. (P), 09.13
Az első példádban miért kell referencia szerint átadni a tömböt?
10

nem kell, de érdemes..

aztek · 2013. Júl. 12. (P), 19.35
NEM KELL, DE ÉRDEMES MEGSZOKNI - :)

ahhoz hogy értsd miért használtam, először is tisztában kell lenni azzal mi a változó maga.. ugye a processzor szintjén az csak egy memóriacímke, ahol eltároltuk a kívánt adatot, így az hozzáférhetővé válik későbbi logikai műveletek számára is..

vannak programnyelvek (mint például a Java, Javascript, C#, ..), ahol minden változó referencia, tehát az kerül külön műveletbe, ha le szeretnénk másolni egy másikba (deep copy).. a PHP egy kicsit másképp működik, mert ott minden változót lemásol és azt kell feltüntetned, ha referenciát szeretnél kapni az adott memóriatartományról és nem az értékére vagy kíváncsi.. amennyiben ezt nem jelölöd, minden memóriában tárolt változó értéke lemásolódik, az eredeti pedig bent marad változatlanul..

gondolom így már egyértelmű, milyen előnyei vannak optimalizálás szempontjából, mivel sok kicsi sokszor sokra megy és a PHP amúgy is eléggé hanyagul bánik az erőforrásokkal..

egyszer leástam a C-ben íródott Zend Engine mélyére és meglepődve tapasztaltam, hogy minden változót 4 változóban tárol, a konstans meg nem érinthetetlen memóriaterület, hanem változó, amit plusz logikával véd meg utólag..

tehát különösebb jelentősége nincs az előbbi esetben, inkább megszokás, de jó ha megszokod te is!

12

Akkor ez pont az a fajta

bamegakapa · 2013. Júl. 12. (P), 20.10
Akkor ez pont az a fajta mikrooptimalizálás, ami ellen minden erőmmel küzdök :).

Szerintem érdemesebb nem megszokni így...
13

Ez mind így van, leszámítva,

Joó Ádám · 2013. Júl. 12. (P), 20.52
Ez mind így van, leszámítva, hogy a PHP copy-on-write használja a változókat, így a referenciával valójában lassabb lett a kódod.
18

~

aztek · 2013. Júl. 13. (Szo), 12.56
milyen jó kis eszmecsere alakult ki egy egyszerű $_GET-es kérdésből, ezt már szeretem - :) - mindig szeretek tanulni valami újat, azonban a referenciákra kitérve érdemes megnézni az alábbi oldalt, nagyon hasznos lehet..

http://www.phpbench.com/

egyedül kettő vagy annál több dimenziós tömb esetén lassabb, vannak az oldalon külön erre vonatkozó mérések is..

19

Középút

Pepita · 2013. Júl. 14. (V), 00.53
Én azt gondolom - fentiek figyelembevételével együtt - hogy referenciaként nagyobb adathalmazt érdemes átadni, és a $_GET éppen nem tartozik ezek közé. De ha pl. egy MVC modelben legyártasz egy nagyobb adathalmazt (pl. adatbázis dump) és controllerben akarod zip-elni illetve kiküldeni letöltésre - ilyen esetekben jó referenciaként átadni.
14

a konstans meg nem

MadBence · 2013. Júl. 12. (P), 21.44
a konstans meg nem érinthetetlen memóriaterület, hanem változó, amit plusz logikával véd meg utólag..
A C konstansok (ma is tanultam valamit, eddig azt hittem, csak C++-ban vezették be a const módosítót) sem érinthetetlenek, egyszerűen fordításkor történik egy ellenőrzés, hogy nem-e akarod írni azt a konstansot... A megkerüléséhez csak ennyi kell:
#include<stdio.h>

int main(int argc, char* argv[]) {
  const int j=1337;
  (&j-&argc)[&argc]=1338;
  printf("%d\n", j);
  return 0;
}
15

ma is tanultam valamit, eddig

Joó Ádám · 2013. Júl. 12. (P), 23.42
ma is tanultam valamit, eddig azt hittem, csak C++-ban vezették be a const módosítót


Már ’89 óta része a nyelvnek.

A megkerüléséhez csak ennyi kell:


Ezt egy kicsit túlbonyolítottad :)
#include <stdio.h>

int main() {
    const int j = 41;
    
    *((int *) (void *) &j) = 42;
    
    printf("%d\n", j);
    
    return 0;
}
16

Meglepődtem, hogy van const,

MadBence · 2013. Júl. 13. (Szo), 00.12
Meglepődtem, hogy van const, mert határozott emlékeim vannak, hogy anno előadáson a C++ újdonságai között ki volt emelve, mint okosabb #define (bár lehet, hogy tévedek, lassan 3 éve volt). A kódod szép megoldás, én is faragtam rajta :)
#include<stdio.h>

int main() {
  const int j=1337;
  0[(int*)&j]=1338;
  printf("%d\n", j);
  return 0;
}
17

Meglepődtem, hogy van const,

Joó Ádám · 2013. Júl. 13. (Szo), 00.50
Meglepődtem, hogy van const, mert határozott emlékeim vannak, hogy anno előadáson a C++ újdonságai között ki volt emelve, mint okosabb #define (bár lehet, hogy tévedek, lassan 3 éve volt).


Onnan került vissza a C szabványba :)

A kódod szép megoldás, én is faragtam rajta :)


Nem rossz :)
9

Fatal error

Poetro · 2013. Júl. 12. (P), 12.28
As of PHP 5.3.0, you will get a warning saying that "call-time pass-by-reference" is deprecated when you use & in foo(&$a);. And as of PHP 5.4.0, call-time pass-by-reference was removed, so using it will raise a fatal error.

Passing by Reference
11

:)

aztek · 2013. Júl. 12. (P), 19.55
mint profi nyilván te is tisztában vagy vele, hogy miért jó a referencia, ezzel a hozzászólással nekem elvetted volna a kedvem a további kísérletezéstől és ez szerintem nem helyes..

azonban igazad van, a függvény definiálásánál kell ügyelni rá:
$a = 2;
$b = 5;

function & foo(& $a, $b) {
	$x = $a + $b;
	$a = 8;
	$b = 8;
	
	// ha nem referenciával térnénk vissza, lemásolná a $x-t, visszaadná 
	// azt a változót és a garbage collector kitakarítaná a funkción
	// belül, de így azt adja vissza ami már eleve megvan..
	
	return $x;
}

echo ($c = foo($a, $b)) . PHP_EOL . $a . PHP_EOL . $b;

// 8
// 5
// 7 (=== $c)
szerintem így már el lett vetve a mag, ami kicsírázik ha megfelelő földbe kerül és a tudás mindenkié..