1 Востаннє редагувалося Faraon (15.08.2013 23:59:26)

Тема: Не правильно відображається php код який виводиться з бази!

Привіт всім!
У мене виникла така проблема...
база => games => legion => users => поле "code"
Файл mapa.php

$quer= "SELECT * FROM location WHERE id=$loc_user";   
$sql = mysql_query($quer);   
$row = mysql_fetch_array($sql);   

echo $row['code']; 

  <a href="mapa.php?loc=3&pers=1">Миссис Вандервуд</a>

а тепер я записую в базу, php код в строку "code"


<?php
$pers = $_GET['pers']; 
if (isset($_GET['pers'])) {


if ($pers == "1" ) 
  { 
    echo "Привіт! Перейдіть на сторінку 2 щоб закінчити квест!<br>";
   echo "<a href='mapa.php?loc=3&pers=2'>Сторінка 2</a>";
  } 

if ($pers == "2" ) 
  {
       echo "Квест виполнено! Ви можете забрати нагороду<br>";
    echo "<a href='mapa.php?loc=3&pers=4'>Забрать нагороду!</a>" ; 
  } 

if ($pers == "4" ) 
  {
    echo     "Удачи.<br>";
    echo "<a href='mapa.php?loc=3'>Конец диалога</a>";
  }

}
?>

і ось що має вийти....
коли ми нажимаємо на

  <a href="mapa.php?loc=3&pers=1">Миссис Вандервуд</a>

має працювати ось цей уровок коду

if ($pers == "1" ) 
  { 
    echo "Привіт! Перейдіть на сторінку 2 щоб закінчити квест!<br>";
   echo "<a href='mapa.php?loc=3&pers=2'>Сторінка 2</a>";
  } 

Але виникла проблема!
Коли я записав php код в строку code в базу, мені зразу на екран виводи ось що

"; echo "Сторінка 2"; } if ($pers == "2" ) { echo "Квест виполнено! Ви можете забрати нагороду
"; echo "Забрать нагороду!" ; } if ($pers == "4" ) { echo     "Удачи.
"; echo "Конец диалога"; } } ?>

чому???
і коли я натискаю на силку   <a href="mapa.php?loc=3&pers=1">Миссис Вандервуд</a>
нічого не відбувається! Нічого не відбувається  напевне тому що php код не правельно виводиться з бази на файл mapa.php!
Як правельно вивисти код php з бази на файл mapa.php ?

2

Re: Не правильно відображається php код який виводиться з бази!

Не на файл а в файл. Про switch пошукайте інформацію в Інтернеті.

а тепер я записую в базу, php код в строку "code"

Цілком можливо, що ви щось робите через ж№"№.

Спробуйте пояснити ще раз.

Подякували: miroslav.chandler, koala2

3

Re: Не правильно відображається php код який виводиться з бази!

Пробачте, спробую пояснити ще раз!
Я роблю в браузерній ігрі перший тестовий квест.
база:

DROP TABLE IF EXISTS `location`;
CREATE TABLE `location` (
  `id` int(11) NOT NULL AUTO_INCREMENT, // ид локации
  `name` varchar(100) CHARACTER SET cp1251 NOT NULL, // название локации
  `opes` varchar(1000) NOT NULL, // описание локации
  `img` varchar(200) NOT NULL,  // картинка локации
  `code` varchar(500) NOT NULL,  // тут будет php код
  `url` varchar(600) NOT NULL, // переход между локациями
  `url2` varchar(100) NOT NULL, // переход между локациями
  `url3` varchar(100) NOT NULL, // переход между локациями
  `persona` varchar(300) NOT NULL, // персонаж которий находитса на локации
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

в файл mapa.php я виводжу з таблиці поля

$quer= "SELECT * FROM location WHERE id=$loc_user";   
$sql = mysql_query($quer);   
$row = mysql_fetch_array($sql);    
echo $row['name'];  
echo $row['img'];  
echo $row['opes'];   
echo $row['code'];  
echo $row['url'];  
echo $row['url2'];  
echo $row['url3'];  
echo $row['persona']; 

Тепер потрібно додати в файл mapa.php силку, якщо на неї нажати то почнеться діалог з персонажем, тобто почнеть квест!

<a href="mapa.php?loc=3&pers=1">Миссис Вандервуд</a>

і додаємо в файл mapa.php php код для квеста

<?php
$pers = $_GET['pers']; 
if (isset($_GET['pers'])) {
 
 
if ($pers == "1" ) 
  { 
    echo "Привіт! Перейдіть на сторінку 2 щоб закінчити квест!<br>";
   echo "<a href='mapa.php?loc=3&pers=2'>Сторінка 2</a>";
  } 
 
if ($pers == "2" ) 
  {
       echo "Квест виполнено! Ви можете забрати нагороду<br>";
    echo "<a href='mapa.php?loc=3&pers=4'>Забрать нагороду!</a>" ; 
  } 
 
if ($pers == "4" ) 
  {
    echo     "Удачи.<br>";
    echo "<a href='mapa.php?loc=3'>Конец диалога</a>";
  }
 
}
?>

Все, квест зроблений! Все працює!!!
Але я хочу щоб php код квеста, а в нас це

<?php
$pers = $_GET['pers']; 
if (isset($_GET['pers'])) {
 
 
if ($pers == "1" ) 
  { 
    echo "Привіт! Перейдіть на сторінку 2 щоб закінчити квест!<br>";
   echo "<a href='mapa.php?loc=3&pers=2'>Сторінка 2</a>";
  } 
 
if ($pers == "2" ) 
  {
       echo "Квест виполнено! Ви можете забрати нагороду<br>";
    echo "<a href='mapa.php?loc=3&pers=4'>Забрать нагороду!</a>" ; 
  } 
 
if ($pers == "4" ) 
  {
    echo     "Удачи.<br>";
    echo "<a href='mapa.php?loc=3'>Конец диалога</a>";
  }
 
}
?>

знаходився не в файлі mapa.php а в базі даних, в таблиці "location" в стовпці "code"!!!
Але якщо я впишу в базу код квеста то він не правельтно виводиться в файл, і через це квест не працює!
І на сторінку виводить наступне

"; echo "Сторінка 2"; } if ($pers == "2" ) { echo "Квест виполнено! Ви можете забрати нагороду
"; echo "Забрать нагороду!" ; } if ($pers == "4" ) { echo     "Удачи.
"; echo "Конец диалога"; } } ?>

- це уривки з коду для квеста

4 Востаннє редагувалося koala (09.08.2013 23:28:34)

Re: Не правильно відображається php код який виводиться з бази!

1. Не пишіть виконуваний код в базу. Ніколи.
2. Якщо вже так хочете - то не виводьте його, а виконуйте eval(...). Але, ще раз, спершу виконайте п.1.

Подякували: Faraon1

5 Востаннє редагувалося Faraon (10.08.2013 01:58:28)

Re: Не правильно відображається php код який виводиться з бази!

eval() - це напевне якраз те що мені потрібно!!
Я прочитав що eval() - исполняет строку, переданную в параметре code_str, как код PHP. Помимо прочего, это может быть полезно при хранении кода в текстовом поле базы данных для его вызова по необходимости.
Але як мені її використовувати я не зрозумів!!!
Я зробив ось що:

$code = $row['code']; // тепер $code відповідає за поле в базі даних code
eval ("\$code = \"$code\";");
echo $code;  

і мені пише зверху помилка
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\localhost\games\include\mapa.php(111) : eval()'d code on line 2
І ще + видає на екран той самий уривок коду

"; echo "Сторінка 2"; } if ($pers == "2" ) { echo "Квест виполнено! Ви можете забрати нагороду
"; echo "Забрать нагороду!" ; } if ($pers == "4" ) { echo     "Удачи.
"; echo "Конец диалога"; } } ?>

6

Re: Не правильно відображається php код який виводиться з бази!

Faraon написав:

Я зробив ось що:

$code = $row['code']; // тепер $code відповідає за поле в базі даних code

Не відповідає, а містить копію поля. Різницю розумієте?

Faraon написав:
eval ("\$code = \"$code\";");

Можете нормальною мовою сказати, чого ви хочете досягти цим рядком?

$code="$code"

- що цей рядок має робити, на вашу думку?

7

Re: Не правильно відображається php код який виводиться з бази!

Можете нормальною мовою сказати, чого ви хочете досягти цим рядком?
$code="$code"
- що цей рядок має робити, на вашу думку?

eval - має розпізнати все що є в зміні $code як php код!

8

Re: Не правильно відображається php код який виводиться з бази!

У вашому випадку буде:

$code = $code;

eval - має розпізнати все що є в зміні $code як php код!

А це вже так:

eval($code);
Подякували: Faraon1

9 Востаннє редагувалося Faraon (10.08.2013 11:13:57)

Re: Не правильно відображається php код який виводиться з бази!

Зрозуміло! Але все одно не працює!
Помилка -
Parse error: syntax error, unexpected '<' in Z:\home\localhost\games\include\mapa.php(129) : eval()'d code on line 1
і код:

"; echo "Сторінка 2"; } if ($pers == "2" ) { echo "Квест виполнено! Ви можете забрати нагороду
"; echo "Забрать нагороду!" ; } if ($pers == "4" ) { echo     "Удачи.
"; echo "Конец диалога"; } } ?>

Ось весь код файлу mapa.php

<html>
<head>
<title><<<Игровой мир>>></title>
<style type="text/css" >

html {
background-image: url(../images/bg.png);
background-attachment: fixed;
color: Gainsboro ;
}


/*робота з силками*/
          #code
     {
    position: absolute;
    bottom: 200px;
    left: 50%;
    color: Gainsboro;
    }
     
     #dialg {
          position: relative;
        left: 5px;     
     }
     
     
    a {
    text-decoration:none;
    }
    
    a:link {
    color: #CD853F;
    text-decoration:none;
    }

    a:visited {
    color: #CD853F;
    text-decoration:none;
    }

    a:active {
    background-color: yellow;
    text-decoration:none;
    }

    a:hover {
    color:Gainsboro;
    text-decoration:none;
    }
    /*кінець*/
</style>

</head>
<body>

<?php  
session_start();  

if (!empty($_SESSION['login'])){}else{header("Location: ../index.php");} //Смотрим логин в сесии, если нет выкидываем   
$name = $_SESSION['login']; //Заносим логин в переменную   

include_once ("cone.php");   
mysql_query("SET NAMES 'cp1251' COLLATE 'cp1251_general_ci'");   

$_GET['NickName'] = $_SESSION['login'];  
$aNickName = $_GET['NickName'];  

$query = "SELECT * FROM users WHERE login='$aNickName'";  
$result = mysql_query($query) or die("Query failed : " . mysql_error());  
$aRow = mysql_fetch_array( $result);  
$id_user = $aRow["id"]; // виносимо id игрока  
$loc_user = $aRow["location"]; 

if(isset($_GET[loc])){ 
$loc_user = $_GET[loc]; 
$query = "UPDATE users SET location=$loc_user WHERE id_user=$id_user";     
mysql_query($query);   
}  
// Востановляем здоровя
if (!empty($_GET['setstat']))
  {
    if ($aHP <= 99){
       $aWhatStat =  $_GET['setstat'];    
       switch ($aWhatStat){
 case "HP":
echo "<div id=code><table border=2 bgcolor=#7C0909><tr><td>Вы излечены!!!</td></tr></table></div>";
         {  $aHP=100; 
            $query = "UPDATE users SET HP=$aHP WHERE login='$aNickName'";
            break;
         }
       }
       $result = mysql_query($query) or die("Query failed : " . mysql_error());

    }
  }

if(isset($_GET['goohp']))
{
echo "<div id=code><table border=2 bgcolor=#7C0909><tr><td>Вы хотите вылечиться?</td></tr><tr><td><br><center>".'<a href="mapa.php?loc=6&NickName='.$aNickName.'&setstat=HP">Да</a> | <a href="mapa.php?loc=6">Нет</a></center></td></tr></table></div>';
                  }


// Тут починаємо писати функціонад для переходу між локаціями  
$quer= "SELECT * FROM location WHERE id=$loc_user";   
$sql = mysql_query($quer);   
$row = mysql_fetch_array($sql);   
$id_loc = $row['id'];// виносимо id 1 локации  
$code = $row['code'];
echo "<center>".$row['name'];  
echo $row['img'];  
echo "<br>".$row['opes']."</center>";  
echo "<div id=code>";  
eval ($code);
echo $code;  
echo "</div>";  
echo "<div id=dialg><br><br><i>Персонажи:</i> ";  
echo $row['persona'];  
echo $row['persona2'];  
echo $row['persona3'];  
echo $row['persona4'];
echo $row['persona5']."<br><br>";
echo "<i>Переходы:</i> ".$row['url'];  
echo $row['url2'];  
echo $row['url3'];  
echo $row['url4'];  
echo $row['url5'];  
echo $row['url6'];  
echo $row['url7']."</div>";  

?>  
<a href="mapa.php?loc=3&pers=1">Миссис Вандервуд</a>
</body>
</html>
</html>

і код який записується в базу:

<?php
$pers = $_GET['pers']; 
if (isset($_GET['pers'])) {


if ($pers == "1" ) 
  { 
    echo "Привіт! Перейдіть на сторінку 2 щоб закінчити квест!<br>";
   echo "<a href='mapa.php?loc=3&pers=2'>Сторінка 2</a>";
  } 

if ($pers == "2" ) 
  {
       echo "Квест виполнено! Ви можете забрати нагороду<br>";
    echo "<a href='mapa.php?loc=3&pers=4'>Забрать нагороду!</a>" ; 
  } 

if ($pers == "4" ) 
  {
    echo     "Удачи.<br>";
    echo "<a href='mapa.php?loc=3'>Конец диалога</a>";
  }

}
?>

10 Востаннє редагувалося Invader (10.08.2013 12:16:42)

Re: Не правильно відображається php код який виводиться з бази!

А так працює:

$pers = "2";
$e = <<<PHP
echo "Сторінка 2"; if ($pers == "2" ) { echo "Квест виполнено! Ви можете забрати нагороду";
echo "Забрать нагороду!" ; } if ($pers == "4" ) { echo "Удачи.";
echo "Конец диалога"; }
PHP;
eval($e);

І в документації написано, що

Код не должен быть обрамлен открывающимся и закрывающимся тегами PHP, т.е. строка должна быть, например, такой 'echo "Привет!";', но не такой '<? echo "Привет!"; >'. Возможно переключатся между режимами PHP и HTML кода, например 'echo "Код PHP!"; ?>Код HTML<? echo "Снова код PHP!";'.

Передаваемый код должен быть верный исполняемым кодом PHP. Это значит, что операторы должны быть разделены точкой с запятой (;). При исполнении строки 'echo "Привет!"' будет сгенерирована ошибка, а строка 'echo "Привет!";' будет успешно выполнена.

Та і взагалі, функція eval скаже вам, що там зайва фігурна дужка. Та й неправильно ви все робите. Почитайте про AJAX, наприклад.

11

Re: Не правильно відображається php код який виводиться з бази!

Де саме зайва фігурна дужка ?

12 Востаннє редагувалося Invader (10.08.2013 12:30:54)

Re: Не правильно відображається php код який виводиться з бази!

    "; echo "Сторінка 2"; } if ($pers == "2" ) { echo "Квест виполнено! Ви можете забрати нагороду
    "; echo "Забрать нагороду!" ; } if ($pers == "4" ) { echo "Удачи.
    "; echo "Конец диалога"; } /* } отут*/ ?>

Я ж дмаю зрозуміло, що якщо цей код об’єднується ще з якимоь, то вона може виявитися не зайвою.

13

Re: Не правильно відображається php код який виводиться з бази!

але ж "}" вона закриває if (isset($_GET['pers'])) { !!!
Хіба ні?
А як правельно записати те що я намагаюся зробити!?
я забрав

<?php
?>

все одно не працює!

$pers = $_GET['pers']; if (isset($_GET['pers'])) { if ($pers == "1" ) { echo "Привіт! Перейдіть на сторінку 2 щоб закінчити квест!
"; echo "Сторінка 2"; } if ($pers == "2" ) { echo "Квест виполнено! Ви можете забрати нагороду
"; echo "Забрать нагороду!" ; } if ($pers == "4" ) { echo     "Удачи.
"; echo "Конец диалога"; } 

14

Re: Не правильно відображається php код який виводиться з бази!

Все!!! Допомога не потрібна! Прошу вибачення через те що надоїдав Вам!  Я покидаю Вас, по сімейних обставинах!

15

Re: Не правильно відображається php код який виводиться з бази!

Все!!! Допомога не потрібна! Прошу вибачення через те що надоїдав Вам!  Я покидаю Вас, по сімейних обставинах!

Назавжди? :)

Подякували: koala, miroslav.chandler, Chemist-i3

16

Re: Не правильно відображається php код який виводиться з бази!

Replace написав:

Назавжди? :)

Незнаю! Наступні місяці 2-3 для мене будуть адскими, а там буде видно! Можливо що так!

17

Re: Не правильно відображається php код який виводиться з бази!

Invader ви не праві! помилка не в цьому!
Проблему вирішив! Ось в чому була проболема:
я писав ось так

 
eval ($code); 
echo $code; 


а потрібно було ось так:

echo eval ($code);

18

Re: Не правильно відображається php код який виводиться з бази!

Може виправите назву теми?
Правильно - від правило.

P.S. Не думали, якись spell-checker поставити?

Подякували: Faraon1

19 Востаннє редагувалося Faraon (16.08.2013 00:06:20)

Re: Не правильно відображається php код який виводиться з бази!

P.S. Не думали, якись spell-checker поставити?

м... не думав! Щойно я його скачав і установив, різниці немає!
Може ще щось потрібно зробити?

20

Re: Не правильно відображається php код який виводиться з бази!

Spell-checker має перевіряти правопис. Мається на увазі встановити його в броузер. Якщо ви користуєтесь Mozill-ою Firefox, то він встановлений типово для тієї мови, якою у вас локалізований броузер. Якщо ви бажаєте мати додаткові словники, то треба натиснути правою клавішею миші в будь-якому текст боксі і обрати пункт Мови -> Додати словники... Також можете натиснути правою клавішею миші в текст боксі і перевірити чи стоїть пташка поруч із пунктом Перевірка правопису.