php - foreach function in JSON returning only one row
Get the solution ↓↓↓Solution:
First in the PHP you are overwriting the array each time round the loop so there would only ever have been one occurance passed back to the javascript to process
if($_POST['btn_action'] == 'fetch_single') {
$exam_type_id = $_POST['exam_id'];
$query = "SELECT a.*, b.exam_type_name
FROM exam_section a
INNER JOIN exam_type b ON a.exam_type_id=b.exam_type_id
WHERE a.status = :status
AND a.exam_type_id = :exam_type_id";
$statement = $conn->prepare($query);
$statement->execute(
array( ':status' => 'active',
':exam_type_id' => $exam_type_id)
);
$result = $statement->fetchAll();
foreach($result as $row) {
$htm = '<div class="row">
<div class="form-group col-lg-4">
<label for="select_section"></label>
<p id="select_section">'.$row['section_name'].'
</p>
</div>
<div class="form-group col-lg-4">
<label for="no_of_questions">No. of Questions</label>
<input type="number" class="form-control" id="no_of_questions" required>
</div>
<div class="form-group col-lg-4">
<label for="mark_per_question">Mark Per Question</label>
<input type="number" class="form-control" id="mark_per_question" required>
</div>
</div>';
$output[] = [
'section_id' => $row['section_id'],
'exam_type_id' => $row['exam_type_id'],
'section_name' => $row['section_name'],
'exam_type_name' => $row['exam_type_name'],
'section_row' => $htm
];
}
echo json_encode($output);
}
So now in the javascript you will need to process that array as RASHAN suggested
$(document).on('click', '.schedule', function(){
var exam_id = $(this).attr("id");
var btn_action = 'fetch_single';
$.ajax({
url:'web-services/schedule-exam.php',
method:"POST",
data:{exam_id:exam_id, btn_action:btn_action},
dataType:"json",
success:function(data)
{
$('#setup_exam_modal').modal('show');
//$('#span_section_row').html(data.section_row);
var t="";
$.each(data,function(index,value){
// concatenate all the occurances of the html and place on page
t += value.section_row;
})
$('#span_section_row').html(t);
}
})
});
Now you have one remaining problem that I can see and that is you are generating multiple HTML element all with the same
id
like here,
<p id="select_section">'.$row['section_name'].'
in multiple sections of your HTML. As I am not familiar with whats going on elsewhere in the code, possibly you dont need these
id
's at all and can remove them. Or you will have to make them unique on the page, or amend your javascript to select those elements some other way
Answer
Solution:
From your controller you are returning data as array, you need to iterate over your response as
var append="";
$.each(data,function(i,v){
append += v.section_row;
})
$('#span_section_row').html(append);
Share solution ↓
Additional Information:
Link To Answer People are also looking for solutions of the problem: the process class relies on proc_open, which is not available on your php installation.
Didn't find the answer?
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Similar questions
Find the answer in similar questions on our website.
Write quick answer
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.