|
|
|
| Помогите с кодом :( уже мозги парятся :) вроде работает, но не совсем :) если просто запустить и нажать поиск, по идее должно выдать весь список, и он выдает, но с ошибкой в файле Undefined variable: affs in z:\home\1ncux1.ru\www\ss\do_search.php on line 19. Если указать какой либо эффект то все ок, работает без ошибки. вот сам код:
do_search.php
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=koi8-r"></head>
<body>
<?php
chdir('');
set_time_limit(600);
$shift=0;
$affs_s= file('_aff.inc');
if($par1=='' || $par1=='--') { $par1='.*'; $pr1='';} else $pr1=$par1;
if($par2=='' || $par2=='--') { $par2='.*'; $pr2='';} else $pr2=$par2;
if($par3=='' || $par3=='--') { $par3='.*'; $pr3='';} else $pr3=$par3;
if($par4=='' || $par4=='--') { $par4='.*'; $pr4='';} else $pr4=$par4;
if($par5=='' || $par5=='--') { $par5='.*'; $pr5='';} else $pr5=$par5;
$c=count($affs_s);
for($i=0;$i<$c;$i++)
$affs_s[$i]=trim($affs_s[$i]);
if($oname=='') $oname='.*'; else $oname='.*'.$oname.'.*';
$oaff='';
$afc=count($affs);
$aa='';
if($afc)
foreach($affs as $a)
$aa.= '([\w\W]*'.$affs_s[$a-1].')|';
if($and_or=='and')
$aa='/('.substr($aa,0,-1).")\{$afc}/m";
else
$aa='/('.substr($aa,0,-1).")+/m";
$affects="(?:(?:Affects )|(?:Adds ))'?[^\r\n]+(?:(?: by \d+\.)|(?:' affect\.)|(?:'\.))\r\n";
if(trim($okeyw)=='')
$okeyw='[^\r\n]*';
else
{
preg_match_all('/([^\s]+)\s/',$okeyw.' ',$res,PREG_SET_ORDER);
$okeyw='';
foreach($res as $row)
$okeyw.='(?:'.trim($row[0]).'(?:\s[^\r\n]*)?)|';
$c=count($res);
$okeyw=substr($okeyw,0,-1);
$okeyw="(?:[^\r\n]+\s)?(?:$okeyw)\{$c,}";//
}
if($omat=='--') $omat='[^\r\n]*';
$l_max=0;
if($olev=='') $olev='\d+';
elseif (strpos('0'.$olev,'-'))
{
$l_min=intval(substr('0'.$olev,0,strpos('0'.$olev,'-')));
$l_max=intval(substr('0'.$olev.' ',1+strpos('0'.$olev,'-'),-1));
if(!$l_max) $l_max=999999;
$olev='\d+';
}
$n_max=0;
if($ovnum=='') $ovnum='\d+';
elseif (strpos('0'.$ovnum,'-'))
{
$n_min=intval(substr('0'.$ovnum,0,strpos('0'.$ovnum,'-')));
$n_max=intval(substr('0'.$ovnum.' ',1+strpos('0'.$ovnum,'-'),-1));
if(!$n_max) $n_max=999999;
$ovnum='\d+';
}
$extra_flag="/(\w+)\s/";
$by_t['armor' ]="(?:.*\r\n)*";
$by_t['boat' ]="";
$by_t['clothing' ]="";
$by_t['container' ]="(?:.*\r\n)*";
$by_t['drink' ]="It holds $par1\.";
$by_t['food' ]="";
$by_t['fountain' ]="";
$by_t['furniture' ]="";
$by_t['gem' ]="";
$by_t['jewelry' ]="";
$by_t['jukebox' ]="";
$by_t['key' ]="Opens door in \"[^\r\n]+\" \[Vnum : \d+\] \([^\r\n]*\) to \w+\.";
$by_t['light' ]="";
$by_t['map' ]="";
$by_t['money' ]="";
$by_t['npc_corpse']="";
$by_t['pc_corpse' ]="";
$tmp=0;
$tmp2='';
if($pr2!='') { $tmp++; $tmp2.="(?=[^\.]* '$pr2')";}
if($pr3!='') { $tmp++; $tmp2.="(?=[^\.]* '$pr3')";}
if($pr4!='') { $tmp++; $tmp2.="(?=[^\.]* '$pr4')";}
if($pr5!='') { $tmp++; $tmp2.="(?=[^\.]* '$pr5')";}
$by_t['pill' ]="Level $par1 spells of:".$tmp2."[^\.]*\.\r\n";
if($pr1=='') $tmp='[^\r\n]+'; else $tmp='[^\r\n]*'.$pr1.'[^\r\n]*';
$by_t['portal' ]="Leads to $tmp\r\n";
$by_t['potion' ]=$by_t['pill'];
$by_t['scroll' ]=$by_t['pill'];
$by_t['smoke' ]="";
$by_t['staff' ]="Has $par1 charges of level $par2 '$par3'\.\r\n";
$by_t['tattoo' ]="";
$by_t['trash' ]="";
$by_t['treasure' ]="";
$by_t['wand' ]=$by_t['staff'];
$by_t['warp_stone']="";
$by_t['weapon' ]="Weapon type is $par1\.\r\nDamage is \d+d\d+ \(average \d+\)\.\r\nDamage class is $par2\r\n(?:Weapons flags:[\w\s]+)?";
if($otype=='--')
{
$otype='\w+';
$type_dep='(?:.*\r\n)*';
} else
$type_dep=$by_t[$otype];
$re="/#Obj: $oname \(Vnum : ($ovnum)\)\r\n".
"Material: $omat\r\n".
"Object '$okeyw' is type $otype, extra flags ([\w\s]+)\.\r\n".
"Weight is [-\d]+, value is [-\d]+, level is ($olev)\.\r\n".
"(?:This equipment has been LIMITED by number \d+\s\r\n)*".
"$type_dep".
"(?:Wear type: ([^\r\n]*)\r\n)?".
"((?:(?:(?:Affects )|(?:Adds ))[^\r\n]+\r\n)*)".
"(?:(:?Object is [^\r\n]+\r\n(?:Room: [^\r\n]+\r\n)?(?:[wesnud trpoal;\.]+\r\n)?)*)\r\n/miU";
$f=fopen("objlist.txt","rb");
$buf=fread($f,filesize("objlist.txt"));
fclose($f);
unset($f);
unset($affs);
unset($affs_s);
unset($by_t);
preg_match_all($re,$buf,$res,PREG_SET_ORDER);
unset($buf);
$i=0;
foreach($res as $row)
{
if(($l_max && ($row[3+$shift] < $l_min || $row[3+$shift] > $l_max))||
($n_max && ($row[1] < $n_min || $row[1] > $n_max)))
continue;
if($afc && !$row[5])
continue;
if($afc && !preg_match($aa,$row[5]))
continue;
echo nl2br($row[0])."<hr>";
$i++;
sleep(0);
}
unset($res);
if(!$i)
echo "No objects found.";
elseif($i==1)
echo "1 object found.";
else
echo "$i objects found.";
?>
</body>
</html>
|
fr.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<?php
$bap="";
$bar="";
?>
<link rel=stylesheet type="text/css" href="style.css" TITLE="Style">
</head>
<body>
<?php
function form_list($fn)
{
global $bar;
echo '<option value="--" selected>любой';
$affs_s= file($bar.$fn);
$c=count($affs_s);
for($i=0;$i<$c;$i++)
{
$s = trim($affs_s[$i]);
echo "<option value=\"$s\">$s\n";
}
}
Error_Reporting(E_ALL & ~E_NOTICE);
$t=$type;
$t=$_GET['type'];
echo "==$type==";
switch($t)
{
case 'boat':
case 'clothing':
case 'food':
case 'fountain':
case 'furniture':
case 'gem':
case 'jewelry':
case 'jukebox':
case 'light':
case 'map':
case 'money':
case 'npc_corpse':
case 'pc_corpse':
case 'tattoo':
case 'trash':
case 'treasure':
case 'warp_stone':break;
case 'drink':echo "Liquid: <select name=par1 id=par1>";form_list("_drinks.inc").'</select>';break;
case 'potion':
case 'scroll':
case 'pill':echo 'Spell level:<input style="width:50" name="par1" id="par1"><br>Spell1: <select name="par2" id="par2">';form_list("_spells.inc");echo'</select><br>Spell2: <select name="par3" id="par3">';form_list("_spells.inc");echo'</select><br>Spell3: <select name="par4" id="par4">';form_list("_spells.inc");echo'</select><br>Spell4: <select name="par5" id="par5">';form_list("_spells.inc").'</select>';break;
case 'portal':echo 'Leads to:<input class=edits name=par1 id=par1>';break;
case 'staff':
case 'wand':echo '<table cellpadding=0 cellspacin=0 border=0><tr><td>Charges:</td><td><input class=edits name=par1 id=par1></td></tr><tr><td>Spell level:</td><td><input class=edits name=par2 id=par2></td></tr><tr><td>Spell:</td><td><select name=par3 id=par3 style="width:150;">';form_list("_spells.inc");echo'</select></td></tr></table>';break;
case 'weapon':echo '<table cellpadding=0 cellspacin=0 border=0><tr><td>Type:</td><td><select style="width:100px" name=par1 id=par1>';form_list("_weaps.inc");echo '</select></td></tr><tr><td>Dam type:</td><td><select style="width:100px" name=par2 id=par2>';form_list('_d_type.inc');echo '</td></tr></table>';break;
// case '':
// case '':
}
?>
</body>
</html>
|
index.php
<?php
$bap="";
$bar="";
echo '<link rel=stylesheet type="text/css" href="'.$bap.'style.css" TITLE="Style">';
echo '<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">';
function form_list($fn)
{ global $bar;
echo '<option value="--" selected>любой';
$affs_s= file($bar.$fn);
$c=count($affs_s);
for($i=0;$i<$c;$i++)
{
$s = trim($affs_s[$i]);
echo "<option value=\"$s\">$s\n";
}
}
?>
<form action=<?php echo $bap."do_search.php";?> target="_blank" method="POST" onsubmit="if(spec.document.getElementById('par1')) this.par1.value=spec.document.getElementById('par1').value;if(spec.document.getElementById('par2')) this.par2.value=spec.document.getElementById('par2').value;if(spec.document.getElementById('par3')) this.par3.value=spec.document.getElementById('par3').value;if(spec.document.getElementById('par4')) this.par4.value=spec.document.getElementById('par4').value;if(spec.document.getElementById('par5')) this.par5.value=spec.document.getElementById('par5').value">
<input type=hidden name=par1>
<input type=hidden name=par2>
<input type=hidden name=par3>
<input type=hidden name=par4>
<input type=hidden name=par5>
<table><tr><td><table>
<tr><td>Obj name:</td><td><input name="oname" class=edits></td></tr>
<tr><td>Obj vnum:</td><td><input name="ovnum" class=edits></td></tr>
<tr><td>Keywords:</td><td><input name="okeyw" class=edits></td></tr>
<tr><td>Level: </td><td><input name="olev" class=edits></td></tr>
<tr><td>Material:</td><td><select style="width:150px" name="omat"><?php form_list("_m_type.inc"); ?></select></td></tr>
<tr><td>Obj type:</td><td><select style="width:150px" name="otype" onchange="if(exto.checked) spec.location.replace('<?php echo $bap;?>fr.php?type='+this.options(this.selectedIndex).value);return true;">
<?php form_list("_o_type.inc"); ?>
</select></td></tr>
</table>
</td><td valign=top><iframe width=270 height=150 marginwidth=0 src=<?php echo $bap."fr.php";?> name="spec" id="spec" FRAMEBORDER=0 SCROLLING=NO ></iframe><br> <input type=checkbox name=exto id=exto checked>Additional options</td></tr></table>
<table width=500 class=fl cellspacing=2 style="font-size:16px;font-weight:500">
<tr><td colspan=4 align=center bgcolor=#dcdcdf style="border-bottom:solid black 1px" >
Affects (<input type=radio name="and_or" value="and" checked>and,
<input type=radio name="and_or" value="or">or)</td>
<?php
$f = fopen($bar."_aff.inc","rb");
$i=0;
while(!feof($f))
{ $i++;
if(($i-1)%4==0) echo "</tr><tr>";
$s = fgets($f,4096);
if((($i-1)/4)%2==0)
echo "<td class=std1><input type=checkbox name=\"affs[]\" value=\"$i\">$s</td>";
else
echo "<td class=std2><input type=checkbox name=\"affs[]\" value=\"$i\">$s</td>";
}
fclose($f);
?></tr></table>
<br><input type="image" src="button.gif" value="Search">
</form>
|
Заранее, спасибо! | |
|
|
|
|
|
|
|
для: Tsamada
(13.01.2006 в 12:52)
| |
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
?>
|
в начало кода поставь, если я не прав поправят:) | |
|
|
|
|
|
|
|
для: P@Sol
(13.01.2006 в 12:55)
| | :) спасибо, сработало, а я провтыкал :)))) | |
|
|
|
|
|
|
|
для: Tsamada
(13.01.2006 в 12:52)
| | Так ошибка или notice? если notice, то ничего страшного - на сервере этого не будет...
или вставьте
Error_Reporting(E_ALL & ~E_NOTICE);
|
в начало файла do_search.php | |
|
|
|