php értelmező hiba?
Sziasztok!
Van egy if-else szerkezet, nagyjából a következő:A problémám a következő:
Az if ágban levő dolog, ahol 'történik valami', megtörténik, DE megcsinálja az else ágban levő mysql_query-t is. Mindezt azzal fűszerezve, hogy semelyik else ágban levő echo, log nem ír ki sehová semmit. Error reporting bekapcsolva, nem ír ki még notice-t sem. Ugyanakkor az adatbázisba meg beszúrásra kerül 5 darab sor, pedig semmilyen ciklusban nincs benne ez a kódrészlet!
Segítsen már valaki lécci, hogy mi lehet a gond, mert már tegnap este óta szenvedek, és szó szerint mindjárt elsírom magam.
Köszi, sziasztok!
■ Van egy if-else szerkezet, nagyjából a következő:
if ( --- akarmi ---){
//itt történnek dolgok
}
else{
echo 'Nincs a keresésnek megfelelő termékkkk!';
$kifejezes = 'HIBA';
$egyeb = 'HIBA';
$firephp->log($kifejezes);
$sql = 'INSERT INTO keresesek VALUES(
NULL,
"'.$kifejezes.'",
"",
"'.mysql_real_escape_string(getIP()).'",
"'.mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']).'",
NOW(),
0,
"'.$egyeb.'"
)';
mysql_query($sql);
echo $sql;
include_once('main.inc.php');
}
Az if ágban levő dolog, ahol 'történik valami', megtörténik, DE megcsinálja az else ágban levő mysql_query-t is. Mindezt azzal fűszerezve, hogy semelyik else ágban levő echo, log nem ír ki sehová semmit. Error reporting bekapcsolva, nem ír ki még notice-t sem. Ugyanakkor az adatbázisba meg beszúrásra kerül 5 darab sor, pedig semmilyen ciklusban nincs benne ez a kódrészlet!
Segítsen már valaki lécci, hogy mi lehet a gond, mert már tegnap este óta szenvedek, és szó szerint mindjárt elsírom magam.
Köszi, sziasztok!
if ágban
if
ágban, hogy reprodukálni tudjuk a hibát. Lehet, hogy abban van valami, aminek nem kellene ott lenni. Sőt, az is lehet, hogy vannak az oldalon olyan hivatkozások, amiket a böngésző betölt / előtölt, és azok egyike fut bele azelse
ágba. Érdemes lenne megnézni a HTTP forgalmat is pl. Firebug-gal, HTTPFox-szal, Fiddler-rel stb.if-ben
A fő rejtély, hogy az említett else ágban semmilyen ciklus nincs, és mégis 5 darab sor kerül beszúrásra.
Vegyük például a következő
Mondjuk, valamiért lefut
Mint láthatod, a fenti kódban
A fenti kódot így kellene formázni:
Ezen kívül utána jártál a másik tanácsomnak is?
Esetleg nem is az fut le,
Egyébként ettől függetlenül: ha van rá lehetőséged, érdemes lenne átállni legalább a mysqli használatára és az escape-elés helyet a prepare-t részesíteni előnyben.
Ez fut le
Poetro-nak:
A rosszul/félreérthetően formázott else blokkról itt nem lehet szó, hiszen egy blokkon belül van egy echo, meg a lekérdezés is. A lekérdezés lefut 5x, az echo meg egyszer sem. ÍRtad, hogy a firephp nem megbízható, de azért egy echoval való kiírásnak csak működni kéne...
Megjelenés
debug
else
ágban levő kóddal is. Ez már csak azért is fontos, hogy az abban létrejött változók ne szennyezzék be a globális névteret, ezáltal megjósolhatatlan működést okozzanak például azinclude
-olt fájl esetén (amiben szintén elérhető lesz például a$sql
változód, amit valószínűleg nem is szeretnél).olyan hivatkozások, amiket a
Előtöltés dinamikus oldalaknál is létezik?
Hm. Egyre izgalmasabb ez a webes világ...
Dinamikus oldalak
Egyes böngészők csak a megfelelő
link
elemmel megjelölt oldalakat töltik be (pl.<link rel="next" href="next.html">
), mások pedig a gyorsabb élmény miatt előtöltenek.Pl. abból, hogy van az
Dinamikus alatt értem a valamilyen szkripttel előállított, nem statikus lapokat, pl. a PHP-vel előállítottakat.
Ott van értelme
?q=keresettszo
). Ekkor érdemes lehet előtölteni a következő oldalt (?q=keresettszo&page=1
), ezáltal gyorsítani az eredmények áttekintését a felhasználó szemszögéből.Első körben keresnék egy
Abból, amit írtál, arra tippelnék, hogy az else előtt eggyel kevesebb, mögötte meg eggyel több kapcsos zárójel van, mint kellene...
szerkesztő
Használsz RewriteRule-t a
Rewrite igen
csak ennyi van egyébként:
RewriteRule ^(.*) index.php?rewrite=$1 [QSA]
innentől kezdve egy php file kezel le minden url-t
Ebből adódik
index.php
-d lát el, lehet, hogy olyat is amit nem szeretnél, ez eredményezheti az öt lekérést, amit az fog kiszolgálni, ezáltal megtörténik az adatbázisba írás.content-type
Asszem sikerült kibogozni!
Végigbogarászva az error logot, és megfogadva deejayy és Poetro tanácsait a rewrite és httpfox kapcsán a bűnös a favicon lett.
<link rel="icon" type="image/ico" href="/favicon.ico" />
/ jel hiányzott a hrefben.
Most már úgy tűnik jó...
Hogy miért pont 5x hajtódott végre a témanyitóban említett kód, az egyelőre rejtély, valószínű a böngésző annyiszor próbálta - sikertelenül - letölteni a favicon-t.
Mindenkinek köszi a segítséget, remélem, most már minden ok lesz, mert ráment a tegnap estém, meg nagyjából az egész mai napom.