2 resultaten weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

J C

J C

22/01/2016 04:12:49
Quote Anchor link
Ik heb een script gemaakt waarbij ik 2 resultaten uit een tabel wil weergeven.

Normaal zou ik dit met een while functie doen. Maar omdat class bij beide resultaten anders is, heb ik het op deze manier gedaan.

Nu is mijn vraag, of er een nettere/betere manier is om dit te doen:

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
$qry ='
    SELECT
        referenties.id,
        referenties.naam,
        referenties.tekst,
        referenties.beoordeling,
        referenties.medium,
        referenties.datum,
        referenties_medium.naam as mediumnaam,
        referenties_medium.link
    FROM
        referenties
            INNER JOIN
                referenties_medium
            ON
                referenties.medium = referenties_medium.id
    ORDER BY
        RAND()
    LIMIT
        1';
if(!$result = $connection->query($qry)) {
    echo 'Fout in query: '.$connection->error;
} else {
     $list = $result->fetch_assoc();        
$main .='                
                  <blockquote class="blockquote1 first wow fadeInUp" data-wow-duration="1s" data-wow-delay="0.1s">
                    <cite>'.$list['tekst'].'</cite>
                    <span class="author">'.$list['naam'].'</span>
                    <span class="date">'.$list['datum'].'</span>
                    <span class="star">'.$list['beoordeling'].'</span>
                    <a href="'.$list['link'].'" target "_blank">'.$list['mediumnaam'].'</a>
                  </blockquote>';
}
                  
$qry2 ='
    SELECT
        referenties.id,
        referenties.naam,
        referenties.tekst,
        referenties.beoordeling,
        referenties.medium,
        referenties.datum,
        referenties_medium.naam as mediumnaam,
        referenties_medium.link
    FROM
        referenties
            INNER JOIN
                referenties_medium
            ON
                referenties.medium = referenties_medium.id
    WHERE
        referenties.id != '.$list['id'].'
    ORDER BY
        RAND()
    LIMIT
        1';
if(!$result2 = $connection->query($qry2)) {
    echo 'Fout in query: '.$connection->error;
} else {
     $list2 = $result2->fetch_assoc();
$main .='    
                  <blockquote class="blockquote1 second wow fadeInUp" data-wow-duration="1s" data-wow-delay="0.2s">
                    <cite>'.$list2['tekst'].'</cite>
                    <span class="author">'.$list2['naam'].'</span>
                    <span class="date">'.$list2['datum'].'</span>
                    <span class="star">'.$list2['beoordeling'].'</span>
                    <a href="'.$list2['link'].'" target "_blank">'.$list2['mediumnaam'].'</a>
                  </blockquote>';
}
Gewijzigd op 22/01/2016 04:22:43 door J C
 
PHP hulp

PHP hulp

15/07/2024 19:34:16
 
Ward van der Put
Moderator

Ward van der Put

22/01/2016 07:29:00
Quote Anchor link
In plaats van 2 keer ORDER BY RAND() LIMIT 1 kun je toch 1 keer ORDER BY RAND() LIMIT 2 gebruiken?
 
Ben van Velzen

Ben van Velzen

22/01/2016 10:56:39
Quote Anchor link
En daarna gewoon tijdens het ophalen de class per iteratie van je loop veranderen, bijvoorbeeld met een modulo operatie.
 
J C

J C

22/01/2016 20:32:09
Quote Anchor link
Bedankt voor jullie reacties.

@ ward:
Dat kan inderdaad, ik kom alleen in de knoop met de blockquote, deze is bij beide weergave anders.

@Ben

Bedoel je dan zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
for($i = 0; $i < 2; $i++) {
        if($i == 1){
    $main .=' first';
        } elseif ($i == 2){
    $main .=' second';
        }
    }


Ik heb hier mee zitten stoeien maar kreeg het niet werkend, dus dacht het op deze manier niet kon.

edit: ik kreeg ineens een ingeving. Voor the while loop geef ik an:

$i = 0;
En dan in the while loop:
$i++

if($i==1){
...
} elseif ($i==2){
...
}

Weet niet of dit de meest handige manier is maar het werkt wel.
Gewijzigd op 22/01/2016 20:45:46 door J C
 
Ben van Velzen

Ben van Velzen

22/01/2016 21:37:09
Quote Anchor link
Correct. En als je meerdere resultaten hebt kun je iets doen als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$i
= 0;
while (...) {
  if ($i++ % 2 == 0) {
    $main .= ' first';
  }
else {
    $main .= ' second';
  }

  // hier je rij
}
?>
Gewijzigd op 22/01/2016 21:37:54 door Ben van Velzen
 
J C

J C

22/01/2016 22:49:21
Quote Anchor link
Dank je wel,

Kun je mee beetje helpen met de uitleg van de functie?

$i++ verhoogt $i elke keer met 1 als de functie langs komt
%2 2 keer uitvoeren of als $i gelijk is aan 2 dan $i is gelijk aan 0?
 
Ben van Velzen

Ben van Velzen

22/01/2016 23:14:58
Quote Anchor link
De $i++ % 2 doet het volgende:
Geef eerst de waarde van $i terug
Verhoog vervolgens $i
Wanneer $i gelijk is aan 2 wordt deze gelijk gemaakt aan 0, de modulo operatie. Zie http://php.net/manual/en/language.operators.arithmetic.php
Het eindresultaat hiervan is een interpolatie tussen de getallen 0 en 1.
Dit is ook te bereiken met iets als $i & 1. Een eenvoudige AND operatie.
 
J C

J C

23/01/2016 01:29:34
Quote Anchor link
Kijken of ik het nu goed begrepen heb.

Ik heb dit gemaakt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
  $i
=0;
    $stars = '<img src="'.$url.'images/star.png" alt="Star"/>';
     $totalstars ='';
     $count = $list['beoordeling'];
    for($i = 0; $i < $count; $i++) {
    $totalstars .= $stars;
    }

?>


Waarbij $list['beoordeling'] als waarde 5 heeft.

Het script werkt prima, maar wilde even kijken of mijn manier nu de juiste is.
Gewijzigd op 23/01/2016 01:30:13 door J C
 
Ben van Velzen

Ben van Velzen

23/01/2016 11:28:21
Quote Anchor link
Hier hoef je $i niet te initialiseren, dit doet de for loop al voor je. Ik zie ook niet helemaal hoe deze code zich verhoudt tot de eerdere vraag. Echter zou ik het zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$stars
= '<img src="'.$url.'images/star.png" alt="Star"/>';
$totalstars = str_repeat($stars, $list['beoordeling']);
?>
Gewijzigd op 23/01/2016 11:29:05 door Ben van Velzen
 



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.