Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скрипт не работает на php 5

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
kypok
Отправлено: 08 Июля, 2011 - 07:54:13
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Нашел старый скрипт игры на php, но он не работает на php5

На php 5.3 ошибка "Deprecated: Function ereg() is deprecated in ..." Заменил ereg() на mb_ereg(). Ошибка пропала, но скрипт не работает.

На php 5.2 ошибки "Deprecated: Function ereg() is deprecated in ..." нет, но скрипт не работает.

Кто-то подскажет в чем дело?
Вот код:
PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head><title>"ПОЛЕ ЧУДЕС"</title></head>
  3. <body><div align = 'center'>
  4.  
  5.  
  6. <?PHP
  7. $let_num = 16;    // Количество возможных попыток (пусть будет пол-алфавита);
  8. $alphabet = array(
  9.   "А","Б","В","Г","Д","Е","Ж","З","И","Й","К","Л","М","Н","О","П",
  10.   "Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я");// наш массив-"алфавит";
  11.  
  12. $words = array("МАГИЯ","ЛАМПА","КАРТА","МОНИТОР","МУЗЫКА");// Массив возможных слов,
  13.                             // из которых случайным образом будет выбрано слово,
  14.                             // которое игрок будет угадывать;
  15.  
  16. if (!isset($word_number)){
  17.   $word_number = rand(1,count($words)) - 1;// Выбираем слово наугад;
  18.                          }
  19.  
  20. $word = $words[$word_number];// $word - короткий псевдоним для $words[$word_number];
  21.  
  22. echo"<H1>"; /* Начинаем выводить загаданное слово
  23. (вместо еще "неугаданных" букв - у нас будет знак подчеркивания "_"),
  24.  заодно проверяем, может оно уже отгадано; */
  25.  
  26. $finished = 1; // Предположим, что это так (т.е. угадано) установкой флага $finished.
  27.  
  28. for ($i=0; $i < strlen($word); $i++) {// Перебираем все буквы слова;
  29.  
  30.   if (ereg($word[$i], $letters)){ // Если $i-ю букву слова игрок уже "назвал" и она есть в загаданном слове,
  31.     echo $word[$i];               // то выводим, ее на экран. (Тут $letters - множество "названных" букв);
  32.                                 }
  33.   else {
  34.     echo "_";                    // В противном случае выводим знак подчеркивания "_".
  35.     $finished = 0;               // Заодно отмечаем, что слово еще не отгадано.
  36.        }
  37. }
  38. echo"</H1>";
  39.  
  40. if ($finished){                  // Если слово угадано, то появляется сообщение:
  41.   echo "<BR><BR><I>ПОЗДРАВЛЯЕМ! ВЫ ВЫИГРАЛИ!</I><BR><BR>";
  42.  
  43.   echo "<A HREF=$PHP_SELF><IMG SRC=\"./play_again.jpg\"></A>";  /* Предлагаем игроку сыграть еще раз,
  44.   нажав на кнопку с надписью "Сыграем еще?" ("кнопка" есть не что иное как картинка "play_again.jpg" в
  45.   одном каталоге с нашем файлом pole_chudes.php). */
  46.                }
  47.  
  48.  
  49. else {        // Иначе (т.е. если слово еще не угадано), действуем так:
  50.  
  51.   $wrong = 0; // переменная $wrong у нас отвечает за количество неудачных попыток, т.е.
  52.               // уже "названных" неправильных букв.
  53.  
  54.   foreach ($alphabet as $var) {  // Перебираем все буквы алфавита (массив $alphabet),
  55.                                  // при этом текущая буква помещается в переменную $var.
  56.  
  57.     if (ereg($var, $letters)) {  // Если $var уже "назвывали"
  58.  
  59.       if (ereg($var, $word))  {  // и если $var принадлежит слову $word,
  60.         $links .= "$var";        // то, сделаем ее "посещенной";
  61.                               }
  62.       else {                     // в противном случае
  63.         $links .= "$var";        // также сделаем ее "посещенной"
  64.         $wrong++;                // и учтем эту попытку при подсчете
  65.            }                     // количества неудачных попыток.
  66.                               }
  67.  
  68.  
  69.     else {
  70.       $links .= "<A HREF=\"$PHP_SELF?letters=$letters$var&word_number=$word_number&last=$var\">$var</A> ";
  71.              }
  72.   }
  73.  
  74.  
  75.   if ($wrong == $let_num) { // Если игрок превысил лимит попыток (т.е проиграл :( ),
  76.                             // так ему об этом и скажем:
  77.  
  78.     echo "<BR>НА ЭТОТ РАЗ ВАМ НЕ ПОВЕЗЛО!<BR><BR>";
  79.     echo "СЛОВО, КОТОРОЕ ВЫ ТАК И НЕ УГАДАЛИ: \"$word\"<BR><BR>";
  80.         echo "<A HREF=$PHP_SELF><IMG SRC=\"./play_again.jpg\"></A> "; // Опять предложим сыграть,
  81.                                                                   // для реванша, так сказать.
  82.                           }
  83.   else {
  84.     if (isset($last)){ // Если переменная $last уже была инициализирована,то :
  85.                            // необходимо проверить, является ли она правильной. Т.е если переменная $last
  86.                            // присутствует в строке $word - нашем загаданном слове.
  87.  
  88.       if (ereg($last,$word)){                     // Если да (т.е. буква названа правильно),
  89.          echo "<BR><IMG SRC=\"./all_right.jpg\"><BR>"; // то появиться картинка с надписью
  90.                                                   // "Угадал!";
  91.                             }
  92.       else {
  93.         echo "<BR><IMG SRC=\"./try_again.jpg\"><BR>";  // если нет, то так и скажем "А вот и не угадал".
  94.            }
  95.                      }
  96.     echo "<BR><BR>";
  97.     echo "ОСТАЛОСЬ ПОПЫТОК = ".($let_num-$wrong)."<BR>"; // без комментариев;
  98.     echo "<BR>ПОЖАЛУЙСТА ВЫБЕРИТЕ БУКВУ:<BR><BR>";
  99.     echo $links;
  100.        }
  101.      }
  102. ?>
  103. </div>
  104.  
  105. </body>
  106. </html>
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июля, 2011 - 08:07:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




kypok пишет:
не работает
Скрипт написан в стиле "шинель заправленная в трусы".
 
 Top
kypok
Отправлено: 08 Июля, 2011 - 08:12:55
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




DeepVarvar, я разве спросил "как написан код?".
Вам есть что сказать по делу?
 
 Top
White
Отправлено: 08 Июля, 2011 - 08:15:38
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




kypok пишет:
ereg($word[$i], $letters)

а $letters откуда взялась? Если это вводимая буква, то где ее получение?


-----
if(time()>1356048000) die();
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июля, 2011 - 08:20:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




kypok пишет:
Вам есть что сказать по делу?
Я сказал по делу. Жаль что вы не поняли.
Объясню другими словами:
Как можно варьировать данными которые еще не были объявлены?
Где хоть одно место с $_GET... ???
Каким образом сохраняется состояние скрипта (куки/сессии/файл)?
Все перепутано - как шинель с трусами.
 
 Top
kypok
Отправлено: 08 Июля, 2011 - 08:31:02
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




$_GET параметры передаются в строке 70.

Этот код точно работает на php4.
Нужно чтобы заработал на php5.

DeepVarvar, White, есть мысли?
 
 Top
White
Отправлено: 08 Июля, 2011 - 08:35:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




kypok пишет:
$_GET параметры передаются в строке 70.


а получаются?


-----
if(time()>1356048000) die();
 
 Top
Мелкий Супермодератор
Отправлено: 08 Июля, 2011 - 08:56:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




kypok пишет:
$_GET параметры передаются в строке 70.

Там только ссылка. Где они получаются, спрашивается?

kypok пишет:
Нужно чтобы заработал на php5.

Переписывайте нормально.
http://php.su/security/?globals
http://php.su/php/?migration53

А хотите увидеть ошибки: error_reporting(E_ALL); Их там будет куча.

(Отредактировано автором: 08 Июля, 2011 - 08:57:58)



-----
PostgreSQL DBA
 
 Top
kypok
Отправлено: 08 Июля, 2011 - 09:18:01
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Спасибо, Мелкий.
Все дело оказалось в register_globals.

Для теста добавил файл .htaccess а в него строку php_flag register_globals On.
White, теперь стали передаваться переменные letters и word_number.
DeepVarvar, переменная var так и не передается.

Еще что-нибудь подскажите?
 
 Top
Саныч Модератор
Отправлено: 08 Июля, 2011 - 10:18:56
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




kypok пишет:
переменная var так и не передается
она и не должна передаваться, смотрите на строку 54.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
kypok
Отправлено: 08 Июля, 2011 - 10:25:58
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Кто-то может подсказать как запустить этот скрипт на php 5.3?
 
 Top
Саныч Модератор
Отправлено: 08 Июля, 2011 - 10:32:04
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




kypok пишет:
Кто-то может подсказать как запустить этот скрипт на php 5.3?
вам уже сколько всего подсказали, а вы так ничего и не поняли...


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
kypok
Отправлено: 08 Июля, 2011 - 10:36:03
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Саныч, если бы мне эти подсказки помогли, больше вопросов не задавал бы, а выложил готовое решение.
 
 Top
White
Отправлено: 08 Июля, 2011 - 11:10:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




kypok пишет:
Саныч, если бы мне эти подсказки помогли, больше вопросов не задавал бы, а выложил готовое решение.


Может вы их просто не услышали?


-----
if(time()>1356048000) die();
 
 Top
kypok
Отправлено: 08 Июля, 2011 - 11:29:09
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




На этом форуме я обратился за помощью.
Я не просил за меня написать бесплатно код по моему ТЗ.

Дали подсказки - я выразил свою благодарность. Старался как мог, но к сожалению, подсказки мне не помогли.

Если особо одарённые не могут помочь решить мою проблему, не стоит заниматься словоблудием. Это не делает вас умнее.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB