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

Форум PHP

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

 

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

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

тема: Undefined variable: mn
 
 автор: Санька   (03.11.2007 в 18:38)   письмо автору
 
 

В онлайн игре после того как в форме пиши число и жму играть, появляется страница с четырьмя такими ошибками и написанно вы не ввели ставку, ошибка на 79, 79, 81, 81 строки,else и if($session['con']==0) помогите исправить ошибки. Кстати если убрать одно равно то ошибки изчезают но игра уже без ставок.

   
 
 автор: sim5   (03.11.2007 в 18:52)   письмо автору
 
   для: Санька   (03.11.2007 в 18:38)
 

Во-первых установите в php.ini register_globals = off, и обращайтесь к сессии как суперглобальному массиву $_SESSION['con']. Это же касается и $_GET и $_POST.
Во-вторых приведите сообщеия об ошибках.

   
 
 автор: bronenos   (03.11.2007 в 18:55)   письмо автору
 
   для: Санька   (03.11.2007 в 18:38)
 

$_SESSION

   
 
 автор: Санька   (03.11.2007 в 19:06)   письмо автору
 
   для: bronenos   (03.11.2007 в 18:55)
 

Название ошибок в название темы, я с wml переделывал в html в wml ведь все окей было. Пробывал я $_SESSION ставить еще больше ошибок 1,5 дня уже мучаюсь найти проблему в одном файле это офигеть можно, в первые такое. Мож файл скинуть? чувствую будет сложновато!

   
 
 автор: sim5   (03.11.2007 в 19:23)   письмо автору
 
   для: Санька   (03.11.2007 в 19:06)
 

Undefined variable: mn - Неопределена перемнная mn, к которой потом вы обращаетесь. То есть, если она у вас должна хранится в сессии, то она там не записана, либо пытаетесь записать несуществующую. $_SESSION и прочее - об этом читайте в темах касающихся безопасности.

   
 
 автор: Санька   (04.11.2007 в 01:05)   письмо автору
 
   для: sim5   (03.11.2007 в 19:23)
 

А причем тут безопасность, mn у меня есть. Я не чо и не делал только с wml на html переделал, а на wml все работало.

   
 
 автор: Ralph   (04.11.2007 в 03:31)   письмо автору
 
   для: Санька   (04.11.2007 в 01:05)
 

Я не чо и не делал только с wml на html переделал,-так ты определись,делал ли ты что то ли не делал.Например в wml могут применяться переменные,в html-нет,и уже из за этого могут быть проблемы,хотя не видя кода,угадать конечно...

   
 
 автор: sim5   (04.11.2007 в 06:30)   письмо автору
 
   для: Санька   (04.11.2007 в 01:05)
 

Если бы у вас все было, вы бы не получали Undefined... Приведите часть своего кода от и до, по ошибки включительно. Прочитайте о register_globals.

   
 
 автор: Санька   (04.11.2007 в 10:37)   письмо автору
 
   для: sim5   (04.11.2007 в 06:30)
 

Сейчас проверил игру в wml, на первый взгляд работает стабильно ввожу ставку выдаются деньги и игра идет, но стоит только просто обновить страницу как сразу же появляются точно такие же ошибки. Инет с компа под рукой будет скину часть скрипта (вечером).

   
 
 автор: Санька   (05.11.2007 в 10:05)   письмо автору
 
   для: Санька   (04.11.2007 в 10:37)
 

Вот скрипт, разчитываю на вашу помощь. Заранее благодарен!!!
<?php

ini_set
('session.use_cookies','0');
ini_set('session.use_trans_sid','0');
ini_set('url_rewriter.tags','');

session_name('stw');
include
"../../tems/start.php";

header("Cache-Control: no-cache");

if(!
session_is_registered("session"))
 {
    
$session['round']=0;
    
$session['money']=100;
    
$session['con']=0;
    
$session['histuser']="";

    
session_register("session");
 }

$ref=rand(100,99999);

$ses=SID;
$ses="$ses&amp;$ref";

function 
cards_score($str)
 {
   if(
$str==1||$str==2||$str==3||$str==4){$num 6;}
   if(
$str==5||$str==6||$str==7||$str==8){$num 7;}
   if(
$str==9||$str==10||$str==11||$str==12){$num 8;}
   if(
$str==13||$str==14||$str==15||$str==16){$num 9;}
   if(
$str==17||$str==18||$str==19||$str==20){$num 10;}
   if(
$str==21||$str==22||$str==23||$str==24){$num 2;}
   if(
$str==25||$str==26||$str==27||$str==28){$num 3;}
   if(
$str==29||$str==30||$str==31||$str==32){$num 4;}
   if(
$str==33||$str==34||$str==35||$str==36){$num 11;}

   return 
$num;
 }

if(
$session['round']==0)
 {
   
$max $session['money'];

   if(
$max==0)
   {
     
session_unregister("session");
     echo 
'У Вас на счету не осталось средств для продолжения текущей игры!<br/>
     <a href="index.php">начать новую игру</a><br/>
     или<br/><a href="../../index.php">выйти</a>'
;
     exit;
   }

   echo 
"У Вас $max\$\$<br/>";
   
$ru rand(1,36);
   if(
$session['histuser']!=="")$ru=trim(str_replace("|",""$session['histuser']));
   echo 
'<b>Ваши карты:</b><br/><img src="cards/'.$ru.'.gif" alt="" /><br/>';
   
$uscore=cards_score($ru);

   
$pstr "очков";
   if(
$uscore==2||$uscore==3||$uscore==4)$pstr "очка";
   echo 
''.$uscore.' '.$pstr.'<br/>';
   
$maxlen=strlen($max);

   echo 
'Ваша ставка(1-'.$max.'):<br/>
   <form action="index.php?'
.$ses.'" method="post">
   <input name="mn$ref" maxlength="'
.$maxlen.'" /><br/>
   <input type="submit" value="Играть">
   </form>
   <a href="faq.php?'
.$ses.'">Правила игры</a><br/>
   <a href="../../index.php">Выход</a><br/>'
;

   
$session['histuser']="|$ru";
   
$session['round']=1;

 }

else
 {
   if(
$session['con']==0)
   {
     if(
$mn>$session['money']||$mn===""||!isset($mn)||$mn<1)
     {
       if(
$mn===""||$mn<1){echo 'Вы не указали ставку!';}
       else {echo 
'На Вашем счету недостаточно средств для подобной ставки!';}
       include
"../../tems/end.php";
       
$session['round']=0;
       exit;
     }

     
$session['con']=round($mn);
     
$session['money']=$session['money']-$session['con'];

   }

   
$rate=$session['con']*2;
   
$histuser=split("\|",$session['histuser']);

   if(!isset(
$end))
   {
     do
     {
       
$randgen=1;
       
$ru rand(1,36);

       for(
$i=1;$i count($histuser);$i++)
       {
         if(
$ru==$histuser[$i])
         {
           
$randgen=0;
           break;
         }

       }

     }

     while(
$randgen==0);

     
$session['histuser']=$session['histuser']."|$ru";
     
$countus count($histuser);
     
$histuser[$countus] = $ru;
   }

   for(
$i=1;$i count($histuser);$i++)
   {
     
$ustemp=cards_score($histuser[$i]);
     @
$uscore=@$uscore+$ustemp;
   }

   
$udoublet=0;

   if((
count($histuser)==3)&&($uscore==22))
   {
     
$tone=0;
     
$ttwo=0;

     if(
$histuser[1]==33||$histuser[1]==34||$histuser[1]==35||$histuser[1]==36)$tone=1;
     if(
$histuser[2]==33||$histuser[2]==34||$histuser[2]==35||$histuser[2]==36)$ttwo=1;
     if(
$tone==1&&$ttwo==1)$udoublet=1;
   }

   if(
$uscore>21&&$udoublet==0)$close=1;
   if(
$udoublet==1||$uscore==21||$uscore==20)$end=1;

   
$max $session['money'];
   echo 
"У Вас $max\$\$<br/>\n";
   if(isset(
$close))
   echo 
'<b>перебор!</b><br/>';
   
$win=0;

   if(isset(
$end))
   {
     
$histbot[0]="";
     
$hist=$histuser;

     for(
$i=1;$i 10;$i++)
     {
       do
       {
            
$randgen=1;
         
$rb rand(1,36);

         for(
$i=1;$i count($hist);$i++)
         {

           if(
$rb==$hist[$i])
           {
             
$randgen=0;
             break;

           }

         }

       }

       while(
$randgen==0);

       
$histbot[]=$rb;
       
$hist[]=$rb;
       
$btemp=cards_score($rb);
       @
$bcore=@$bcore+$btemp;

       if(
$bcore==20)break;
       if(
$bcore==21)break;
       if(
$bcore==$uscore)break;
       if(
$bcore>$uscore)break;
       if(
$bcore>21)break;
     }

     echo 
'<b>Банкир открылся:</b><br/>';

     for(
$i=1;$i count($histbot);$i++)
     {
       echo 
"<img src=\"cards/$histbot[$i].gif\" alt=\"cards\"/>";
     }

     
$pstr "очков";

     if(
$bcore==2||$uscore==3||$bcore==4||$bcore==22||$bcore==23||$bcore==24)$pstr "очка";
     if(
$bcore==21)$pstr "<b>очко!!!</b>";

     echo 
'<br/>'.$bcore.' '.$pstr.'<br/>';
     
$bdoublet=0;

     if((
count($histbot)==3)&&($bcore==22))
     {
       
$tone=0;
       
$ttwo=0;

       if(
$histbot[1]==33||$histbot[1]==34||$histbot[1]==35||$histbot[1]==36)$tone=1;
       if(
$histbot[2]==33||$histbot[2]==34||$histbot[2]==35||$histbot[2]==36)$ttwo=1;
       if(
$tone==1&&$ttwo==1)$bdoublet=1;
     }

     if(
$bcore>21&&$bdoublet==0)$win=1;
     if(
$bcore<$uscore)$win=1;
     if(
$udoublet==1)$win=1;
     if(
$bdoublet==1)$win=0;
     if(
$uscore==21)$win=1;
     if(
$bcore==21)$win=0;

     
$close=1;
   }

   echo 
'<b>Ваши карты:</b><br/>';

   for(
$i=1;$i count($histuser);$i++){echo "<img src=\"cards/$histuser[$i].gif\" alt=\"cards\"/>";}
   
$pstr "очков";

   if(
$uscore==2||$uscore==3||$uscore==4||$uscore==22||$uscore==23||$uscore==24)$pstr "очка";
   if(
$uscore==21)$pstr "<b>очко!!!</b>";

   echo 
'<br/>'.$uscore.' '.$pstr.'<br/>';

   if(isset(
$close))
   {
     
$session['round']=0;
     
$session['histuser']="";

     if(
$win==0)
     {
       echo 
'<b>Вы проиграли</b><br/>';

       
$f=fopen("lost.dat","a+");
       
flock($f,LOCK_EX);
       
$data=file("lost.dat");
       @
$data[0]=trim($data[0])+1;
       @
$data[1]=trim($data[1])+$session['con'];

       
ftruncate($f,0);
       
fwrite($f,"$data[0]\n");
       
fwrite($f,"$data[1]\n");
       
flock($f,LOCK_UN);
       
fclose($f);

       
$session['con']=0;
     }

     else
     {
       echo 
'<b>Вы выиграли!</b><br/>';
       
$session['money']=$session['money']+$rate;
       
$f=fopen("win.dat","a+");
       
flock($f,LOCK_EX);

       
$data=file("win.dat");
       @
$data[0]=trim($data[0])+1;
       @
$data[1]=trim($data[1])+$session['con'];

       
ftruncate($f,0);
       
fwrite($f,"$data[0]\n");
       
fwrite($f,"$data[1]\n");
       
flock($f,LOCK_UN);
       
fclose($f);

       
$session['con']=0;
       echo 
"Ваш выигрыш $rate\$\$<br/>\n";
     }

     echo 
'<a href="index.php?'.$ses.'">сыграть ещё</a><br/>';
   }

   else {echo 
"на кону $rate\$\$<br/><a href=\"index.php?$ses\">ещё</a>&lt;или&gt;<a href=\"index.php?$ses&amp;end\">открыть</a><br/>\n";}
   echo 
'<a href="../../index.php">Выход</a>';
 }

include
"../../tems/end.php";

?>

   
 
 автор: bronenos   (05.11.2007 в 11:10)   письмо автору
 
   для: Санька   (05.11.2007 в 10:05)
 

    if($mn>$session['money']||$mn===""||!isset($mn)||$mn<1)
и где она определена?

P.S.
<?
function cards_score($str

  if (
$str>&& $str<21$num ceil($str 4) + 1;
  else if (
$str>20 && $str<33$num ceil($str 4) - 4;
  else if (
$str>32 && $str<37$num 11;
  return 
$num
}
?>

   
 
 автор: sim5   (05.11.2007 в 11:11)   письмо автору
 
   для: Санька   (05.11.2007 в 10:05)
 

Ну если опустить вопросы о начале, то до этого места:
if($mn>$session['money']||$mn===""||!isset($mn)||$mn<1)
ничего неизвестно об $mn. Почему тогда вы удивляетесь предупреждению?

   
 
 автор: Санька   (05.11.2007 в 11:48)   письмо автору
 
   для: sim5   (05.11.2007 в 11:11)
 

Для этого я и поднял тему, что значит не чего не известно и что она хочет? Файлы с деньгами (имеющиеся на руках персонажа и банкира имеются) и в скрипте задействованы, я так понимаю в mn через форму я ввожу ставку, а дальше проверка идет сколько я ввел денег и есть ли у меня столько на счету. Объясните глупенькому плиз, я совсем запарился. Я тему новую сейчас создам, кое как гружусь.

   
 
 автор: sim5   (05.11.2007 в 11:50)   письмо автору
 
   для: Санька   (05.11.2007 в 11:48)
 

А что тут объяснять, если до этого написать, например, $mn = 0;, то и передупреждения такого вы более не получите.

PS. Вернее, вы сравниваете переменную, которой факически не существует, поэтому, нужно проверять это, и если она не определена, а ее значение не установлено, то определить ее и установить значение по умолчанию:


<?
$mn 
= isset(От куда берем значание) ? От куда берем значание 0   

   
 
 автор: Санька   (05.11.2007 в 12:42)   письмо автору
 
   для: sim5   (05.11.2007 в 11:50)
 

sim5 я поставил переменную $mn=0 ошибки ушли, но при вводе ставки пишет вы не ввили число, я так понял на эту тему написал bronenos. bronenos я пробывал (пытался) сделать как вы подсказали, но ошибки валят и так и сяк я видать не так вас понял (только не подумайте что я даун :) тяжело просто включится в таком скрипте (большие скрипты это жесть для меня) многово не понимаю, но учусь и все записываю, мотаю на ус. Вам я понимаю легко кого все (или большентво знаете) не ругайте сильно :)

   
 
 автор: sim5   (05.11.2007 в 13:28)   письмо автору
 
   для: Санька   (05.11.2007 в 12:42)
 

Ну скорее это у вас было предупреждение, вывод которого на экран можно подавить. Но если бы вы в дальнейшем стали бы делить что-то на это неопределенное, вот тогда бы точно была ошибка.
Еще раз (последний) говорю - не надейтесь на register_globals = on. Не обращайтесь к переменным массива как у вас $session['histuser'], а обращайтесь как $_SESSION['histuser'] и др. И выключите register_globals. Ну и не понятно, если вы работаете с сессией, а где же вы ее стартуете?
А в остальном не понятно, от куда вы получаете переменную $mn (чему приравниваете)? Если так, как вам указал bronenos, то это имя а не значение. Да и зачем такое имя, ведь заведомо оно не известно будет. Может у поля имя mn, а его значение равно $ref? Тогда с учетом register_globals = on будет похоже, но повторяю - это не есть гут.

   
 
 автор: Санька   (05.11.2007 в 13:45)   письмо автору
 
   для: sim5   (05.11.2007 в 13:28)
 

Регистер глобал отключил off, все $session['histuser'] переделал в $_SESSION['histuser'] теперь карты не появляются гг у меня уже шарики на ролики ошибка еще выскачила неопределенная переменная num

   
 
 автор: sim5   (05.11.2007 в 13:53)   письмо автору
 
   для: Санька   (05.11.2007 в 13:45)
 

Успокойтесь, не раскатяться ваши шарики.) А все потому, что если вы раньше обращались к этой переменной как $num, то теперь должны как $_GET['num'], если она у вас передается методом GET, ну или $_POST['num'], если POST соответственно. И так все пременные надо переписать! Не паникуйте, лучше сразу убрать потенциальные проблемы, чем мучиться потом!

   
 
 автор: Санька   (05.11.2007 в 14:35)   письмо автору
 
   для: sim5   (05.11.2007 в 13:53)
 

Переписал все num так $_GET['num'] карты появились. Появились новые ошибки неопределенная переменная $uscore, а с ней что делать?

   
 
 автор: sim5   (05.11.2007 в 14:42)   письмо автору
 
   для: Санька   (05.11.2007 в 14:35)
 

Проверять! Думаю это из той же оперы $_GET['uscore']...

   
 
 автор: bronenos   (05.11.2007 в 14:56)   письмо автору
 
   для: sim5   (05.11.2007 в 14:42)
 

Эта переменная в форме отсутствует, видимо она из других мест

   
 
 автор: Санька   (05.11.2007 в 15:00)   письмо автору
 
   для: sim5   (05.11.2007 в 14:42)
 

Что то сдесь не ладное ставлю $_GET['uscore'] появляется ошибка на $ru, $ru переделываю появляется Undefined index: ru и все больше и больше ошибок мож откатить? У меня все работало без $_GET и $_SESSION

   
 
 автор: bronenos   (05.11.2007 в 15:01)   письмо автору
 
   для: Санька   (05.11.2007 в 15:00)
 

внимательно пересмотрите весь скрипт и поясните для себя, что из формы, а что из кода

   
 
 автор: Санька   (05.11.2007 в 15:07)   письмо автору
 
   для: bronenos   (05.11.2007 в 15:01)
 

Не совсем понял о чем вы, имеется в виду вместо GET в POST переписать?

   
 
 автор: bronenos   (05.11.2007 в 15:09)   письмо автору
 
   для: Санька   (05.11.2007 в 15:07)
 

=что из формы, а что в коде определено

   
 
 автор: Санька   (05.11.2007 в 15:18)   письмо автору
 
   для: bronenos   (05.11.2007 в 15:09)
 

В коде $uscore=cards_score($ru); я переписываю так $_GET['uscore']=cards_score($_GET['ru']);
bronenos я вас действительно не понимаю вы спрашиваете или просто говорите. Ставте хоть в конче точки или вопрос.

   
 
 автор: sim5   (05.11.2007 в 15:42)   письмо автору
 
   для: Санька   (05.11.2007 в 15:18)
 

Александр, не надо переписывать GET в POST. Зпомните следующее:
1. У вас есть, например, форма с методом передачи POST, в которой есть поле с именем pole. Также у вас есть ссылка с передачей переменной add.
2. При включенной register_globals вы могли обращаться к этому полю и переменной из ссылки так: $pole и $add.
3. При выключенной register_globals вы можете обращаться к этому полю и переменной из ссылки только так: $_POST["pole"] и $_GET["add"].

bronenos вам говорит - проверьте, от куда вы получаете ваши переменные, если они из форм или ссылок, то пропишите их соответственно. Если они у вас определяются в коде (может где-то раньше, в другом скрипте), то определите их, если получаете предупреждения или ошибки по ним.
Вы не задавайте сейчас лишних вопросов, а внимательно проверьте весь свой код, и желательно (очень) переписать его с учетом register_globals = off.

   
 
 автор: Санька   (05.11.2007 в 12:42)   письмо автору
 
   для: sim5   (05.11.2007 в 11:50)
 

Это полный скрипт только сессион старт в др. файле.

   
 
 автор: bronenos   (05.11.2007 в 11:51)   письмо автору
 
   для: Санька   (05.11.2007 в 11:48)
 

$ref=rand(100,99999);
...
<input name="mn$ref" maxlength="'.$maxlen.'" /><br/>

1. Не mn, а $_GET['mn']
2. Не $_GET['mn'], а $_GET['mn'.$ref]
Думаю, подсказка понятна

   
 
 автор: Санька   (05.11.2007 в 12:55)   письмо автору
 
   для: bronenos   (05.11.2007 в 11:51)
 

А ну так все правильно если mn=0 значит ставь не ставь число стаки не будет, а если напримет mn=1 одна монета на кону, а как же тогда самому ставку через форму ставить!

   
 
 автор: bronenos   (05.11.2007 в 13:15)   письмо автору
 
   для: Санька   (05.11.2007 в 12:55)
 

Я вас не понял, но зачем рандомное число делать?

   
 
 автор: Санька   (05.11.2007 в 13:28)   письмо автору
 
   для: bronenos   (05.11.2007 в 13:15)
 

По выше прочитайте, может что упустили. sim5 сказал что мол переменная не определена, поставил по умолчанию $mn=0; тьфу блин совсем запутался я :(( ,а с $_GET['mn'.$ref] я действительно не понял что куда.

   
 
 автор: sim5   (05.11.2007 в 13:31)   письмо автору
 
   для: Санька   (05.11.2007 в 13:28)
 

Ну концерт :)) Я написал выше, может быть так должно:
<input name="mn" value="'.$ref.'" maxlength="'.$maxlen.'" /><br/>

   
 
 автор: Санька   (05.11.2007 в 13:49)   письмо автору
 
   для: sim5   (05.11.2007 в 13:31)
 

Почитайте выше воще уссытесь, не, без водки или пыха это мертвое дело, я сам над собой упарываюсь :))

   
 
 автор: sim5   (05.11.2007 в 13:54)   письмо автору
 
   для: Санька   (05.11.2007 в 13:49)
 

Прочитал, и знаете ничего страшного не случилось, по крайней мере того что вы мне предрекали.

   
 
 автор: Санька   (05.11.2007 в 13:55)   письмо автору
 
   для: Санька   (05.11.2007 в 13:49)
 

Еу сделал! Вернул назад $session, убрал $mn=0; поставил <input name="mn" maxlength="'.$maxlen.'"/> все работает правильно и ошибок нет :)

   
 
 автор: Санька   (05.11.2007 в 13:55)   письмо автору
 
   для: Санька   (05.11.2007 в 13:49)
 

Почитал выше сообщение, щас по другом сделаю (поучусь).

   
Rambler's Top100
вверх

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