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