PHPを使って、質問ポイントの集計プログラムを制作中です。
質問関連のデータを取得するためにデータベースにアクセスしています。
アクセスした結果はJsonで受け取る仕組みになっています。
ところがエラーになってしまいます。
コンソールに出力されJsonが以下です。
400[{"quesAnswerId":3,"studentId":1000007,"quesName":"asda masaaki","quesAnswer":"hgfhfghfghfge":" ~中略~ ","quesAnswerDatetime":"06\u670803\u65e5 09\u664203\u5206","quesPoint":null}]
長いので途中は省略しています。
Jsonですから [ で始まり、] で終わるはずですが、先頭に「400」が混入しています。
そして最後の「quesPoint」がnullになってしまっています。
実行したPHPが以下です。
今回の結果では3行の結果が得られるはずでした。3行の「quesPoint」の値は4, 0, 0 になるはずでした。
PHPの途中に別クラスに飛ぶところがあります。このクラスでポイント集計するのですが、
nll となってしまいます。
どうやら、別クラスに飛んで集計した結果が、Jsonの中に取り込まれず、外にはみ出してしまったようです。
別クラスに飛んで集計した結果をJsonに取り込むようにするにはどのように記述したらよいでしょうか。
どなたか教えてください。
よろしくお願い致します。
PHP
1<?php 2 3 //▼▼データベース接続のパターンの読み込み 4 require_once '../common/DBAccess.php'; 5 6 //▼▼ポイント集計機能の読み込み 7 require_once '../quespoint/QuespointAggregate.php'; 8 9 $quesId = 0; 10 if(isset($_POST['quesId'])) { 11 $quesId = $_POST["quesId"]; 12 } 13 14 try{ 15 $sql = "SELECT * 16 FROM tbl_ques_answer, tbl_student 17 WHERE quesId = ? 18 AND tbl_student.studentId = tbl_ques_answer.studentId 19 ORDER BY quesAnswerDatetime DESC"; 20 21 $stmt = $conn->prepare($sql); 22 23 $stmt-> bindValue(1, $quesId, PDO::PARAM_INT); 24 25 $stmt->execute(); 26 27 $data = array(); 28 29 while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 30 31 if($row != null){ 32 33 // 別クラスでこの質問のポイントを集計 34 $point = quesPointAggregate($row['quesAnswerId'], 32); 35 36 $data[]=array( 37 'quesAnswerId'=>$row['quesAnswerId'], 38 'studentId'=>$row['studentId'], 39 'studentName'=>$row['studentName'], 40 'quesAnswer'=>nl2br($row['quesAnswer']), 41 'quesAnswerImageType'=>$row['quesAnswerImageType'], 42 'quesAnswerDatetime'=>$row['quesAnswerDatetime'], 43 'quesPoint'=>$point 44 ); 45 } 46 } 47 48 header('Content-type: application/json'); 49 echo json_encode($data); 50 51 }catch (PDOException $e){ 52 print("Error:".$e->getMessage()); 53 die(); 54 } 55 $stmt = null; 56 $conn = null; 57?> 58
回答1件
あなたの回答
tips
プレビュー