1

O'Rourke や O'reilly などの名前エントリの一部が、場合によっては JavaScript を壊すことに気付きました。どのように対処するのだろうか。これらの名前を PHP/MYSQL から取り出して、javascript に入れます。

データベースに入る前に交換しますか、それともデータベースから引き出した後に交換しますか?

前もって感謝します

google.load('visualization', '1', {packages:['table']});
      google.setOnLoadCallback(drawTable);
      function drawTable() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'First Name');
        data.addColumn('string', 'Last Name');
        data.addColumn('string', 'email');
        data.addColumn('string', 'Parent email 1');
        data.addColumn('string', 'Parent email 2');
        data.addColumn('string', 'Advisor');
        data.addColumn('string', 'Active');
        data.addColumn('string', 'Edit');
        //data.addColumn('number', '');
        data.addRows([
     <?php
   if(count($items))
   {
        foreach($items as $item)
        {
            foreach($advisors as $key=>$advisor)
            {
                if($item['advisor']==$advisor['id'])
                {
                    $ad=$advisor['last_name'];
                }
            }
            $active_icon = ($item['active']=='1'?'tick':'cross');
            $editlink = anchor('auth/admin/members/form/'.$item['id'],$this->bep_assets->icon('pencil'));
            echo "['".$item['first_name']."', '".$item['last_name']."', '".$item['email']
            ."', '".$item['parent_email1']."', '".$item['parent_email2']."', '".$ad."', '".$this->bep_assets->icon($active_icon)."','".$editlink."'],";
        }
   }

    ?>

        ]);

        var table = new google.visualization.Table(document.getElementById('table_div'));
        table.draw(data, {showRowNumber: true, allowHtml:true});
      }
4

1 に答える 1

2

javascript 変数を出力するためだけに、面倒でエラーが発生しやすい文字列を追加する作業がたくさんあります。代わりにすべきことは、PHP で必要なデータ構造 (配列の配列) を構築し、それを使用json_encode()して javascript 互換のリテラルを発行することです。すべての引用符などは、エンコーダによって自動的にエスケープされます。

$itemOutput = array();
if(count($items)) {
    foreach($items as $item) {
        foreach($advisors as $key=>$advisor) {
            if($item['advisor']==$advisor['id']) {
                $ad=$advisor['last_name'];
            }
        }
        $active_icon = ($item['active']=='1'?'tick':'cross');
        $editlink = anchor('auth/admin/members/form/'.$item['id'],$this->bep_assets->icon('pencil'));
        $itemOutput[] = array(
            $item['first_name'],
            $item['last_name'],
            $item['email'],
            $item['parent_email'],
            $item['parent_email2'],
            $ad,
            $this->beep_assets->icon($active_icon),
            $editLink
        );
    }
}
echo "data.addRows(" . json_encode($itemOutput) . ");" ;

オブジェクトまたは連想配列がある場合、JavaScript オブジェクトとして出力されます。

echo json_encode( 
    array( 'a'=>'aa', 'b'=>'bb'),
    array( 'c'=>'cc', 'd'=>'dd')
);
==> [{"a":"aa","b":"bb"},{"c":"cc","d":"dd"}]
于 2012-11-07T06:17:01.193 に答える