質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

htmlのエラーについて

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,305

hw_test

score 11

以下の2か所でエラーが出ており、調べてもわからなかったのでご教示ください。

<?php
省略
$strHTML = '<!DOCTYPE html>
<html> 
省略
$(document).ready(function() {$('.demo').tbodyScroll({thead_height:   '30px',tbody_height:   '100px',head_bgcolor:   'transparent',foot_bgcolor:   'transparent'}); });
省略
</html> ';
$output = array (
        'total_page' => ceil($datanum / $page_disp_kensu),
        'text' => ($strHTML)
);

echo json_encode($output);
?>


①$(document).ready(function() {$('.demo').tbodyScroll({thead_height:   '30px',tbody_height:   '100px',head_bgcolor:   'transparent',foot_bgcolor:   'transparent'}); });でsyntax error, unexpected '(', expecting T_VARIABLE or '$'というエラーが出ます。

②一番下の</html> ';でsyntax error, unexpected '<'というエラーが出ます。

「追記」
最新のソースです。現状は
$strHTML = <<<'eof'<table id="tbl_list" cellspacing="0" cellpadding="0">
の箇所で以下のエラーが出ています。
以下のコードそのままでエラーが出ますが、どこに問題があるのでしょうか?
「syntax error, unexpected T_SL」

$strHTML = <<<'eof'
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="テスト">
<title>tbodyScroll - jQueryプラグイン</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="jquery.tbodyscroll.js"></script>
<script>
$(document).ready(function() {
    $(".demo").tbodyScroll({thead_height:"30px",tbody_height:"100px",head_bgcolor: "transparent",foot_bgcolor: "transparent"});
});
</script>
<style>
th,td {width: 180px;}
</style>
</head>
eof;

//ヘッダー部
$strHTML = <<<'eof'<table id="tbl_list" cellspacing="0" cellpadding="0">
            <thead>
            <tr>
                <th scope="col" class="f-weight">備品<br>タイプ</th>
                <th scope="col" class="f-weight"><a href="#" id="sort" name="keisokuki" param="'._hs($sort_keisokuki_img).'">備品名</a></th>
            </tr>
            </thead>
eof;

$strHTML .= <<<'eof'<tbody >
eof;

if ($datanum > 0) {

    while ($CN->EOF() == true) {


        $strHTML .= <<<'eof'<tr ".$bgcolor.">
            <td class='break'>"._hs($CN->GetFieldData('mes_type'))."</td>
            <td class='break'>"._hs($CN->GetFieldData('mes_name'))."</td>
          </tr>
eof;

        $CN->MoveNext();

    }

} else {
    $strHTML .= <<<'eof'<tr><td colspan='28'>該当するデータがありません。</td></tr>
eof;
}

$CN->DBClose();

$strHTML .= <<<'eof'


    </tbody>
</table>
</html>
eof;

$output = array (
        'total_page' => ceil($datanum / $page_disp_kensu),
        'text' => ($strHTML)
);

echo json_encode($output);
?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2018/03/12 10:51

    PHPではありませんか?少なくともサーバサイド言語を使用されているようなので、質問タグにそれを追加してください。

    キャンセル

回答 4

checkベストアンサー

+2

以前の質問からエラー解消のために奮闘されているものと思われますが、
その時に指摘したコメン部分そのままと思います。

mts10806
2018/03/07 16:38 編集
切れているのは切れているのは
$strHTML = ' で始まっているけど、閉じの ' がないところ。
それでも上の部分ではsyntax error出てると思いますよ。
' で変数を代入しているのに中に 'があります。中で使いたい場合はエスケープされた方が良いでしょう。
$hogehoge = 'aaa\'bbb';
おそらく同じ観点でエラーを解消できるはずです。
変数に代入する際に ' で囲っているか、 " で囲っているか。
囲っているクォートを中のHTMLやjavascriptなどの文字列で使っていないか。
特に上のほうはシングルクォートで囲いながら中でjavascriptの記述でシングルクォートを使っていますね。
$strHTML = '<!DOCTYPE html>
~~
$('.demo').tbodyScroll({ ←ここ。
あとは、終了部分(;の前)は同じクォートになっているかあたりを確認してみてください。

変数代入時にシングルクォーテーション''で囲っているのに、中でシングルクォートを利用しているからです。
中で「文字列」としてシングルクォーテーションを利用したければエスケープする必要があります。

$strHTML = 'aaa\'bbb';

echo $strHTML; // aaa\bbb

沢山あるので全てにシングルクォーテーションを手動でつけようと思うと
漏れが発生して中々進まなくなってしまうので、エスケープを入れるのではなく、ヒアドキュメントの利用もご検討ください。

※その場合、中でPHPの変数を使いたい場合は{$hogehoge}とする必要があるのでご注意ください。

以前もすすめましたが、コードのエラーチェックも自動で行ってくれるテキストエディタを使用するように強くすすめます。
例えばEclipse上で確認すれば、画面を見る前に分かります。
イメージ説明

 修正コード 2018/03/12 13:35

最新ソースの問題がある箇所をざっくり修正しました。
これでエラーはなくなりそうですが、想定通りに出るかどうかはまた別問題です。
自身で調整してください。

修正した箇所:

  • nowdocに統一するため、変数に別で入れていたところを全て削除。nowdoc内に格納。
  • javascript部分にあったダブルクォーテーション(")に対するエスケープを全て削除
    →nowdocでは必要ないため
  • <table>タグの開始がないので追加
  • </html>eof;となっていたので、改行し
    </html>
    eof;
    とした。
    →yambejpさんが貼ってくれているPHPドキュメントの「ヒアドキュメントの項」にありますが、

非常に重要なことですが、終端 ID がある行には、セミコロン (;) 以外の他の文字が含まれていてはならないことに注意しましょう。
閉じの部分には;以外含まれてはいけません(エラーはそのせいで起きています。ヒアドキュメントが正常に閉じられていない)

修正コードは下記です。

~~~冒頭部分は関係ないので省略しています~~~

$strHTML = <<<'eof'
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="テスト">
<title>tbodyScroll - jQueryプラグイン</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="jquery.tbodyscroll.js"></script>
<script>
$(document).ready(function() {
    $(".demo").tbodyScroll(
        {
        thead_height:"30px",
        tbody_height:"100px",
        head_bgcolor: "transparent",
        foot_bgcolor: "transparent"
        }
    );
});
</script>
<style>
th,td {width: 180px;}
</style>
</head>
<table>
    <tbody >
    </tbody>
</table>
</html>
eof;

$output = array (
    'total_page' => ceil($datanum / $page_disp_kensu),
    'text' => ($strHTML)
);

echo json_encode($output);
?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/13 13:22

    調べながら進めていくうちに理解してきましたが、
    まだまだのようです。
    class="demo"を入れてみましたが動作しませんでした。
    現状は固定ができず、テーブルのデータ部も値ではなく"._hs($CN->GetFieldData('maker_name'))."などが表示されています。

    キャンセル

  • 2018/03/13 13:28 編集

    本質問とは別の要件となります。
    既に指摘はさせていただいていますが、ベストアンサーがでており本質問は解決しているので、コメントで次の疑問を続けるのではなく、現在のソースコードと起きている現象の記述をもって新しい質問を立ててください。

    あくまでこの回答にぶら下がるコメントは回答に対する微調整であり、質問からまた先の質問への対応を続ける場所ではない認識でお願いします。

    キャンセル

  • 2018/03/13 13:43

    はい。
    またつまづきましたら質問すると思いますがよろしくお願いいたします。

    キャンセル

+2

それはシングルクォートが競合しています
この手の処理はnowdocでやると良いでしょう

$strHTML =<<<'eof'
<!DOCTYPE html>
<html> 
省略
$(document).ready(function() {$('.demo').tbodyScroll({thead_height:   '30px',tbody_height:   '100px',head_bgcolor:   'transparent',foot_bgcolor:   'transparent'}); });
省略
</html>
eof;

print $strHTML;

※jQueryが「$」をベースに処理をするため
ヒアドキュメントでやると変数を展開しようとしておかしくなります。

 追記

nowdocで処理する限り特に問題なさそうです

<?PHP
$strHTML =<<<'eof'
<!DOCTYPE html>
<html> 
省略
$(document).ready(function() {$('.demo').tbodyScroll({thead_height:   '30px',tbody_height:   '100px',head_bgcolor:   'transparent',foot_bgcolor:   'transparent'}); });
省略
</html>
eof;
$output = array (
  'total_page' => '省略',
  'text' => $strHTML
);
print_r($output);
?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/12 12:09

    $outputについて一応追記しておきました
    とくに問題があるようには見えません

    キャンセル

  • 2018/03/12 12:49

    そうですか。
    ご確認ありがとうございます。
    ここに記載していないところにまたエラーの原因があるということですね。
    調べてみます。

    キャンセル

  • 2018/03/12 13:03

    最新のコードを追記したので確認していただけないでしょうか?
    追記したコードそのままで上記のエラーが出ます。

    キャンセル

+1

なんの言語か知りませんが、シングルクォーテーションで囲まれた文字列の中でシングルクォーテーションを使っているからでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/12 11:22

    その通りだと思います。ヒアドキュメントを使用して対応してみます。

    キャンセル

+1

$strHTMLに代入する際にシングルクオートでHTMLをくくっていますね。
なのに、その中でシングルクオートを使ってしまうと、誤作動が起きてしまいます。なので、シングルクオートでくくる場合には、中身のシングルクオートはエスケープ処理をしてください。

$strHTML = '<!DOCTYPE html>
<html> 
省略
$(document).ready(function() {$(\'.demo\').tbodyScroll({thead_height:   \'30px\',tbody_height:   \'100px\',head_bgcolor:   \'transparent\',foot_bgcolor:   \'transparent\'}); });
省略
</html>';

あと、言語はたぶんPHP?JS?か何かだと思いますが、シングルクオートを用いて複数行にする場合には

$strHTML = '<!DOCTYPE html>'.
'<html> '.
'$(document).ready(function() {$(\'.demo\').tbodyScroll({thead_height:   \'30px\',tbody_height:   \'100px\',head_bgcolor:   \'transparent\',foot_bgcolor:   \'transparent\'}); });'.
'</html>';

のような感じでドット(.)で連結させることができるので使ってみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/12 11:27

    ありがとうございます。
    こちらを参考にして対応してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる