Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск в базе (Новичек)
 
 автор: Tsamada   (13.01.2006 в 12:52)   письмо автору
 
 

Помогите с кодом :( уже мозги парятся :) вроде работает, но не совсем :) если просто запустить и нажать поиск, по идее должно выдать весь список, и он выдает, но с ошибкой в файле 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_sfile('_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_sfile($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_sfile($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,&nbsp;
<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>

Заранее, спасибо!

   
 
 автор: P@Sol   (13.01.2006 в 12:55)   письмо автору
 
   для: Tsamada   (13.01.2006 в 12:52)
 


<?php 
Error_Reporting
(E_ALL & ~E_NOTICE); 
?> 

в начало кода поставь, если я не прав поправят:)

   
 
 автор: Tsamada   (13.01.2006 в 12:58)   письмо автору
 
   для: P@Sol   (13.01.2006 в 12:55)
 

:) спасибо, сработало, а я провтыкал :))))

   
 
 автор: Loki   (13.01.2006 в 12:58)   письмо автору
 
   для: Tsamada   (13.01.2006 в 12:52)
 

Так ошибка или notice? если notice, то ничего страшного - на сервере этого не будет...
или вставьте

Error_Reporting(E_ALL & ~E_NOTICE);

в начало файла do_search.php

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования