Jag lyfter in en fråga från chatten:
SVAR
EOD; lägg den längst till vänster, inte intabbad.
https://www.php.net/manual/en/language. ... ax.heredoc
I PHP 7.3 tillåter man att EOD; är intabbad. Därför funkar det lokalt. Men studservern kör PHP 7.2 och där måste man ha den längs till vänster, annars fortsätter parsern till filens slut eftersom den inte hittade slutmärket för heredoc-konstruktionen.
https://www.php.net/manual/en/migration ... atures.php (se första featuren i php 73.
Notera felmeddelandet:
Det är ett tecken på att PHP parsern letar igenom hela filen och slutar först när filen är slut, den hittar alltså inte EOD; konstruktionen som den letar efter.
Detta är ett vanligt fel, som man således försöker lätta upp i PHP 7.3 genom att tillåta att EOD; är intabbad. Men det ger oss alltså ett kompabilitetsbekymmer där vi måste ha koll på olika versioner.
Allt som allt är detta nyttig kunskap att veta om hur det fungerar.
Jag håller på med uppgiften “Bygg en multisida för att söka i en databas” för kmom5. Webbsidan fungerar bra på min lokala server men när jag laddade upp den på studentservern och försöker visa den i webbläsaren får jag detta fel:
Parse error: syntax error, unexpected end of file in /home/saxon/students/20192/liba19/www/dbwebb-kurser/htmlphp/me/kmom05/jetty/src/functions.php on line 15.
Jag har kollat igenom och letat efter om jag missat något "}" eller ";" men jag hittar inget fel
Här är min kod:
- Kod: Markera allt
<?php
function connectToDatabase($dsn)
{
try {
$db = new PDO($dsn);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "<p>Uppkopplingen misslycklades</p>";
throw $e;
}
return $db;
}
function printJettyResultsetToHTMLTable($res)
{
$rows = null;
foreach ($res as $row) {
$rows .= "<tr>";
$rows .= "<td><a href=\"jetty.php?page=display-details&position={$row['position']}\">{$row['position']}</a></td>";
$rows .= "<td>{$row['boatType']}</td>";
$rows .= "<td>{$row['boatEngine']}</td>";
$rows .= "<td>{$row['boatLength']}</td>";
$rows .= "<td>{$row['boatWidth']}</td>";
$rows .= "<td>{$row['ownerName']}</td>";
$rows .= "</tr>\n";
}
echo <<<EOD
<table>
<tr>
<th>Position</th>
<th>Båttyp</th>
<th>Motor</th>
<th>Längd</th>
<th>Bredd</th>
<th>Ägare</th>
</tr>
$rows
</table>
EOD;
}
SVAR
EOD; lägg den längst till vänster, inte intabbad.
https://www.php.net/manual/en/language. ... ax.heredoc
I PHP 7.3 tillåter man att EOD; är intabbad. Därför funkar det lokalt. Men studservern kör PHP 7.2 och där måste man ha den längs till vänster, annars fortsätter parsern till filens slut eftersom den inte hittade slutmärket för heredoc-konstruktionen.
https://www.php.net/manual/en/migration ... atures.php (se första featuren i php 73.
Notera felmeddelandet:
"Parse error: syntax error, unexpected end of file in"
Det är ett tecken på att PHP parsern letar igenom hela filen och slutar först när filen är slut, den hittar alltså inte EOD; konstruktionen som den letar efter.
Detta är ett vanligt fel, som man således försöker lätta upp i PHP 7.3 genom att tillåta att EOD; är intabbad. Men det ger oss alltså ett kompabilitetsbekymmer där vi måste ha koll på olika versioner.
Allt som allt är detta nyttig kunskap att veta om hur det fungerar.
...
..:
.... /mos