Я не могу исправить проблему, связанную с синтаксической ошибкой HEREDOC

Это ссылка, чтобы избежать пометок как дубликат

Проблема с heredoc и PHP

Я не смог решить эту проблему, следуя решениям, предоставленным разработчиками. В этом фрагменте кода, безусловно, должна быть синтаксическая ошибка, но я не могу найти, где она находится, на самом деле приведенный ниже оператор Heredoc не работает и не позволяет всему коду работать, более того, если я пытаюсь запустить код на моем веб-сервере у меня ошибка 500 серверов. Я изменил свой вопрос, внедрив в него ответы.

До редактирования этого вопроса я пытался решить проблему самостоятельно, но я попал в тупик. Я только что добавил сообщение об ошибке в начале кода, даже если не очень корректно открывать старые вопросы.

   
<?php error_reporting(E_ALL); ini_set('display_errors', 1);?>
<?php
// take in the id of a director and return his/her full name
function get_director($director_id) {
 
    global $db;
 
    $query = 'SELECT 
            people_fullname 
       FROM
           people
       WHERE
           people_id = ' . $director_id;
    $result = mysql_query($query, $db) or die(mysql_error($db));
 
    $row = mysql_fetch_assoc($result);
    extract($row);
 
    return $people_fullname;
}

// take in the id of a lead actor and return his/her full name
function get_leadactor($leadactor_id) {
 
    global $db;
 
    $query = 'SELECT
            people_fullname
        FROM
            people 
        WHERE
            people_id = ' . $leadactor_id;
    $result = mysql_query($query, $db) or die(mysql_error($db));
 
    $row = mysql_fetch_assoc($result);
 extract($row);
 
    return $people_fullname;
}

// take in the id of a movie type and return the meaningful textual
// description

function get_movietype($type_id) {
 
    global $db;
 
    $query = 'SELECT 
            movietype_label
       FROM
           movietype
       WHERE
           movietype_id = ' . $type_id;
    $result = mysql_query($query, $db) or die(mysql_error($db));
 
    $row = mysql_fetch_assoc($result);
    extract($row);
 
    return $movietype_label;
}

//connect to MySQL
$db = mysql_connect('localhost', 'root', 'xxxxxxxx') or 
    die ('Unable to connect. Check your connection parameters.');
// make sure you’re using the right database
mysql_select_db('moviesite', $db) or die(mysql_error($db));
// retrieve information
$query = 'SELECT
        movie_name, movie_year, movie_director, movie_leadactor,
        movie_type
    FROM
        movie
    ORDER BY
        movie_name ASC,
        movie_year DESC';
$result = mysql_query($query, $db) or die(mysql_error($db));
// determine number of rows in returned result
$num_movies = mysql_num_rows($result);
 $table = <<<ENDHTML
 <div style="text-align: center;"> 
  <h2>Movie Review Database</h2> 
  <table border="1" cellpadding="2" cellspacing="2" 
  style="width: 70%; margin-left: auto; margin-right: auto;"> 
   <tr> 
    <th>Movie Title</th> 
    <th>Year of Release</th> 
    <th>Movie Director</th> 
    <th>Movie Lead Actor</th> 
    <th>Movie Type</th> 
   </tr>

  ENDHTML; 
   /* loop through the results */
    while ($row = mysql_fetch_assoc($result)) {
    extract($row);
    $director = get_director($movie_director);
    $leadactor = get_leadactor($movie_leadactor);
    $movietype = get_movietype($movie_type);
 $table .= <<<ENDHTML
  <tr>
    <td>$movie_name</td>
    <td>$movie_year</td>
    <td>$director</td>
    <td>$leadactor</td>
    <td>$movietype</td>
  </tr>

  ENDHTML;    
 }
$table.= <<<ENDHTML
    </table>    
  <p>$num_movies Movies</p> 
  </div> 

  ENDHTML;

echo $table;
  
?>

> this is the error that I receive
ENDHTML; /* loop through the results */ while ( = mysql_fetch_assoc(Resource id #3)) { extract(); = get_director(); = get_leadactor(); = get_movietype(); 

.= << ENDHTML; }

2 ответа

Решение

Перед вашим закрывающим идентификатором не должно быть пробелов ENDHTML; который явно содержит 2 пробела для каждого из них.

  • Удалить их.

Отчет об ошибках поймал бы эту синтаксическую ошибку.

Читайте на heredoc:

Предупреждение Очень важно отметить, что строка с закрывающим идентификатором не должна содержать других символов, кроме точки с запятой (;). В особенности это означает, что идентификатор не может иметь отступ, и не должно быть пробелов или табуляции до или после точки с запятой. Также важно понимать, что первый символ перед закрывающим идентификатором должен быть символом новой строки, как это определено локальной операционной системой. Это \n в системах UNIX, включая Mac OS X. За закрывающим разделителем также должен следовать символ новой строки.


Примечания:

mysql_* Уведомление об устаревании функций:

http://www.php.net/manual/en/intro.mysql.php

Начиная с PHP 5.5.0, это расширение устарело и не рекомендуется для написания нового кода, так как оно будет удалено в будущем. Вместо этого следует использовать расширение mysqli или PDO_MySQL. Смотрите также MySQL API Overview для получения дополнительной помощи при выборе MySQL API.

Эти функции позволяют вам получить доступ к серверам баз данных MySQL. Более подробную информацию о MySQL можно найти по адресу " http://www.mysql.com/.

Документацию по MySQL можно найти по адресу " http://dev.mysql.com/doc/.

Как насчет

$num_movies = mysql_num_rows($result);
?><div style="text-align: center;"> 
  <h2>Movie Review Database</h2> 
  <table border="1" cellpadding="2" cellspacing="2" 
  style="width: 70%; margin-left: auto; margin-right: auto;"> 
   <tr> 
    <th>Movie Title</th> 
    <th>Year of Release</th> 
    <th>Movie Director</th> 
    <th>Movie Lead Actor</th> 
    <th>Movie Type</th> 
   </tr>
<?php   /* loop through the results */
    while ($row = mysql_fetch_assoc($result)) {
      extract($row);
      $director = get_director($movie_director);
      $leadactor = get_leadactor($movie_leadactor);
      $movietype = get_movietype($movie_type);
      echo "<tr><td>$movie_name</td><td>$movie_year</td><td>$director</td><td>$leadactor</td><td>$movietype</td></tr>";
    }
    echo "</table><p>$num_movies Movies</p></div>"; 
?>
Другие вопросы по тегам