rand() functie geeft teveel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert

Robert

08/10/2007 09:52:00
Quote Anchor link
Hey allemaal,

Ben bezig een functie te maken waarmee mijn PHP script bij iedere refresh een willekeurig getal uit een datafeed haalt (een rij) alleen wil het nog niet echt lukken. Dit is mijn PHP:

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
<?php

//  Open het csv bestand            
                 $fp = fopen ("http://www.m4n.nl/_df?m=public_stream_csv&sep=tab5&valq=value2&enq=enq1&dfid=5800&duid=9196","r");
                  
                      
                    $row=0;
                    
                    //START LOOP - Haalt data uit het csv bestand tussen rij 12 en 50
                    for($j = 0; $j < 50; $j++){
                                  
                    $data = fgetcsv ($fp, 1000, ",");
                    $num = count ($data);
                    
                    
                     //start op 3e regel, 1e twee zijn troep
                     $rij = rand(12,50);
                     if($row == $rij){
                     ?>




Wat nou het probleem is, is dat hij soms wel gewoon 1 getal pakt, maar soms pakt hij helemaal niks of dan pakt hij meerdere getallen (dus rijen) en krijg ik er zomaar 3 tegelijk. Wat doe ik precies fout? Ik wil gewoon dat hij 1 willekeurige rij tussen de 12 en de 50 pakt bij iedere refresh.
Als iemand mij kan helpen hoor ik het graag.
Alvast bedankt,

Robert
Gewijzigd op 01/01/1970 01:00:00 door Robert
 
PHP hulp

PHP hulp

25/11/2024 14:32:28
 
Gerben Jacobs

Gerben Jacobs

08/10/2007 10:30:00
Quote Anchor link
Ik denk dat we meer code moeten zien, dit is niet genoeg.

Maar zoals je ziet zit je rand functie in een for-loop, dus wellicht gaat er daar iets fout. Probeer te achterhalen of er een manier is dat je script meerdere malen door de loop gaat en output post.
 
Robert

Robert

08/10/2007 10:35:00
Quote Anchor link
Hierbij de complete code. Ik heb wat PHP openingen verwijderd hier omdat hij het anders allemaal apart zou tonen in aparte hokjes in dit bericht.

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
<?php

                                                                            
                                                                    //  Open het csv bestand            
                 $fp = fopen ("http://www.m4n.nl/_df?m=public_stream_csv&sep=tab5&valq=value2&enq=enq1&dfid=5800&duid=9196","r");
                  
                      
                    $row=0;
                    
                    //START LOOP - Haalt data uit het csv bestand tussen rij 12 en 50
                    for($j = 0; $j < 50; $j++){
                                  
                    $data = fgetcsv ($fp, 1000, ",");
                    $num = count ($data);
                    
                    
                     //start op 3e regel, 1e twee zijn troep
                     $rij = rand(12,50);
                     if($row == $rij){
                                                                      
                                                                           <
a id='hoteltoplink' href=" echo $data[0]; "></a>
                                                                          <
tr>
                                                                          <
td colspan="2" align="left" valign="top">
                                                                          <
span class="style13">
                                                                          [
code]<?php
                                                                             if(strlen($data[6])>20){
                                                                            $naam= substr($data[6],0,20).'...' </span>
                                                                            
                                                                            <
span class="style24">
                                                                            
                                                                            $naam=eregi_replace(" - ", "<br \>", $data[6]);}
                                                                            else {$naam=$data[6];}  
                                                                             echo $naam  
                                                                           </span></td>
                                                                        <
/tr>
                                                                        <
tr>
                                                                        
                                                                           <
td align="left" valign="top"><span class="style24">                                                                                                                                                                             echo $data[1]; </span></td>
                                                                          <
td align="right" valign="top" class="style8">
                                                                          <
span class=                                                                                                                                                          "style14">va.</span> <span class="style25 style42">
                                                                          [
code]<?php echo "€" . " " .
                                                                                $data[5]; }$row++; } ?>
</span></a>                                                                          </td>
                                                                        </tr>
                                                                      
<tr></tr>
                                                                    </table>
 
Bart van der veen

bart van der veen

08/10/2007 11:50:00
Quote Anchor link
dit werkt

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
<?php
$row
= 1;
$rand=rand(12,50);
echo$rand.'<HR>';
$fp = fopen ("http://www.m4n.nl/_df?m=public_stream_csv&sep=tab5&valq=value2&enq=enq1&dfid=5800&duid=9196","r");
while ($data = fgetcsv ($fp, 1000, ",")) {
    $num = count ($data);
    $row++;
    for ($c=0; $c < $num; $c++) {
        if($row==$rand){
            print $data[$c] . "<br>\n";
        }    
        
    }
}

fclose ($fp);
?>


verschil met jou script, de while loop.
 
Robert

Robert

08/10/2007 12:29:00
Quote Anchor link
Sorry ik ben nogal een noob :P

Ik heb je functie in mn script gezet:

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
<?php

                                                                            
                                                                    //  Open het csv bestand            
                
                  
                      
                    $row = 1;
                    $rand=rand(12,50);
                    $fp = fopen ("http://www.m4n.nl/_df?m=public_stream_csv&sep=tab5&valq=value2&enq=enq1&dfid=5800&duid=9196","r");
                    while ($data = fgetcsv ($fp, 1000, ",")) {
                    $num = count ($data);
                    $row++;
                    for ($c=0; $c < $num; $c++) {
                        if($row==$rand){

<
a id='hoteltoplink' href=" echo $data[0]; "></a>
                                                                          <
tr>
                                                                          <
td colspan="2" align="left" valign="top">
                                                                          <
span class="style13">
                                                                          [
code]<?php
                                                                             if(strlen($data[6])>20){
                                                                            $naam= substr($data[6],0,20).'...' </span>
                                                                            
                                                                            <
span class="style24">
                                                                            
                                                                            $naam=eregi_replace(" - ", "<br \>", $data[6]);}
                                                                            else {$naam=$data[6];}  
                                                                             echo $naam  
                                                                           </span></td>
                                                                        <
/tr>
                                                                        <
tr>
                                                                        
                                                                           <
td align="left" valign="top"><span class="style24">                                                                                                                                                                             echo $data[1]; </span></td>
                                                                          <
td align="right" valign="top" class="style8">
                                                                          <
span class=                                                                                                                                                          "style14">va.</span> <span class="style25 style42">
                                                                          [
code]<?php echo "€" . " " .
                                                                                $data[5]; }$row++;}
fclose ($fp);
 ?>



Alleen het probleem is dat hij hem nu 8 keer laat zien en soms nog steeds niks. Maar hij laat in ieder geval wel 8 keer dezelfde data zien dus dat is een stap in de goeie richting.

Ik heb je functie op een lege PHP pagina getest en daar deed hij het inderdaad probleemloos. Nu moet ik het alleen nog zien toe te passen met de rest van mijn script waarin hij specifieke punten eruit pakt. Ik hoop dat iemand het antwoord weet.

Robert
Gewijzigd op 01/01/1970 01:00:00 door Robert
 
Gerben Jacobs

Gerben Jacobs

08/10/2007 12:56:00
Quote Anchor link
Je hebt een while en een for in één, weet je zeker dat dat de bedoeling is?
 
Robert

Robert

08/10/2007 13:00:00
Quote Anchor link
Geen idee :P heb ook maar de gegeven functie overgenomen
 
Gerben Jacobs

Gerben Jacobs

08/10/2007 13:03:00
Quote Anchor link
Maar die while gaat door alle rijen heen en als er dan iets gevonden is doet ie het net zo lang als dat jouw for-loopje loopt. Dit kan dus heel goed zijn waarom jouw data 8 keer getoond wordt.
 
Bart van der veen

bart van der veen

08/10/2007 13:28:00
Quote Anchor link
dat hij hem 8 keer laat zien is idd precies waat je om vraagt. je moet die for loop eruit halen

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
<?php
$row
= 1;
$rand=rand(12,50);
$fp = fopen ("http://www.m4n.nl/_df?m=public_stream_csv&sep=tab5&valq=value2&enq=enq1&dfid=5800&duid=9196","r");
while ($data = fgetcsv ($fp, 1000, ",")) {
    $num = count ($data);
    $row++;
    if($row==$rand){
        echo'
        <div style="width:300px;border:3px solid #CCC;padding:4px;">
        <h3 style="margin:0px;">'
.$data[1].'</h3>
        <h4  style="margin:0px;"> &euro; '
.$data[5].' p/p/p/n </h4>
        <p><img src="'
.$data[4].'" alt="'.$data[1].'" style="float:left;margin:0px 7px 3px 0px;text-align: justify;">
        '
.$data[2].'<br><br>
        <a href="'
.$data[0].'" title="'.$data[1].'">Meer informatie.</a>
        </p>
        
        '
;
    }    

}

fclose ($fp);
?>
 
Robert

Robert

08/10/2007 13:50:00
Quote Anchor link
gelukt :D bedankt!
 
Jacco Engel

Jacco Engel

08/10/2007 13:50:00
Quote Anchor link
Waar mag de rekening naartoe?
 
Robert

Robert

08/10/2007 13:51:00
Quote Anchor link
ik betaal wel in natura o.o
 
Jacco Engel

Jacco Engel

08/10/2007 13:56:00
Quote Anchor link
okey, dan graag 3 kratten bier opsturen.
 



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.