Arrays in arrays, bijna goed maar niet helemaal
Ben bezig met een groot project en loop nu voor het eerst tegen iets aan waar ik echt even jullie hulp voor kan gebruiken waarschijnlijk is het een easy fix maar ik kom er na 2 uur klooien niet uit, code is wat lang:
Situatie:
Ik weergeef reviews wat prima gaat zonder de reacties op deze reviews maar als ik de reacties op de review erbij wilt zetten gaat het mis, 1 review met 1 reactie gaat ook nog goed maar als er 2 reacties zijn gaat die bij de laatste review mis, dan print die alles reacties en niet alleen die bij de review hoort dus ergens staat iets niet goed. Daar komt die:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
$q = 'SELECT * FROM reviews WHERE domain_id = '.$domainId.' and status = 1';
$result = $database->query($q);
while ($rows = mysqli_fetch_assoc($result))
{
$qr = 'SELECT * FROM reviews_replies WHERE review_id = "'.$rows['id'].'" ';
$resultr = $database->query($qr);
$counter = 0;
while ($rowsr = mysqli_fetch_assoc($resultr))
{
$remainder = $counter % 2;
if ($remainder == 0)
{
// client reaction
$name = "Reply from ".getCurrentDomainNameByDomainId($rows['domain_id']);
$class = "g-bg-secondary";
}
else
{
// reviewer reaction
$name = 'Reply from '.getReviewerDisplayNameByReviewerId($rowsr['reviewer_id']).'';
$class = "g-brd-gray-light-v4";
}
$totalReplies = mysqli_num_rows($resultr);
if ($totalReplies != 0)
{
$repliesButton = '<li class="list-inline-item g-mr-20">
<a id="showrepliesbutton'.$rowsr['review_id'].'" class="u-link-v5 g-color-gray-dark-v4 g-color-primary--hover" data-toggle="collapse" href="#reviewsreplycontainer'.$rowsr['review_id'].'" role="button" aria-expanded="false" aria-controls="reviewsreplycontainer'.$rowsr['review_id'].'">
<i class="icon-communication-057 g-pos-rel g-top-1 g-mr-3"></i>
Replies('.$totalReplies.')
</a>
</li>';
$divider = "<hr>";
}
$replies[] = '<div class="media g-mb-30">
<div class="media-body g-brd-around '.$class.' g-pa-30">
<div class="g-mb-15">
<h5 class="h5 g-color-gray-dark-v1 mb-0">'.$name.'</h5>
<span class="g-color-gray-dark-v4 g-font-size-12">'.convertDatetimeToSexyDate($rowsr['created_at']).'</span>
</div>
<hr>
<p>'.nl2br($rowsr['message']).'</p>
</div>
</div>';
$counter++;
}
$reviews[] = '
<div class="media g-brd-around g-brd-gray-light-v4 g-pa-30 g-mb-20">
<div class="media-body">
<img class="d-flex g-width-50 pull-left g-height-50 rounded-circle g-mt-3 g-mr-15" src="https://'.getReferralDomain()."/".getReviewerLogoPathByID($rows['reviewer_id']).'" alt="'.getReviewerFirstnameById($rows['reviewer_id']).' '.getReviewerLastnameById($rows['reviewer_id']).' ">
<div class="g-mb-15">
<h5 class="d-flex justify-content-between align-items-center h5 g-color-gray-dark-v1 mb-0">
<span class="d-block g-mr-10"><span class="flag-icon flag-icon-'.getReviewerCountryCode($rows['reviewer_id']).'"></span> '.getReviewerDisplayNameByReviewerId($rows['reviewer_id']).'</span>
<span class="u-tags-v1 g-font-size-12 g-brd-around g-brd-gray-light-v4 g-bg-primary--hover g-brd-primary--hover g-color-black-opacity-0_8 g-color-white--hover rounded g-py-6 g-px-15">'.round($reviewStarScore).'/10</span>
</h5>
<span class="g-color-gray-dark-v4 g-font-size-12"><i class="fa fa-comment-o"></i> Wrote '.getTotalReviewsByReviewerId($rows['reviewer_id']).' review(s) '.$verifiedOrder.' </span>
</div>
<hr style="margin-bottom:15px; margin-top:15px;">
<div class="stars-container">
'.$stars.'
<span class="g-color-gray-dark-v4 g-font-size-12 pull-right d-flex justify-content-between align-items-center h5 g-color-gray-dark-v1 mb-0">'.convertDatetimeToSexyDate($rows['created_at']).'</span>
</div>
<br/>
<h3>'.$reviewTitle.'</h3>
<p>'.nl2br($reviewDescription).'</p>
<hr>
<ul class="list-inline d-sm-flex my-0">
'.$repliesButton.'
<li class="list-inline-item ml-auto">
<div class="addthis_toolbox addthis_default_style" addthis:url="THE URL" addthis:title="THE TITLE" addthis:description="THE DESCRIPTION" addthis:media="THE IMAGE">
<a class="u-link-v5 g-color-gray-dark-v4 g-color-primary--hover" href="#!">
<i class="icon-flag g-pos-rel g-top-1 g-mr-3"></i>
Report
</a>
</li>
</ul>
'.$divider.'<div class="collapse" id="reviewsreplycontainer'.$rows['id'].'">';
foreach ($replies as $reply)
{
$reviews[] .= $reply;
}
$reviews[] .= '
</div>
</div>
</div>';
}
}
// Aan voorkant doe ik dan:
[code]<?php foreach ($reviews as $review)
{
echo $review;
}?>
?>
$q = 'SELECT * FROM reviews WHERE domain_id = '.$domainId.' and status = 1';
$result = $database->query($q);
while ($rows = mysqli_fetch_assoc($result))
{
$qr = 'SELECT * FROM reviews_replies WHERE review_id = "'.$rows['id'].'" ';
$resultr = $database->query($qr);
$counter = 0;
while ($rowsr = mysqli_fetch_assoc($resultr))
{
$remainder = $counter % 2;
if ($remainder == 0)
{
// client reaction
$name = "Reply from ".getCurrentDomainNameByDomainId($rows['domain_id']);
$class = "g-bg-secondary";
}
else
{
// reviewer reaction
$name = 'Reply from '.getReviewerDisplayNameByReviewerId($rowsr['reviewer_id']).'';
$class = "g-brd-gray-light-v4";
}
$totalReplies = mysqli_num_rows($resultr);
if ($totalReplies != 0)
{
$repliesButton = '<li class="list-inline-item g-mr-20">
<a id="showrepliesbutton'.$rowsr['review_id'].'" class="u-link-v5 g-color-gray-dark-v4 g-color-primary--hover" data-toggle="collapse" href="#reviewsreplycontainer'.$rowsr['review_id'].'" role="button" aria-expanded="false" aria-controls="reviewsreplycontainer'.$rowsr['review_id'].'">
<i class="icon-communication-057 g-pos-rel g-top-1 g-mr-3"></i>
Replies('.$totalReplies.')
</a>
</li>';
$divider = "<hr>";
}
$replies[] = '<div class="media g-mb-30">
<div class="media-body g-brd-around '.$class.' g-pa-30">
<div class="g-mb-15">
<h5 class="h5 g-color-gray-dark-v1 mb-0">'.$name.'</h5>
<span class="g-color-gray-dark-v4 g-font-size-12">'.convertDatetimeToSexyDate($rowsr['created_at']).'</span>
</div>
<hr>
<p>'.nl2br($rowsr['message']).'</p>
</div>
</div>';
$counter++;
}
$reviews[] = '
<div class="media g-brd-around g-brd-gray-light-v4 g-pa-30 g-mb-20">
<div class="media-body">
<img class="d-flex g-width-50 pull-left g-height-50 rounded-circle g-mt-3 g-mr-15" src="https://'.getReferralDomain()."/".getReviewerLogoPathByID($rows['reviewer_id']).'" alt="'.getReviewerFirstnameById($rows['reviewer_id']).' '.getReviewerLastnameById($rows['reviewer_id']).' ">
<div class="g-mb-15">
<h5 class="d-flex justify-content-between align-items-center h5 g-color-gray-dark-v1 mb-0">
<span class="d-block g-mr-10"><span class="flag-icon flag-icon-'.getReviewerCountryCode($rows['reviewer_id']).'"></span> '.getReviewerDisplayNameByReviewerId($rows['reviewer_id']).'</span>
<span class="u-tags-v1 g-font-size-12 g-brd-around g-brd-gray-light-v4 g-bg-primary--hover g-brd-primary--hover g-color-black-opacity-0_8 g-color-white--hover rounded g-py-6 g-px-15">'.round($reviewStarScore).'/10</span>
</h5>
<span class="g-color-gray-dark-v4 g-font-size-12"><i class="fa fa-comment-o"></i> Wrote '.getTotalReviewsByReviewerId($rows['reviewer_id']).' review(s) '.$verifiedOrder.' </span>
</div>
<hr style="margin-bottom:15px; margin-top:15px;">
<div class="stars-container">
'.$stars.'
<span class="g-color-gray-dark-v4 g-font-size-12 pull-right d-flex justify-content-between align-items-center h5 g-color-gray-dark-v1 mb-0">'.convertDatetimeToSexyDate($rows['created_at']).'</span>
</div>
<br/>
<h3>'.$reviewTitle.'</h3>
<p>'.nl2br($reviewDescription).'</p>
<hr>
<ul class="list-inline d-sm-flex my-0">
'.$repliesButton.'
<li class="list-inline-item ml-auto">
<div class="addthis_toolbox addthis_default_style" addthis:url="THE URL" addthis:title="THE TITLE" addthis:description="THE DESCRIPTION" addthis:media="THE IMAGE">
<a class="u-link-v5 g-color-gray-dark-v4 g-color-primary--hover" href="#!">
<i class="icon-flag g-pos-rel g-top-1 g-mr-3"></i>
Report
</a>
</li>
</ul>
'.$divider.'<div class="collapse" id="reviewsreplycontainer'.$rows['id'].'">';
foreach ($replies as $reply)
{
$reviews[] .= $reply;
}
$reviews[] .= '
</div>
</div>
</div>';
}
}
// Aan voorkant doe ik dan:
[code]<?php foreach ($reviews as $review)
{
echo $review;
}?>
?>
Toevoeging op 07/02/2020 13:58:58:
Inmiddels opgelost middels niet gebruiken van arrays maar gewoon echo aan de voorkant. Topic mag verwijderd worden.
Anders zou een commentschrijver mogelijk m.b.v. JavaScript gegevens van andere gebruikers kunnen stelen.
Het wordt natuurlijk helemaal makkelijk wanneer de site al een library zoals jQuery gebruikt, die wordt dan al automatisch ingeladen :).
Furio Scripting op 07/02/2020 13:13:39:
Inmiddels opgelost middels niet gebruiken van arrays maar gewoon echo aan de voorkant. Topic mag verwijderd worden.
Inmiddels opgelost middels niet gebruiken van arrays maar gewoon echo aan de voorkant. Topic mag verwijderd worden.
Nee, topics verwijderen we niet zomaar. Tenzij er een gegronde reden voor is. Het is en blijft namelijk naslagwerk voor anderen.