Arrays in arrays, bijna goed maar niet helemaal

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

07/02/2020 13:13:39
Quote Anchor link
Beste forumleden,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
     }
?>



?>


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.
 
PHP hulp

PHP hulp

26/04/2024 22:06:25
 
Thomas van den Heuvel

Thomas van den Heuvel

07/02/2020 19:17:54
Quote Anchor link
Waarschijnlijk doe je er verstandig aan om output te escapen, in plaats van hier enkel nl2br() overheen te gooien.

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 :).
 
- Ariën  -
Beheerder

- Ariën -

07/02/2020 19:51:07
Quote Anchor link
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.


Nee, topics verwijderen we niet zomaar. Tenzij er een gegronde reden voor is. Het is en blijft namelijk naslagwerk voor anderen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.