Warning: Your script possibly relies on a session side-effect...
Sziasztok!
Írtam egy keresést és valamiért ha pontos keresésnél ezt a hibát kapom :(
■ Írtam egy keresést és valamiért ha pontos keresésnél ezt a hibát kapom :(
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
valamiért
kód
Törhető
Ami a hibát illeti, amiatt figyelmeztet, hogy a $_SESSION['where'] létezik és hogy lehet, hogy a $where-t használod helyette. Bár itt egyértelműen nem ez a helyzet. Ha jól értettem a doksit.
Egyébként valami tervezési hiba lehet, ha session-be szeretnél SQL query-t átadni. Mit szeretnél ezzel pontosan csinálni?
értelmetlen
Talán megvan a hiba?
És csak is ekkor jelenik meg a hiba, nem lehet ,hogy a szerveren bekéne kapcsolni ezt a register_globals -t?
Bekapcsolni?
az okos PHP...
Egyszer énis belefutottam ilyenbe. Hogy pontosan mi okozza, nem sikerült megtalálni, viszont úgy vélem okozhatja, hogy a PHP megpróbálja kitalálni, hogy van egy változód, amit megpróbáls register_globals=on-nal és anélkül is elérni. Illeve a kód register_globals=on-ra lett írva.. Ez onnan látszik, hogy van benne egy extract($_POST), talán ez izgatja be a PHP-t, hogy ilyet írjon ki.
Amúgy:
A helyes sor:
$where .= " AND termek_kod LIKE '%'.$_POST['termek_kod']'.%'";
Másik, hogy a $_SESSION["where"]=$where; sor miatt is szólhat, hiszem $where és $_SESSION['where'] is van. ugye register_globals = on esetében a $where automatikusan létrejön. Eleve a $_SESSION['where']-hez fűzd a WHERE stringet!
A biztonságról: mysql_real_escape_string()-en nyomd át az SQL-ben szereplő értékeket.
szerintem, ha a az extract($_POST)-ot kiveszed, már nem fog szólni, igaz, akkor a fent említett módosításokat meg kell csinálnod...
És a bónusz, hogy legközelebb átgondold, hogy mi a jól olvasható és tömör kód, ami ráadásul újra felhasználható is (nem ellenőriztem le, csak leírtam):
Jónak jó :)
De ezt nem értem, hogy ha kap értéket akkor is hibát ír ki de ezzel a sorral problémázik.
putWhereIntoSession( array('termek_nev', 'termek_kod', 'mennyiseg' ) );
kettőt...
A mysql_real_escape_string()-miatt élő mysql-kapcsolatra van szükséged.
Ha ilyen nincs, akkor mysql_escape_string()-et használj...
Az implode elé meg raktam még egy @-t, hogy ha üres tömb, akkor ne adjon warningot.
Ez nálam megy:
Fatal error
Fatal error: Call to undefined function: putwhereintosession()
és erre utal a hiba
putWhereIntoSession( array('termek_nev', 'termek_kod', 'mennyiseg' ) );
Élő mysql kapcsolatom az van mert elötte meg meghívtam az oldalra.
esetleg...
A PHP manual szerint:
"PHP 3-ban a függvényeket definiálni kell, mielőtt hivatkozás történik rájuk (függvényhívás előtt). PHP 4-től nincs ez a megkötés, kivéve amikor egy függvény feltételesen van definiálva,..."
Vagyis elvileg tök mindegy, hogy a fájl elején, vagy végén van definiálva.
Egyszer énis belefutottam, hogy nem volt jó a fájl végén definiálni, de az nagyon rég volt, lehet, hogy még PHP3-as időszakban...
Minden ok, de mégsem.
Megpróbáltam azt is, hogy a mysql queribe beírtam a WHERE termek_nev='cukor' és mivel ez nem létezik a fenti üzit kapom, már nem tudom, hogy mit csináljak vele, de nekimegyek a falnak vele :)
google mondja
szerk: ha az eredeti kódodban a $_SESSION["where"]=$where; sor előtt megnézted volna a var_dump($where);-t, akkor láthattad volna hogy a $where változó értéke null.
mindez feltételezés.
NULL
Eggyet nem értek
ha jól értem...
2.) Megbeszéltük, hogy valszeg attól gyanús neki, hogy a $valami és a $_GET['valami'] is szerepel benne (biztos van még erre való utalás máshol is)
3.) De most őszintén, mennyiből tartott volna ezt beleírni?
számokat kezeljük számként
Ez nem túl szerencsés, mert egy számot (az id valszeg az) feleslegesen szöveggel hasonlítasz össze. Az
5 = 5
kiértékelése kb. kétszer gyorsabb, mint az5 = '5'
-é.Üdv,
Felhő
jogos...
Ez persze nem panasz, hanem szégyen rám nézve... :(
Mondjuk én úgy szoktam csinálni, hogy 1-től veszek fel értéket az adatbázisban, aztán (int)$_GET['id']-ként használom, így ha nem szám, akkor 0 lesz, vagyis nem kap találatot.
És akkor ezen túlmenően: ha a $_GET['kod'] is csak szám lehet, akkor azt is úgy...