Reputation: 125
<?php
//Called at start of page
while( $row = mysqli_fetch_assoc($result)){
$dataset[] = $row;
}
//Called in middle of page, inside <table><tbody>
$dSize = count($dataset);
for( $i = 0; $i < $dSize; $i++){
//foreach($dataset as $row){
$row = $dataset[$i];
$thisIsId = true;
echo "<tr>";
$rSize = count($row);
for( $j = 0; $j < $rSize; $j++){
//foreach($row as $value){
$value = $row[$j];
//Next line output ex: <td id='r1c2' class='editable'>Bob
echo "<td id='r$i" . "c$j'" . ($thisIsId ? "" : " class='editable'") . ">$value";
$thisIsId = false;
}
}
?>
I'm trying to fill out a table that contains customer information, but $value keeps returning null
. The foreach
loops that are commented out are left there because these loops worked except I wasn't able to assign an id to the element based on $i
and $j
(obviously).
If I add a console.log
of json_encode($row)
after the line $row = $dataset[$i];
, I get a JSON object that has all of the values filled out appropriately. As soon as I go into the nested for loop, I keep getting null values for $value
AND $row[$j]
if I just call that directly.
The ternary operator exists to check if it's the first column (the ID column) because that's the only cell that is not editable.
I've tried using global $row
because I ran into a problem with scope in PHP before but it didn't seem to solve anything. I also tried renaming the $row
variable to make sure it wasn't a conflict with when I use $row
at the beginning of the page, but that also didn't solve anything.
tl;dr Why is $value
returning null
when used in a for
loop but not when used in a foreach
loop?
Upvotes: 0
Views: 125
Reputation: 95
I have made necessary changes. I hope this gonna work. :)
Please provide <table>
and </table>
, above and bellow the php code respectively.
while( $row = mysqli_fetch_assoc($result)){
$dataset[] = $row;
}
//Called in middle of page, inside <table><tbody>
$dSize = count($dataset);
$i = 1;
foreach($dataset as $row){
$thisIsId = true;
echo "<tr>";
$j = 1;
foreach($row as $key=>$value){
//Next line output ex: <td id='r1c2' class='editable'>Bob
echo "<td id='r$i" . "c$j'" . ($thisIsId ? "" : " class='editable'") . ">$value</td>";
$thisIsId = false;
$j++;
}
$i++;
echo "</tr>";
}
?>
Upvotes: 0
Reputation: 1853
mysqli_fetch_assoc returns an associative array and not an ordered array : http://php.net/manual/en/mysqli-result.fetch-assoc.php.
So the key are the name of the column in your table that's why you cannot loop over it using a for loop. Use a foreach loop instead.
You should have a E_NOTICE
error raised (Undefined index) in your nested loop.
Upvotes: 1