Заточка предметов

Mareks

Новичок
Репутация
0 / 14
Привет всем я только недавно начал изучать РНР опыта не имею так что прошу не бить :) буду очень признателен если подскажете кам можно было лучше написать или советы какието так же по самой защите скрипта.

Код:
 if(isset($zatochka)){
  if (!get_magic_quotes_gpc()){
      $_POST['name_item']=mysql_escape_string($_POST['name_item']);
      $_POST['urov_zat_or']=mysql_escape_string($_POST['urov_zat_or']);
    $_POST['min_iznos']=mysql_escape_string($_POST['min_iznos']);
    $_POST['max_iznos']=mysql_escape_string($_POST['max_iznos']);
    }
 /* if($_POST['session_id']!=session_id()){
      exit();
      }*/
 $name_items=htmlspecialchars(stripslashes($_POST['name_item']), ENT_QUOTES);
 $name_item=trim($name_items);
 $urov_zat_ors=htmlspecialchars(stripslashes($_POST['urov_zat_or']), ENT_QUOTES);
 $urov_zat_or=trim($urov_zat_ors);
 $min_iznoss=htmlspecialchars(stripslashes($_POST['min_iznos']), ENT_QUOTES);
 $min_iznos=trim($min_iznoss);
 $max_iznoss=htmlspecialchars(stripslashes($_POST['max_iznos']), ENT_QUOTES);
 $max_iznos=trim($max_iznoss);
// делаем проверку формы на правильность введеных параметров
 if (strlen($urov_zat_ors)>2 and strlen($min_iznoss)>3 and strlen($max_iznoss)>3 ){
     exit("Вы ввели не правильное значение!");
     }

if ($name_item){
    if ($stat['bloked']!=0)
        $error = "У вас нет прав!";
    elseif (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)|(\<>)|(\|(\<)|(\>)|(\%3B)|(\")|]/",$name_item))
       $error = "Имя предмета имеет запрещенные символы.";
         elseif (preg_match("/^[\b]*$/",$urov_zat_or))
             $error = "Вы ввели неправельный уровень заточки.";
              elseif (preg_match("/^[\b]*$/",$min_iznos))
                 $error = "Минимальный износ имеет запрещенные символы.";
                elseif (preg_match("/^[\b]*$/",$max_iznos))
                      $error = "Максимальный износ имеет запрещенные символы.";
          else{


//делаем запрос в БД и проверяем на предмет существования такой вещи у персонажа не стоит ли она на продаже или неодета она на нем
$object=mysql_query("SELECT   objects. * FROM objects, slots WHERE objects.user='".$stat['user']."' AND objects.tip = 1 AND objects.title ='".$name_item."' AND objects.urov_zat_or ='".$urov_zat_or."' AND objects.min_iznos ='".$min_iznos."' AND objects.iznos ='".$max_iznos."'  AND objects.bank=0 AND objects.komis=0 AND objects.id NOT IN (slots.1,slots.2,slots.3,slots.4,slots.5,slots.6,slots.7,slots.8,slots.9,slot
s.10,slots.11,slots.12,slots.13,slots.14,slots.15,slots.16,slots.17,slots.18,slo
t
s.19) ORDER BY time DESC");
$objects=mysql_fetch_array($object);

          // Делаем проверку если предмет равен уровню заточки (urov_zat_or) 15 то дальнейшая заточка запрещена!
         if ($objects['urov_zat_or']==15){
              $error = "Вы достигли максимального уровня заточки"; break;
              }else{ // в противном случае продолжаем


          // также проверяем полученных данных с введенными. Проверяем имя предмета мин износ и макс износ
        if ($objects['title']===$name_item AND $objects['urov_zat_or']==$urov_zat_or AND $objects['min_iznos']==$min_iznos AND $objects['iznos']==$max_iznos){
             // если уровень заточки лежит в деапазоне от 0 до 6 включительно выполняем этот блок
            if ($objects['urov_zat_or']>=0 AND $objects['urov_zat_or']<=6){
                //$id=$objects['id'];
                  $zat=rand(1,10);
                      switch ($zat){
                            case 1://Удача
                            mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 2://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 3://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 4://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 5://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 6://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 7://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 8://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 9://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 10://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              default: echo"<B STYLE='COLOR: Red'>Ошибка в сценарии!![/B]"; break;
                      }
             }else{ // если уровень заточки больше проверяем в другом блоке

               // если уровень заточки от 7 до 10 выполняем етот блок
            if ($objects['urov_zat_or']>6 AND $objects['urov_zat_or']<=10){
                //$id=$objects['id'];
                  $zat=rand(1,10);
                      switch ($zat){
                            case 1://Удача
                            mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 2://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 3://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 4://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 5://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 6://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 7://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 8://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 9://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 10://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              default: echo"<B STYLE='COLOR: Red'>Ошибка в сценарии!![/B]"; break;
                      }
             }else{

             // если уровень заточки от 11 до 15 то этот
 if ($objects['urov_zat_or']>10 AND $objects['urov_zat_or']<=15){
                //$id=$objects['id'];
                  $zat=rand(1,10);
                      switch ($zat){
                            case 1://Удача
                            mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+2 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 2://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 3://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+2 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 4://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 5://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+2 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 6://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 7://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+2 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 8://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              case 9://Удача
                              mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+2 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              case 10://Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              default: echo"<B STYLE='COLOR: Red'>Ошибка в сценарии!![/B]"; break;
                      }
             }else{ echo"ошибка в уровне заточки";}

             }
             }
        } else {
            echo "<font color=red>Вы ввели не правельные параметры</font>";
            }
                }

                    }
    }

 unset($objects);

echo"<font color=green>".$msg."</font>";
echo"<font color=red>".$error."</font>";
}else{
//форма запроса созлаем переменные name_item - имя предмета, min_iznos - минимальний износ, max_iznos - максимальный износ
echo"
<FIELDSET style='WIDTH: 98.6%'><legend>Заточка оружия</legend>
<table width=100% cellspacing=0 cellpadding=5>
<form  action='zatochka_or.php' method='POST'>
<tr><td align='center'>[b]Введите название предмета: <input type=text size=25 value='' name='name_item' ><big>+</big><input type=text size=3 value='0' name='urov_zat_or'>- Текущий уровень заточки[/b]</td></tr>
<tr><td align='center'>[b]Износ вещи: <input type=text size=5 value='0' name='min_iznos' class=input >из<input type=text size=5 value='0' name='max_iznos' class=input>[/b]</td></tr>
<tr><td align='center'><input type=submit value='Заточить оружие' class=input name='zatochka'>
<input type=hidden name='session_id' value=<?php echo session_id();?>
</td></tr>";

echo"
</table>
</FIELDSET>";
}

за советы и т.д. всем нажму спасибо
 
:)
Ужас какой. Для начала надо в 5 раз сократить количество текста, и только потом можно смотреть, что с этим делать.

На сколько я разобрался, гигантские свичи можно сократить до

Код:
if(rand(1,10) % 2){
    //Удача
    mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
    $msg = "Вы удачно заточили вещь на +1"; 
} else {
    //Неудача
    mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
    $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; 
}

Перепишите пожалуйста код с учётом этой рекомендации, тогда можно будет хоть понять что происходит.
 
подскажи вот этот момент if(rand(1,10) % 2) на сколько помню % это остаток от деления что то я не доганяю это.
switch я использовал для того типа шанс удачи и неудачи 50% на 50%. а в том примере я что то не пойму какой будет результат ??
 
if(rand(1,10) % 2){
если(рандом(1,10) кратен(делится на) 2){ то идём дальше
 
alexxz ВВот вроде как ты просил

Код:
 if(isset($zatochka)){
  if (!get_magic_quotes_gpc()){
      $_POST['name_item']=mysql_escape_string($_POST['name_item']);
      $_POST['urov_zat_or']=mysql_escape_string($_POST['urov_zat_or']);
    $_POST['min_iznos']=mysql_escape_string($_POST['min_iznos']);
    $_POST['max_iznos']=mysql_escape_string($_POST['max_iznos']);
    }

 $name_items=htmlspecialchars($_POST['name_item'], ENT_QUOTES);
 $name_item=trim($name_items);
 $urov_zat_ors=htmlspecialchars($_POST['urov_zat_or'], ENT_QUOTES);
 $urov_zat_or=trim($urov_zat_ors);
 $min_iznoss=htmlspecialchars($_POST['min_iznos'], ENT_QUOTES);
 $min_iznos=trim($min_iznoss);
 $max_iznoss=htmlspecialchars($_POST['max_iznos'], ENT_QUOTES);
 $max_iznos=trim($max_iznoss);

 if (strlen($urov_zat_ors)>2 and strlen($min_iznoss)>3 and strlen($max_iznoss)>3 ){
     exit("Вы ввели не правильное значение!");
     }

if ($name_item){
    if ($stat['bloked']!=0)
        $error = "У вас нет прав!";
    elseif (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)|(\<>)|(\|(\<)|(\>)|(\%3B)|(\")|]/",$name_item))
       $error = "Имя предмета имеет запрещенные символы.";
         elseif (preg_match("/^[\b]*$/",$urov_zat_or))
             $error = "Вы ввели неправельный уровень заточки.";
              elseif (preg_match("/^[\b]*$/",$min_iznos))
                 $error = "Минимальный износ имеет запрещенные символы.";
                elseif (preg_match("/^[\b]*$/",$max_iznos))
                      $error = "Максимальный износ имеет запрещенные символы.";
          else{


$object=mysql_query("SELECT   objects. * FROM objects, slots WHERE objects.user='".$stat['user']."' AND objects.tip = 1 AND objects.title ='".$name_item."' AND objects.urov_zat_or ='".$urov_zat_or."' AND objects.min_iznos ='".$min_iznos."' AND objects.iznos ='".$max_iznos."'  AND objects.bank=0 AND objects.komis=0 AND objects.id NOT IN (slots.1,slots.2,slots.3,slots.4,slots.5,slots.6,slots.7,slots.8,slots.9,slot
s.10,slots.11,slots.12,slots.13,slots.14,slots.15,slots.16,slots.17,slots.18,slo
t
s.19) ORDER BY time DESC");
$objects=mysql_fetch_array($object);

         if ($objects['urov_zat_or']==15){
              $error = "Вы достигли максимального уровня заточки"; break;
              }else{

        if ($objects['title']===$name_item AND $objects['urov_zat_or']==$urov_zat_or AND $objects['min_iznos']==$min_iznos AND $objects['iznos']==$max_iznos){
            if ($objects['urov_zat_or']>=0 AND $objects['urov_zat_or']<=6){

                  if (rand(1,10) % 2){
                              //Удача
                            mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              }else{
                              //Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              }
             }else{


            if ($objects['urov_zat_or']>6 AND $objects['urov_zat_or']<=10){

                      if (rand(1,10) % 2){
                              //Удача
                            mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              }else{//Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              }
             }else{


                     if ($objects['urov_zat_or']>10 AND $objects['urov_zat_or']<=15){

                  if (rand(1,10) % 2){
                              //Удача
                            mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1, max_zat_or=".$objects['max_zat_or']."+2 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."'  AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                            $msg = "Вы удачно заточили вещь на +1"; break;
                              }else{//Неудача
                              mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
                              $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; break;
                              }
             }else{ echo"ошибка в уровне заточки";}

             }
             }
        } else {
            echo "<font color=red>Вы ввели не правельные параметры</font>";
            }
                }

                    }
    }

 unset($objects);

echo"<font color=green>".$msg."</font>";
echo"<font color=red>".$error."</font>";
}else{
echo"
<FIELDSET style='WIDTH: 98.6%'><legend>Заточка оружия</legend>
<table width=100% cellspacing=0 cellpadding=5>
<form  action='zatochka_or.php' method='POST'>
<tr><td align='center'>[b]Введите название предмета: <input type=text size=25 value='' name='name_item' ><big>+</big><input type=text size=3 value='0' name='urov_zat_or'>- Текущий уровень заточки[/b]</td></tr>
<tr><td align='center'>[b]Износ вещи: <input type=text size=5 value='0' name='min_iznos' class=input >из<input type=text size=5 value='0' name='max_iznos' class=input>[/b]</td></tr>
<tr><td align='center'><input type=submit value='Заточить оружие' class=input name='zatochka'>
</td></tr>";

echo"
</table>
</FIELDSET>";
}
 
alexxz ВВот вроде как ты просил
Ну вот, другое дело. А дальше вопрос больше религиозный. Так как я не признаю костыля magic_quotes_gpc, то я только плохому научу.
Ну и мелочёвка
1) исправить отступы, чтобы код стал читаемым.
2) mysql_escape_string лучше заменить на mysql_real_escape_string

PS Если интересно, как я с БД работаю, могу описать.
 
если можеш обеснить почему лучше (mysql_escape_string лучше заменить на mysql_real_escape_string
) а то справочник мой видать старый не нашол.
и мне будет очень интересно как ты работаеш с БД так как в книшках невсе учтено зарание спасибо
 
если можеш обеснить почему лучше (mysql_escape_string лучше заменить на mysql_real_escape_string
) а то справочник мой видать старый не нашол.
и мне будет очень интересно как ты работаеш с БД так как в книшках невсе учтено зарание спасибо
В руководстве сказано, что mysql_escape_string является устаревшим вызовом и вместо него следует использовать mysql_real_escape_string. Никакой уличной магии.

А как я работаю с базой...
Во первых, если включен костыль magic_quotes, я его отменяю. Уже все разочаровались в этом УГ, но он регулярно встречается.
Этот код я располагаю где-нибудь в начале конфига, дабы точно всегда применялся.
Код:
if(get_magic_quotes_gpc()){
    foreach($_GET as $key => $value){
        $_GET[$key] = stripslashes($_GET[$key]);
    }
    foreach($_POST as $key => $value){
        $_POST[$key] = stripslashes($_POST[$key]);
    }
    foreach($_COOKIE as $key => $value){
        $_COOKIE[$key] = stripslashes($_COOKIE[$key]);
    }
}

Далее зависит как работать с базой (рассматриваю только MySQL). Для простоты возьмём native работу с БД. С PDO, odbc, mysqli работаю аналогично.
Для начала в общедостумное место скидываю функцию
Код:
    function mysql_quote($data){
        return "'".mysql_real_escape_string($data)."'";
    }
В PDO, odbc и т.д она называется просто quote. Что она делает, видно из текста. Ведь, в принципе очевидно, что если ты заэкранировал строку, то ты хочешь её вставить в SQL а в SQL она в 90% случаев должна вставляться в кавычках.

А теперь собственно работа.
Код:
function get_person_objects($person){
    $q_user = mysql_quote($person['user']); // целочисленные параметры тоже можно. приставка q_ указывает, что это переменная "заквочена"
    ($res = mysql_query($sql = "SELECT * FROM objects WHERE user = $q_user")) or die(mysql_error()); // строка не проста, но в ней очень много смысла
    $objects = array();
    while($row = mysql_fetch_assoc($res)){
        $objects[] = $row;
    }
    return $objects;
}

Тут на самом деле заключено много умных мыслей.
1) Любые данные прежде чем использовать в запросе надо заквотить. Заквоченные данные лежат в переменных $q_. Потому в запросах можно использовать только $q_ переменные
2) Непосредственно сам вызов mysql_query. Строка довольно запутанная, но до безобразия удобная. Во первых сразу идет проверка не ошибочен ли запрос. Во вторых всегда для отладки можно получить себе SQL запроса. В-третьих формат удобен и для UPDATE/DELETE/REPLACE запросов.
3) Фетчить строки желательно сразу в 99% случаев и дальше работать с ними как с массивом. Чтобы обосновать это, надо написать много строк про MVC, шаблонизаторы и кеширование, но мне лень. 1% это когда тебе надо в отладочных целях вывести > 5К строк, но такие задачи стоят очень редко.
4) Запросы к БД обычно собираю в библиотеки с функциями, как в последнем примере. Это очень удобно, когда придётся прикручивать кеширование, а также если потребуется изменить структуру БД. Таким образом стараюсь отвязать сами данные от формата их хранения.

Все примеры написаны вручную, потому могут содержать глупые ошибки.
 
В руководстве сказано, что mysql_escape_string является устаревшим вызовом и вместо него следует использовать mysql_real_escape_string. Никакой уличной магии.

Во первых, если включен костыль magic_quotes, я его отменяю. Уже все разочаровались в этом УГ, но он регулярно встречается.

Встречается потому что в литературе ничего про это не сказано =)

этот пример как раз взят с книги 2008 года головоломки на РНР 2-е издание
Код:
if (!get_magic_quotes_gpc()){
      $_POST['name_item']=mysql_escape_string($_POST['name_item']);
      $_POST['urov_zat_or']=mysql_escape_string($_POST['urov_zat_or']);
    $_POST['min_iznos']=mysql_escape_string($_POST['min_iznos']);
    $_POST['max_iznos']=mysql_escape_string($_POST['max_iznos']);
    }
 
Встречается потому что в литературе ничего про это не сказано =)

этот пример как раз взят с книги 2008 года головоломки на РНР 2-е издание
Код:
if (!get_magic_quotes_gpc()){
      $_POST['name_item']=mysql_escape_string($_POST['name_item']);
      $_POST['urov_zat_or']=mysql_escape_string($_POST['urov_zat_or']);
    $_POST['min_iznos']=mysql_escape_string($_POST['min_iznos']);
    $_POST['max_iznos']=mysql_escape_string($_POST['max_iznos']);
    }
В 2008 это уже считалось костылём. Вообще, проблема книг на русском языке в том, что они отстают на пару лет от реальной ситуации либо диллетантские. Если книга переводная, можно смело утверждать, что она была актуальной году в 2006. А если не переводная, вероятно, проблема в том, что 2-ое издание, которое просто не дорабатывали, а просто перевыпустили.

Это не значит, что надо выкинуть книгу. Как самоучитель по основам, она, наверняка, хороша. Но вот как руководство к действию её надо применять с опаской.
 
я уже перехал на PHP.su а книга называется (головоломки на РНР для хакера 2008 год аторы Максим Кузнецов и Игорь Симдянов) хорошо хоть первое издание не брал :)
 
:)
Ужас какой. Для начала надо в 5 раз сократить количество текста, и только потом можно смотреть, что с этим делать.

На сколько я разобрался, гигантские свичи можно сократить до

Код:
if(rand(1,10) % 2){
    //Удача
    mysql_query("UPDATE objects SET  urov_zat_or=".$objects['urov_zat_or']."+1, min_zat_or=".$objects['min_zat_or']."+1 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
    $msg = "Вы удачно заточили вещь на +1"; 
} else {
    //Неудача
    mysql_query("UPDATE objects SET  urov_zat_or=0, min_zat_or=0, iznos=".$max_iznos."-3, max_zat_or=0 WHERE user='".$stat['user']."' AND title='".$name_item."' AND urov_zat_or='".$urov_zat_or."' AND  min_iznos ='".$min_iznos."' AND iznos ='".$max_iznos."' AND id=".$objects['id']."");
    $error = "Вам не удалось заточить вещь! Вся заточка обнуляется и износ вещи уменьшелся на 3 ед."; 
}


Перепишите пожалуйста код с учётом этой рекомендации, тогда можно будет хоть понять что происходит.
а лучше всего вынести ето все в функцию которой бы передавалось rand и ну и все другое необходимое для обновлении предмета в базе! И тогда код сократиться примерно раз в пять :)
 
Сверху