Autor | Zpráva | ||
---|---|---|---|
Hooonza Profil |
#1 · Zasláno: 3. 2. 2011, 07:07:33
Hezký den, poradíte mi prosím, proč nefunguje podmínka
if (!(in_array($ipadr, $silent)) || (preg_match($googlebot_reg,$ipadr))) ani if ((!in_array($ipadr, $silent)) || (!preg_match($googlebot_reg,$ipadr))) zatímco if (!in_array($ipadr, $silent)) { if (!preg_match($googlebot_reg,$ipadr)) { funguje? Asi jsem nepochopil ten operátor ||, jak napsat ANI ... ANI, jak to je správně? Dík! |
||
kazlik Profil |
#2 · Zasláno: 3. 2. 2011, 07:47:24
if(!in_array($ipadr, $silent) && !preg_match($googlebot_reg,$ipadr)){ Operátor || znamená NEBO a operátor && znamená A ZÁROVEŇ. (doufám, že to není blbě) |
||
Tori Profil |
#3 · Zasláno: 3. 2. 2011, 07:50:36
Hooonza:
/* První NEBO druhá NEBO obě podmínky jsou splněny. Negace ovlivní vyhodnocení jedné podmínky, nikoli celku. */ if ($a || $b) $c=true; // je ekvivalentni s: if ($a) $c=true; else if ($b) $c = true; /* Prvni I druhá podmínka jsou splněny. */ // $a i $b jsou true if ($a && $b) $c=true; // $a i $b jsou false, což se dá říct i jako "ani $a ani $b není true" if (!$a && !$b) $c=true; |
||
Hooonza Profil |
#4 · Zasláno: 3. 2. 2011, 08:32:48 · Upravil/a: Hooonza
Jasně, tam nemá být "a". Stačí mi, když bude nesplněná jedna podmínka, aby vyhodnocení prošlo (konkrétně: skript hlídá návštěvníky stránky a pošle jejich IP mailem, kdyby to chtěl někdo zneužívat, ať ho zablokuji. Hlášení ale nepotřebuji poslat, pokud tu stránku otevřu já - $silent obsahuje moje IPčka a taky to nepotřebuji, když tam přijde googlebot, ten ať si chodí, to vědět nemusím. Jenže googlebot má IP pokaždé jinou, takže si ho do $silent těžko přidám, zdá se ale, že všechny jeho IP začínají stejnou sekvencí, bota tedy vyhodnotím regulárním výrazem). Tedy bych čekal, že
if ((!in_array($ipadr, $silent)) || (!preg_match($googlebot_reg,$ipadr))) bude fungovat, tam by se snad mohla vyhodnocovat každá závorka zvlášť? Jak píše Tori, první možnost. Jenže to nefunguje, mail přijde i v případě, že regulární výraz projde jako shodný (to mám otestováno dalším skriptem). |
||
Tori Profil |
#5 · Zasláno: 3. 2. 2011, 09:09:18 · Upravil/a: Tori
Hooonza:
Ale vždyť lidskou řečí jste to napsal jako &&: „Hlášení ale nepotřebuji poslat, pokud tu stránku otevřu já [...] a taky to nepotřebuji, když tam přijde googlebot.“ U OR (||) stačí, aby byla splněná alespoň jedna podmínka, a všechny následující se rovnou přeskočí. Takže IP není vaše => podmínka splněna => googlebota nekontroluju => celé IF je vyhodnoceno jako true => mail se odešle (a závorky navíc v podmínce to nezmění). Vizte [#2]. edit: ↓↓xmark: Díky, to jsem nevěděla jak jednoduše vysvětlit. :) |
||
Hooonza Profil |
#6 · Zasláno: 3. 2. 2011, 13:00:11
Ano napsal jsem to:
Já nepotřebuji, abych zároveň navštívil stránku já se svou IP i s IP adresou googlebota :-) Chci, když navštívím stránku já nebo když přijde googlebot, aby podmínka prošla... :-) && znamená a zároveň polidsku, žejo? |
||
xmark Profil |
#7 · Zasláno: 3. 2. 2011, 13:17:02
Hooonza:
Může ti pomoct, když budeš vypisovat AND, OR. A ještě jedna finta, která se může hodit: (!$a AND !$b) rovná se !($a OR $b) (!$a OR !$b) rovná se !($a AND $b) |
||
Hooonza Profil |
#8 · Zasláno: 3. 2. 2011, 13:28:12
Aha, tohle by možná nějak prošlo, ale s počítačema se o logiku hádat nebudu, kašlu na to, chtěl jsem to mít kvůli přehlednosti :-) Řeším to 1 proměnnou nastavenou na true a 1 rozhodováním navíc,
if ((in_array($ipadr, $silent)) || (preg_match($googlebot_reg,$ipadr))) $sendmail = false; a pak krásně if ($sendmail) funguje jak má. Mockrát díky všem za pomoc i trpělivost... ! :-) |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0