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

Форум PHP

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

 

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

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

тема: Parse Error - что это за зверь?
 
 автор: Jurik   (19.01.2005 в 19:11)
 
 

Добрый день, опыт в PHP небольшой, только начинаю. Работаю в стандарной связке PHP+MySQL, по учебнику. Разбирал пример подклчения к базые данных, чтения из нее информмации и т.д. и т.п.
И вот впервые столкнулся с такой строчкой :

PHP Parse error: syntax error, unexpected $end in c:\Inetpub\wwwroot\MySQL\ShowSegment.php on line 86


Вроде как не хватает ему переменной $end, хотя такой и в помине нет, а в этой строке у меня тег </html> - конец всего файла.

Проверил три раза - с учебником все совпадает. Помогите, а? Заранее благодарю.

   
 
 автор: elenaki   (19.01.2005 в 20:46)   письмо автору
 
   для: Jurik   (19.01.2005 в 19:11)
 

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

если РНР указывает, что ошибка в последней строке скрипта, то, скорее всего, где-то не закрыт цикл, нет фигурной скобки. или кавычка. лучше, конечно, весь текст скрипта посмотреть.

   
 
 автор: Jurik   (19.01.2005 в 21:10)
 
   для: elenaki   (19.01.2005 в 20:46)
 

Может, у меня уже глаза зашились ошибку искать? Все скобки вроде на месте. Мистика...


<html>
<head>
  <title>Show Segment</title>
<style type ="text/css">
body {
        color:red
        }
td {
        color: white;
        backgroung-color:blue;
        width: 20%;
        height: 3em;
        font-size: 20pt
        }

</style>
</head>

<body>

<?
if (empty($room))
 {
 
$room=1;
 }
$conn=mysql_connect("localhost""root""123");
$select=mysql_select_db ("game"$conn);
$sql="SELECT * FROM adventure WHERE id='$room'";
$result=mysql_query($sql);
$mainRow mysql_fetch_assoc ($result);

$theText $mainRow ["description"];
$northButton buildButton ("north");
$eastButton buildButton ("east");
$westButton buildButton ("west");
$southButton buildButton ("south");
$roomName $mainRow ["name"];

print <<<HERE
<center><h1>$roomName</h1></center>
<form method = "post">
<table border =1>
<tr>
    <td></td>
    <td>
$northButton</td>
    <td></td>
</tr>

<tr>
 <td>
$eastButton</td>
 <td>
$theText</td>
 <td>
$westButton</td>
</tr>

<tr>
 <td></td>
 <td>
$sounthButton</td>
 <td></td>
</tr>

</table>
<center>
<input type = "submit"
       value = "go">
</center>
</form>
HERE;

function 
buildButton ($dir)
  {
    global 
$mainRow$conn;
    
$newID $mainRow[$dir];
    
$query "SELECT name FROM adventure WHERE id = $newID";
    
$result mysql_query ($query$conn);
    
$row=mysql_fetch_assoc ($result);
    
$roomName $row ["name"];
    
$buttonText = <<< HERE
    <input type = "radio"
           name = "room"
           value = "
$newID">$roomName
    HERE;
    return 
$buttonText;
  }
?>
</body>
</html>


   
 
 автор: elenaki   (19.01.2005 в 21:23)   письмо автору
 
   для: Jurik   (19.01.2005 в 21:10)
 

что за конструкция
print <<<HERE 
.
.
.
HERE; 


на ней и выдается ошибка. если бы у вас был редактор с подсветкой кода, сразу бы увидели...

   
 
 автор: Jurik   (19.01.2005 в 21:30)
 
   для: elenaki   (19.01.2005 в 21:23)
 

А что за редактор с подсветкой кода?
А эта конструкция - создание и вывод многострочного текста. Взято из учебника "PHP / MySQL для начинающих." Автор - Энди Харрис.
Может есть возможность заменить этот участок кода?
Признаюсь, я сам толком еще не понял, что это за код и для чего он - я пишу программу по учебнику, а потом разбираю её. В данном случае нерабочую прогу не могу разобрать.

   
 
 автор: glsv (Дизайнер)   (19.01.2005 в 22:08)   письмо автору
 
   для: Jurik   (19.01.2005 в 21:30)
 

Лучше перепишите это следующим образом.

$buttonText = '<input type = "radio" 
           name = "room" 
           value = "'.$newID.'">'.$roomName;


Раз уж эта конструкция так хитро работает, то может ее и не использовать?

Применяйте двойные кавычки для обрамления одинарных
$var = "Здесь был 'Вася' - УРА";

И одинарные для обрамления двойных.
$var = 'Здесь был "Вася" - УРА';


А для включения переменных в текст используйте символ точки:
$var = 5;
$txt = "Меня зовут Вася - мне ".$var." лет";


Это выведет строку
Меня зовут Вася - мне 5 лет

   
 
 автор: Jurik   (19.01.2005 в 21:46)   письмо автору
 
   для: elenaki   (19.01.2005 в 21:23)
 

По научному эта штука называется механизмом цитирования. Применяется для вывода многострочного текста. Но вот кк работает, не пойму.

   
 
 автор: Jurik   (19.01.2005 в 22:04)   письмо автору
 
   для: elenaki   (19.01.2005 в 21:23)
 

Кое что нарыл, но пока далек от истины.
Итак, проверил эту странную конструкцию. Работает. Вот код:

<html>
<head>
<title></title>
</head>
<body>
<?php
$var
=5;
  print <<<HERE
  <center> This is just example </center><br>
  of using this strange construction<br>
  <center><h2>But, it works!</h2></center>
  <center>Here is a variable \$var ,
  and its value is 
$var </center>
HERE;
?>
</body>
</html>


Вот. А теперь магический трюк - если код HERE (который перед тегом ?>) пробелом отодвинуть от левого края, то та самая фраза и выскакивает....
А говорили, пробелы не имеют значения...
Правда, в моем исходнике я не могу эту бяку убрать - все равно эту гадость пишет. Вот такие дела...

   
 
 автор: glsv (Дизайнер)   (19.01.2005 в 21:06)   письмо автору
 
   для: Jurik   (19.01.2005 в 19:11)
 

Скорее всего где то потеряна закрывающая скобка }.
Укажите ссылку на страницу учебника.

   
 
 автор: Jurik   (19.01.2005 в 21:08)
 
   для: glsv (Дизайнер)   (19.01.2005 в 21:06)
 

Это не Ваш учебник. Я пользовался простым "бумажным".
Но скобки и прочее на месте.

   
 
 автор: Jurik   (19.01.2005 в 21:21)
 
   для: Jurik   (19.01.2005 в 21:08)
 

И все таки, где же собака зарыта?

   
 
 автор: cheops   (19.01.2005 в 22:26)   письмо автору
 
   для: Jurik   (19.01.2005 в 21:21)
 

Совершено потрясная ошибка я такие очень люблю: на самом деле после HERE идёт пробел, который PHP тоже считает продолжением "буквенно-цифровой последовательности":
"HERE ", поэтому он не может найти конца, так как там только "HERE" и находит следующий "HERE ", который уже в фукнции... С этим <<< следует быть осторожным - это не самая удачная конструкция языка.

   
 
 автор: Jurik   (19.01.2005 в 23:03)   письмо автору
 
   для: cheops   (19.01.2005 в 22:26)
 

Вы абсолютно правы!
Именно так я и нашел ошибку. Довольно забавно, хоть и нервов потрачено...
Теперь дальше мучаю / мучаюсь.
Всем спасибо за помощь!

   
Rambler's Top100
вверх

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