|
автор: 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> - конец всего файла.
Проверил три раза - с учебником все совпадает. Помогите, а? Заранее благодарю. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: Jurik
(19.01.2005 в 21:10)
| | что за конструкция
print <<<HERE
.
.
.
HERE;
|
на ней и выдается ошибка. если бы у вас был редактор с подсветкой кода, сразу бы увидели... | |
|
|
|
|
автор: Jurik (19.01.2005 в 21:30) |
|
|
для: elenaki
(19.01.2005 в 21:23)
| | А что за редактор с подсветкой кода?
А эта конструкция - создание и вывод многострочного текста. Взято из учебника "PHP / MySQL для начинающих." Автор - Энди Харрис.
Может есть возможность заменить этот участок кода?
Признаюсь, я сам толком еще не понял, что это за код и для чего он - я пишу программу по учебнику, а потом разбираю её. В данном случае нерабочую прогу не могу разобрать. | |
|
|
|
|
|
|
|
для: Jurik
(19.01.2005 в 21:30)
| | Лучше перепишите это следующим образом.
$buttonText = '<input type = "radio"
name = "room"
value = "'.$newID.'">'.$roomName;
|
Раз уж эта конструкция так хитро работает, то может ее и не использовать?
Применяйте двойные кавычки для обрамления одинарных
$var = "Здесь был 'Вася' - УРА";
|
И одинарные для обрамления двойных.
$var = 'Здесь был "Вася" - УРА';
|
А для включения переменных в текст используйте символ точки:
$var = 5;
$txt = "Меня зовут Вася - мне ".$var." лет";
|
Это выведет строку
Меня зовут Вася - мне 5 лет
|
| |
|
|
|
|
|
|
|
для: elenaki
(19.01.2005 в 21:23)
| | По научному эта штука называется механизмом цитирования. Применяется для вывода многострочного текста. Но вот кк работает, не пойму. | |
|
|
|
|
|
|
|
для: 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 (который перед тегом ?>) пробелом отодвинуть от левого края, то та самая фраза и выскакивает....
А говорили, пробелы не имеют значения...
Правда, в моем исходнике я не могу эту бяку убрать - все равно эту гадость пишет. Вот такие дела... | |
|
|
|
|
|
|
|
для: 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)
| | И все таки, где же собака зарыта? | |
|
|
|
|
|
|
|
для: Jurik
(19.01.2005 в 21:21)
| | Совершено потрясная ошибка я такие очень люблю: на самом деле после HERE идёт пробел, который PHP тоже считает продолжением "буквенно-цифровой последовательности":
"HERE ", поэтому он не может найти конца, так как там только "HERE" и находит следующий "HERE ", который уже в фукнции... С этим <<< следует быть осторожным - это не самая удачная конструкция языка. | |
|
|
|
|
|
|
|
для: cheops
(19.01.2005 в 22:26)
| | Вы абсолютно правы!
Именно так я и нашел ошибку. Довольно забавно, хоть и нервов потрачено...
Теперь дальше мучаю / мучаюсь.
Всем спасибо за помощь! | |
|
|
|