Я генерирую таблицу из данных MySQL, перебирая все ключи из каждой строки, чтобы сгенерировать заголовки таблицы.Этот цикл foreach (строка 6 ниже) останавливается после 25-го столбца в таблице, хотя var_dump ($ result) показывает, что запрос возвратил все 35 столбцов из таблицы.Решение, вероятно, приведет к появлению основных лицевых панелей, но я просто не могу разобраться с этим.
$result = mysqli_query($con,$sql);
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
while($thead_done == 0) {
echo "<thead>";
foreach($row as $rkey => $rvalue) {
echo "<th>";
switch($rkey) {
[bunch of cases to make the table headers human readable]
default:
echo $rkey;
$s_headers[]='"' . $rkey . '"';
}
echo "</th>";
}
echo "</thead>";
$thead_done++;
Чтобы подтвердить, что проблема не связана с содержимым 25-го столбца в моей базе данных, я изменил запрос SQLявно выбрать этот столбец, и он разбирается просто отлично.Кроме того, я уверен, что PHP просто останавливается внутри цикла foreach, потому что возвращаемый HTML заканчивается на:
<th>[column 25 header]
, означая, что закрывающий тег в последней строке цикла не был отображен в echo'е.
К сожалению, у меня нет доступа к журналам PHP на этом веб-сервере, поэтому мне еще сложнее понять, почему он просто останавливается на этой позиции.
Обновление: я изменил начало кодаочень немного, для целей отладки, но он ведет себя так же.Полный код:
$result = mysqli_query($con,$sql);
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
print_r(array_keys($row));
while($thead_done == 0) {
echo "<thead>";
foreach(array_keys($row) as $rkey) {
echo "<th>";
switch($rkey) {
case "ppower":
echo "Plasma Power";
$s_headers[]="Plasma Power";
break;
case "cathodel":
echo "Cathode Length";
$s_headers[]="Cathode Length";
break;
default:
echo $rkey;
$s_headers[]='"' . $rkey . '"';
}
echo "</th>";
}
echo "</thead>";
$thead_done++;
/* Spout XLS GENERATION */
$writer = WriterFactory::create(Type::XLSX);
$writer->openToFile($filename);
$style = (new StyleBuilder())->setFontBold()->build();
$writer->addRowWithStyle($s_headers, $style);
}
unset($s_data);
echo "<tr>";
foreach($row as $rkey => $rvalue) {
if($rkey == "magnet_id") {
echo "<td><a href=\"details.php?id=" . $rvalue . "\">" . $rvalue . "</td>";
$s_data[]=$rvalue;
} else if($rkey =="edms") {
echo "<td><a href=\"[URL here]" . $rvalue . "/1\" target=\"_blank\">" . $rvalue . "</a></td>";
$s_edms = '=HYPERLINK("[URL here]' . $rvalue . '","' . $rvalue . '")';
$s_data[]=$s_edms;
} else {
echo "<td>" . $rvalue . "</td>";
$s_data[]=$rvalue;
}
}
echo "</tr>";
$writer->addRow($s_data);
}
$writer->close();
}
Кроме того, печать всех ключей массива $ result подтверждает, что возвращены все данные:
Array ([0] => magnet_id [1] => magnet_type [2] => origin [3] => плановое время [4] => vc_id [5] => удалено [6] => удалено_ время [7] => ir1 [8] => с покрытием [9] => coat_run [10] => coat_time [11] => system [12] => sey [13] => ir2 [14] => lastop [15] => edms [16] => pump_time [17] => давление[18] => ccomment [19] => bakeout [20] => продолжительность [21] => давление [22] => напряжение [23] => ток [24] => ppower [25] => катод [26]] => pdensity [27] = >ified_time [28] => reinstalled_loc [29] => reinstalled_time [30] => username [31] => sample_id [32] => rfqc [33] => rfqc_time [34] => rfqc_comment)
Но таблица все равно выглядит так:
<thead><th>Asset ID</th><th>Asset Type</th><th>Position</th><th>Scheduled</th><th>Vacuum Chamber</th><th>removed</th><th>Removed</th><th>ir1</th><th>Coated</th><th>Coating Run</th><th>Coating Time</th><th>Coating System</th><th>SEY</th><th>ir2</th><th>lastop</th><th>EDMS</th><th>Start Pumping Time</th><th>P-limit</th><th>ccomment</th><th>bakeout</th><th>Proc. Duration</th><th>Proc. Pressure</th><th>Plasma Voltage</th><th>Plasma Current</th><th>Plasma Power
:EOF