Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 循环通过两个while数组_Php_Loops - Fatal编程技术网

Php 循环通过两个while数组

Php 循环通过两个while数组,php,loops,Php,Loops,我正在为一个社交网站制作这个带有like按钮和count的帖子系统 我的最终目标是将这两组结果循环在一起。这样,当单个帖子循环时,like计数也会随之变化。帖子和喜欢的东西都是按顺序排列的。所有内容都匹配,但我无法在获取结果以循环时获取这些内容 后循环 <table class="postborder"> <?php $query1 = "SELECT * FROM tbl_images ORDER BY id DESC";

我正在为一个社交网站制作这个带有like按钮和count的帖子系统

我的最终目标是将这两组结果循环在一起。这样,当单个帖子循环时,like计数也会随之变化。帖子和喜欢的东西都是按顺序排列的。所有内容都匹配,但我无法在获取结果以循环时获取这些内容

后循环

<table class="postborder">                  
  <?php
  $query1 = "SELECT * FROM tbl_images ORDER BY id DESC"; 

  $result = mysqli_query($connect, $query1);  
  while($row = mysqli_fetch_array($result)) { 
  ?>
  <div id="newpost">  
    <tr>
      <td id="userpost"><?php echo $row['username']; ?> </td>
    </tr>
    <tr>
      <td>
      <hr id="hrline">
      <img id="newimgpost" src="data:image/jpeg;base64,<?php echo base64_encode($row['name']); ?>" height="500" width="500" class="img-thumnail" />  
      </td>
    <tr>
      <td id="textpost">
      <?php echo $row['textpost']; ?>   
      </td>
    </tr>
    <tr>
      <td id="likebutton">
      <?php }  ?>
    </div>
</table>  


“height=“500”width=“500”class=“img thumnail”/>
类计数循环

<?php  
 //index.php  
 //session_start();  
 //SESSION['userid'] = (int)3;  
 $connect = mysqli_connect("localhost", "root", "", "snazzer");  
 $query2 = "  
      SELECT tbl_images.id, tbl_images.textpost,  
      COUNT(likes.id) as likes,  
      GROUP_CONCAT(users.name separator '|') as liked  
      FROM  
      tbl_images  
      LEFT JOIN likes  
      ON likes.postid = tbl_images.id  
      LEFT JOIN users  
      ON likes.userid = users.userid  
      GROUP BY tbl_images.id  
      ORDER BY id DESC
 ";  
 $result2 = mysqli_query($connect, $query2); 
 if (!$result2) {
    printf("Error: %s\n", mysqli_error($connect));
    exit();
} 
 while($row = mysqli_fetch_array($result2))  
 {  
      echo '<h3>'.$row["textpost"].'</h3>';  
      echo '  
      <a href="profile.php?type=postid&id='.$row["id"].'">LIKE</a>';
      echo '<p>'.$row["likes"].' People like this</p>';  
      if(count($row["liked"]))  
      {  
           $liked = explode("|", $row["liked"]);  
           echo '<ul>';  
           foreach($liked as $like)  
           {  
                echo '<li>'.$like.'</li>';  
           }  
           echo '</ul>';  
      }  
 }  
 if(isset($_GET["type"], $_GET["id"]))  
 {  
      $type = $_GET["type"];  
      $id = (int)$_GET["id"];  
      if($type == "postid")  
      {  
           $query = "  
           INSERT INTO likes (userid, postid)  
           SELECT {$_SESSION['userid']}, {$id} FROM tbl_images   
                WHERE EXISTS(  
                     SELECT id FROM tbl_images WHERE id = {$id}) AND  
                     NOT EXISTS(  
                          SELECT id FROM likes WHERE userid = {$_SESSION['userid']} AND postid = {$id})  
                          LIMIT 1  
           ";  
           mysqli_query($connect, $query);  
           header("location:profile.php");  
      }  
 }  
 ?>

我相信您可以同时运行两个查询。这相当简单;只需用分号分隔每个查询:

$query = "SELECT * FROM tbl_images ORDER BY id DESC;
          SELECT tbl_images.id, tbl_images.textpost, COUNT(likes.id) as likes, GROUP_CONCAT(users.name separator '|') as liked FROM tbl_images LEFT JOIN likes ON likes.postid = tbl_images.id LEFT JOIN users ON likes.userid = users.userid GROUP BY tbl_images.id ORDER BY id DESC";
或者通过增加值来分隔变量,您可以阅读解释变量的文档

然后像平常一样运行代码,只是将
mysqli\u查询
更改为
mysqli\u多查询

$result = mysqli_multi_query( $connect, $query );
while($row = mysqli_fetch_array( $result )) {
    //... code your table here ...//
}
您还可以使用运行良好的面向对象方法:

$result = $connect->multi_query( $query );
当然,这两种方法都可以正常工作。请记住,您可能容易受到使用
mysqli\u multi\u query
的SQL注入的攻击。这是PHP的官方警告:

安全考虑

API函数mysqli_query()和mysqli_real_query()未设置激活服务器中多个查询所需的连接标志。多个语句使用额外的API调用,以降低意外SQL注入攻击的可能性。攻击者可能会尝试添加语句,如;删除数据库mysql或;选择睡眠(999)。如果攻击者成功将SQL添加到语句字符串中,但未使用mysqli_multi_查询,则服务器将不会执行第二条注入的恶意SQL语句


考虑 您可以将while循环中的两个结果保存在一个数组中,并在
foreach
循环中运行它们,或者将它们作为
$array['key']
单独输出。这将是查询的一个简单解决方法:

<?php 

// first query
$query1 = "SELECT * FROM tbl_images ORDER BY id DESC"; 

$result = mysqli_query($connect, $query1);  
while($row = mysqli_fetch_array($result)) { 
    $array1[] = $row;
}

// second query
$query2 = "  
  SELECT tbl_images.id, tbl_images.textpost,  
  COUNT(likes.id) as likes,  
  GROUP_CONCAT(users.name separator '|') as liked  
  FROM  
  tbl_images  
  LEFT JOIN likes  
  ON likes.postid = tbl_images.id  
  LEFT JOIN users  
  ON likes.userid = users.userid  
  GROUP BY tbl_images.id  
  ORDER BY id DESC
";  
$result2 = mysqli_query($connect, $query2); 
while($row = mysqli_fetch_array($result2)) { 
    $array2[] = $row;
}
<?php 

// first query
$query1 = "SELECT * FROM tbl_images ORDER BY id DESC"; 

$result = mysqli_query($connect, $query1);  
while($row = mysqli_fetch_array($result)) { 
    $array1[] = $row;
}

// second query
$query2 = "  
  SELECT tbl_images.id, tbl_images.textpost,  
  COUNT(likes.id) as likes,  
  GROUP_CONCAT(users.name separator '|') as liked  
  FROM  
  tbl_images  
  LEFT JOIN likes  
  ON likes.postid = tbl_images.id  
  LEFT JOIN users  
  ON likes.userid = users.userid  
  GROUP BY tbl_images.id  
  ORDER BY id DESC
";  
$result2 = mysqli_query($connect, $query2); 
while($row = mysqli_fetch_array($result2)) { 
    $array2[] = $row;
}
print_r( $array1 );
echo '<br />';
print_r( $array2 );