Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP填充表_Php_Html_Mysql_Sql_Mysqli - Fatal编程技术网

用PHP填充表

用PHP填充表,php,html,mysql,sql,mysqli,Php,Html,Mysql,Sql,Mysqli,我的数据库中有这样一个表: IdUser | Name | Surname | name | Surname| numbers | _____|________|__________| John | Doe | 21212121 | | | 23424324 | _____|________|__________| Frank|Johnson | 23222111 | | | 23747347 | | | 363

我的数据库中有这样一个表:

IdUser | Name | Surname | 
name | Surname| numbers  |
_____|________|__________|
John | Doe    | 21212121 |
     |        | 23424324 |
_____|________|__________|
Frank|Johnson | 23222111 |
     |        | 23747347 |
     |        | 36363636 |
_____|________|__________|
foreach($result as $row)
    echo '<tr><td>'.$row['name'].'</td><td>'.$row['surname'].'</td><td>'.implode(', ', $row['phonenumber'].'</td></tr>';
还有一张桌子,结构如下

IdPN | IdUser | PhoneNumber
此表的主键为
IdPN
,因此每个用户可以有多个电话号码

现在,我从第一个表中获取数据,用于在HTML页面中生成一个表。我想要这样的东西:

IdUser | Name | Surname | 
name | Surname| numbers  |
_____|________|__________|
John | Doe    | 21212121 |
     |        | 23424324 |
_____|________|__________|
Frank|Johnson | 23222111 |
     |        | 23747347 |
     |        | 36363636 |
_____|________|__________|
foreach($result as $row)
    echo '<tr><td>'.$row['name'].'</td><td>'.$row['surname'].'</td><td>'.implode(', ', $row['phonenumber'].'</td></tr>';
所以第三个柱可以有多个数字

当每个用户只有一个数字时,我使用的php代码如下:

<?php
      $connectiondb->set_charset("utf8");
      $query= "SELECT name, surname, phonenumber
      FROM users";
        if ($stmt = $connectiondb->prepare($query)) {
          $stmt->execute();

      $stmt-bind_result($nome,$cognome,$phonenumber);
            while($stmt->fetch()){
      echo '<tr>';
      echo '<td>'.$nome.'</td>';
      echo '<td>'.$cognome.'</td>';
      echo '<td>'.$phonenumber.'</td>';
      echo '</tr>';

}
$stmt->close();
?>

如何更改代码以显示表中每一行的多个号码(用户)?

$sql=“从PhoneNumber中选择PhoneNumber,其中IdUser=$user\u id”;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u assoc($result)){
echo$row['PhoneNumber']。“
\n”; }
该代码块可用于显示由换行符分隔的
$user\u id
的电话号码列表。只要定义了
$user\u id
,放置在电话号码区域的
标记内即可完成此操作。

$sql=“从电话号码中选择电话号码,其中IdUser=$user\u id”;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u assoc($result)){
echo$row['PhoneNumber']。“
\n”; }

该代码块可用于显示由换行符分隔的
$user\u id
的电话号码列表。只要定义了
$user\u id
,放置在电话号码区域的
标记内就可以了。

将SQL更改为包含
IdUser
列,如下所示:

选择users.IdUser,users.Name,users.姓氏,phones.PhoneNumber
来自用户
左键连接电话打开(users.IdUser=phones.IdUser);
然后,您可以使用PHP将手机排序为结构化数组,并从中开始:

$aUsers=array();
$aUserPhones=array();
while($row=mysql\u fetch\u assoc($result)){
如果(!isset($aUsers)){
$aUsers['UserId']=数组(
'nom'=>$nom,
“cognom”=>$cognom,
“电话”=>阵列($phone),
);
}
否则{
$aUsers[$userId]['phones'][]=$phone;
}
}
foreach($aUsers作为$aUser){
回声';
回显'.$aUser['nome'].'
回声'.$aUser['cognome'].';
回声';
回声内爆(“
”,$aUser['phones']); 回声'; 回声'; }
将SQL更改为包含
IdUser
列,如下所示:

选择users.IdUser,users.Name,users.姓氏,phones.PhoneNumber
来自用户
左键连接电话打开(users.IdUser=phones.IdUser);
然后,您可以使用PHP将手机排序为结构化数组,并从中开始:

$aUsers=array();
$aUserPhones=array();
while($row=mysql\u fetch\u assoc($result)){
如果(!isset($aUsers)){
$aUsers['UserId']=数组(
'nom'=>$nom,
“cognom”=>$cognom,
“电话”=>阵列($phone),
);
}
否则{
$aUsers[$userId]['phones'][]=$phone;
}
}
foreach($aUsers作为$aUser){
回声';
回显'.$aUser['nome'].'
回声'.$aUser['cognome'].';
回声';
回声内爆(“
”,$aUser['phones']); 回声'; 回声'; }
像执行查询一样执行查询

SELECT A.name, A.surname,GROUP_CONCAT(phonenumbers) as phone_number
FROM TABLE1 A 
JOIN TABLE2 B ON A.iduser = B.iduser
GROUP BY A.iduser
从这个查询中,您将得到以逗号分隔的电话号码

示例:(1123132123133)

使用“爆炸”进行拆分

$get_number = explode(" ", $number);
现在您将获得数组中的数字
$get\u number
。按获取数字的计数

$row_span = count($get_number); 
现在您将获得行跨度。使用foreach可以打印表中的数字。 所以你的td会像

<td rowspan="<?php echo $row_span; ?"> 
执行类似的查询

SELECT A.name, A.surname,GROUP_CONCAT(phonenumbers) as phone_number
FROM TABLE1 A 
JOIN TABLE2 B ON A.iduser = B.iduser
GROUP BY A.iduser
从这个查询中,您将得到以逗号分隔的电话号码

示例:(1123132123133)

使用“爆炸”进行拆分

$get_number = explode(" ", $number);
现在您将获得数组中的数字
$get\u number
。按获取数字的计数

$row_span = count($get_number); 
现在您将获得行跨度。使用foreach可以打印表中的数字。 所以你的td会像

<td rowspan="<?php echo $row_span; ?"> 

我建议使用
ID
而不是
名称

您的数据将以如下方式返回:

name | Surname| numbers  |
_____|________|__________|
John | Doe    | 21212121 |
John | Doe    | 23424324 |
John | Doe    | ######## |
-------------------------- 
编辑:重新阅读问题,注意到您的表格结构

查询将变成:

            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser 
<?php
      $connectiondb->set_charset("utf8");
      $query = "
            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser ";

      if ($stmt = $connectiondb->prepare($query)) 
      {
         $stmt->execute();  
         $stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);

         $row_ct = 0; 

         while($stmt->fetch())
         { 
            $row_ct++ 

            // do every row for every section
            echo '<tr>';

            // first row of this section 
            if ($row_ct==1)                    
            { 
               echo "<td rowspan=$phone_ct>".$nome.'</td>';
               echo "<td rowspan=$phone_ct>".$cognome.'</td>';
            }

            // do every row for every section
            echo '<td>'.$phonenumber.'</td>';    
            echo '</tr>';

            // end of this section 
            if ($row_ct==$phone_ct) {           
              $row_ct = 0; 
            }   
        }

        $stmt->close();

     }  // end if $stmt 
现在数据将变成:

name | Surname| numbers  | phone_ct
_____|________|__________|___________
John | Doe    | 21212121 |        3 |
John | Doe    | 23424324 |        3 | 
John | Doe    | ######## |        3 | 
-------------------------------------
编辑:更新代码,使其可能实际工作(lol…对不起)

代码将变成:

            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser 
<?php
      $connectiondb->set_charset("utf8");
      $query = "
            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser ";

      if ($stmt = $connectiondb->prepare($query)) 
      {
         $stmt->execute();  
         $stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);

         $row_ct = 0; 

         while($stmt->fetch())
         { 
            $row_ct++ 

            // do every row for every section
            echo '<tr>';

            // first row of this section 
            if ($row_ct==1)                    
            { 
               echo "<td rowspan=$phone_ct>".$nome.'</td>';
               echo "<td rowspan=$phone_ct>".$cognome.'</td>';
            }

            // do every row for every section
            echo '<td>'.$phonenumber.'</td>';    
            echo '</tr>';

            // end of this section 
            if ($row_ct==$phone_ct) {           
              $row_ct = 0; 
            }   
        }

        $stmt->close();

     }  // end if $stmt 

我建议使用
ID
而不是
名称

您的数据将以如下方式返回:

name | Surname| numbers  |
_____|________|__________|
John | Doe    | 21212121 |
John | Doe    | 23424324 |
John | Doe    | ######## |
-------------------------- 
编辑:重新阅读问题,注意到您的表格结构

查询将变成:

            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser 
<?php
      $connectiondb->set_charset("utf8");
      $query = "
            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser ";

      if ($stmt = $connectiondb->prepare($query)) 
      {
         $stmt->execute();  
         $stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);

         $row_ct = 0; 

         while($stmt->fetch())
         { 
            $row_ct++ 

            // do every row for every section
            echo '<tr>';

            // first row of this section 
            if ($row_ct==1)                    
            { 
               echo "<td rowspan=$phone_ct>".$nome.'</td>';
               echo "<td rowspan=$phone_ct>".$cognome.'</td>';
            }

            // do every row for every section
            echo '<td>'.$phonenumber.'</td>';    
            echo '</tr>';

            // end of this section 
            if ($row_ct==$phone_ct) {           
              $row_ct = 0; 
            }   
        }

        $stmt->close();

     }  // end if $stmt 
现在数据将变成:

name | Surname| numbers  | phone_ct
_____|________|__________|___________
John | Doe    | 21212121 |        3 |
John | Doe    | 23424324 |        3 | 
John | Doe    | ######## |        3 | 
-------------------------------------
编辑:更新代码,使其可能实际工作(lol…对不起)

代码将变成:

            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser 
<?php
      $connectiondb->set_charset("utf8");
      $query = "
            SELECT name, surname, phonenumber, phone_ct

            FROM   users as u 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join phone_numbers as ph
                      on ph.IdUser = u.IdUser 

                   join (select IdUser, 
                                count(IdPN) as phone_ct 
                         from phone_numbers
                         group by IdUser ) as ph_count   
                      on ph_count.IdUser = u.IdUser ";

      if ($stmt = $connectiondb->prepare($query)) 
      {
         $stmt->execute();  
         $stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);

         $row_ct = 0; 

         while($stmt->fetch())
         { 
            $row_ct++ 

            // do every row for every section
            echo '<tr>';

            // first row of this section 
            if ($row_ct==1)                    
            { 
               echo "<td rowspan=$phone_ct>".$nome.'</td>';
               echo "<td rowspan=$phone_ct>".$cognome.'</td>';
            }

            // do every row for every section
            echo '<td>'.$phonenumber.'</td>';    
            echo '</tr>';

            // end of this section 
            if ($row_ct==$phone_ct) {           
              $row_ct = 0; 
            }   
        }

        $stmt->close();

     }  // end if $stmt 

如果您有两个表

IdUser | Name | Surname  
IdPN | IdUser | PhoneNumber
我将使用第一个表作为“主”表,第二个表作为辅助表。IdUser将成为主表中的PK,但次表中的IdUser将成为主表中IdUser的外键(因为这两条信息是相同的,如果主表中没有相应的条目,您确实不应该向电话号码表添加对象。)您应该能够对两个表执行查询,以显示所需的信息(例如,可能是完全联接)。例如,

select a.IdUser, a.Name, b.Surname, b.IdPN, b.PhoneNumber from <primary table> as a, <secondary table> as b where a.IdUser=b.IdUser;
选择a.IdUser、a.姓名、b.姓氏、b.IdPN、b.电话号码,其中a.IdUser=b.IdUser;

这是一个示例,所以不要复制并粘贴它,但关键是如果两个表之间的关系是一致的,那么您应该能够执行单个查询来获取所需的所有内容。

如果您有两个表

IdUser | Name | Surname  
IdPN | IdUser | PhoneNumber
我将使用第一个表作为“主”表,第二个表作为辅助表。IdUser将成为主表中的PK,但辅助表中的IdUser将成为主表中IdUser的外键(因为这两条信息是相同的)