【发布时间】:2018-05-29 06:44:39
【问题描述】:
基本上,我有两个单独的查询,它们从数据库中获取数据并在 HTML 表中输出。 $result 是查询 1 的输出,$result2 是查询 2 的输出。
缺陷 1
这是输出到 html 表的 php 代码:
echo "<table id='table'>";
while($row=pg_fetch_assoc($result2)){echo "<tr>";
echo "<td align='left' width='200'>" . $row['message_date'] . "</td>";
echo "<td align='left' width='200'>" . $row['message_text'] . "</td>";
echo "<td align='left' width='200'>" . $row['message_by'] . "</td>";
while($row2=pg_fetch_assoc($result)){
foreach($row2 as $rslt){
echo "<td align='left' width='200'>" . $rslt['recipient_name'] . "</td>";
echo "<td' align='left' width='200'>" . 0 . $rslt['phone_number'] . "</td>";
}
}
echo "</tr>";}
echo "</table>"
缺陷在于,例如有 20 个收件人,表示 20 个姓名和 20 个电话号码,所有行在表中输出 3 到 5 次。例如:
|some-date|some-text|some-sender|John-Doe|12345|John-Doe|12345|John-Doe|12345|...
我可以确认表格中的任何名称都没有多个条目。这是为什么呢?
缺陷 2 如果页面从上表中获取所有数据并基本上将其转换为对象然后字符串化,则底部有 JS。只有在上面有问题的收件人字段(姓名和电话号码)中,它才有效,它只需要第一个名字和电话,我希望重复的收件人数据也在那里。这是代码:
var table = document.getElementById('table');
var jsonArr = [];
for(var i =0,row;row = table.rows[i];i++){
var col = row.cells;
var jsonObj = {
message_by : col[2].innerHTML,
message_date : col[0].innerHTML,
message_recipients: [{
phone_number : col[4].innerHTML,
recipient_name : col[3].innerHTML,
}],
message_text : col[1].innerHTML,
subscriber_name: "myName"
}
console.log(jsonObj);
jsonArr.push(jsonObj);
}
var sendString = JSON.stringify(jsonObj);
console.log(sendString);
我在表格的 php 输出中做错了什么,为什么 JS 没有从表格中提取所有收件人数据?
编辑 - 更多信息
对于缺陷 1,这是我所期望的:
|message date| sender | recipient-1 name | recipient-1 phone | recipient-x name | recipient-x phone | message | subscriber-name |
|------------|--------|------------------|-------------------|------------------|-------------------|---------|-----------------|
这就是我得到的(注意重复的收件人条目,但现在所有收件人都是这样。有些是 3 倍,有些是 5 倍):
|message date| sender | recipient-1 name | recipient-1 phone | recipient-1 name | recipient-1 phone | recipient-2 name | recipient-2 phone | message | subscriber-name |
|------------|--------|------------------|-------------------|------------------|-------------------|------------------|-------------------|---------|-----------------|
| some date | Peter | John Doe | 0700100100 | John Doe | 0700100100 | Person 2 | 0700200200 |some text| my name |
对于缺陷 2,这是我所期望的:
{
"message_by":"Senders Name",
"message_date":"2017-12-14 13:54:28.876",
"message_recipients":[
{
"phone_number":"0700100100",
"recipient_name":"Person One"
},
{
"phone_number":"0700200200",
"recipient_name":"Person Two"
},
{
"phone_number":"0700300300",
"recipient_name":"Person Three"
}
],
"message_text":"Sample text",
"subscriber_name":"myName"
}
这就是我得到的:
{
"message_by":"Senders Name",
"message_date":"2017-12-14 13:54:28.876",
"message_recipients":[
{
"phone_number":"0700100100",
"recipient_name":"Only The First Person"
}
],
"message_text":"Sample text",
"subscriber_name":"myName"
}
【问题讨论】:
-
嵌套
$row=看起来很危险。 -
不要在第二个 while 循环中使用相同的变量
-
it takes only the very first name and phone- 因为您只添加了第一个名字和电话,第 3 列和第 4 列...第二个名字和电话将在第 5 列和第 6 列中,第三个将在第 7 列和第 8 列中 - 大概 -
你能把DEFECT 1的实际结果和你想要的预期输出的例子也贴出来
-
@Clint_A - 所以你为什么抱怨你只得到 col 3/4 而你所做的只是阅读 col 3/4
标签: javascript php json foreach stringify