Problema DB di testo

Ciao a tutti, ho un problema, ho un db .txt formato da diverse riche del tipo: id|nome pagina|nome foto|

Voglio scegliere random alcune foto ecco il codice della pagina "caso.php" a cui passo una variabile ?perpag=x

Ilproblema è che ad esempio con ?perpag=10 mi visualizza 8, 9 e solo a volte 10 foto, ecco il codice:

<?php

function randiff($min, $max, $num) {

if ($min<$max && $max-$min+1 >= $num && $num>0) {

$random_nums = array();

$i=0;

while($i<$num) {

$rand_num = rand($min, $max);

if (!in_array($rand_num, $random_nums)) {

$random_nums[] = $rand_num;

$i++;

}

}

return $random_nums;

} else {

return false;

}

}

$perpagina= $_GET['perpag'];

$f = file("video.txt");

$c = count($f)-2;

if ($perpagina > $c)

{

$perpagina = $c;

}

echo $perpagina;

echo "<br><br><br><br>";

$per = $perpagina;

$nums = randiff(1, $c, $per);

$hbd=0;

$ii=0;

$textfile = fopen("video.txt", "r");

?>

<table width="130" border="0" align="center" cellpadding="0" cellspacing="2">

<?php

while ($rigafile = fgets($textfile))

{

$ii++;

$sab=0;

if (in_array($ii, $nums))

{

echo "<tr>";

$riga = explode("|", $rigafile);

$cartelpag= 'video/';

$link=$riga[0];

$link.='_';

$link.=$riga[1];

$link.='.php';

$link = str_replace ( ' ', '_' , $link );

?>

<td><div align="center"> <a href="<?php echo $cartelpag.$link; ?>" target="_blank"><img class="foto" src="<?php echo $riga[4]; ?>" width="56" height="56" border="0"></a></div></td>

<?php

$ii++;

while ($rigafile = fgets($textfile) and $sab==0 )

{

if (in_array($ii, $nums))

{

$riga = explode("|", $rigafile);

$cartelpag= 'video/';

$link=$riga[0];

$link.='_';

$link.=$riga[1];

$link.='.php';

$link = str_replace ( ' ', '_' , $link );

?>

<td><div align="center"> <a href="<?php echo $cartelpag.$link; ?>" target="_blank"><img class="foto" src="<?php echo $riga[4]; ?>" width="56" height="56" border="0"></a></div></td>

<?php

echo "</tr>";

$sab=1;

}else{

$ii++;

}

}

}

}

?>

</table>

inviato 9 anni fa
ludoplus
X 0 X

inizia col verificare se il problema è nella funzione randiff: dopo la riga $nums = randiff(1, $c, $per); metti un echo count($nums) e verifica se effettivamente sono stati generati 10 numeri casuali.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

confermo subito che l'array con i numeri casuali è corretto, è corretta anche $perpagina

risposto 9 anni fa
ludoplus
X 0 X

hai anche verificato che i numeri che genera puntano correttamente a delle particolari righe del file di testo?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

se imposto come $perpagina=6 funziona correttamente, se lo imposto come 10 me ne visualizza a volte 10, a volte 9, a volte 8... è questo che non capisco... nel Db ci sono 100 righe tutte perfettamente funzionanti...

risposto 9 anni fa
ludoplus
X 0 X

Prova a fare questa "strana" modifica e dimmi se ha effetto.

Sostituisci:

while ($rigafile = fgets($textfile) and $sab==0 )

con

while ($sab==0 and $rigafile = fgets($textfile))

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Confermo che la modifica suggerita funziona, avevo provvisoriamente risolto con:

<table  width="120" border="0" align="center" cellpadding="0" cellspacing="0">

<tr><td>

             <?php

              while ($m<$perpagina/2)

                {

                 $rigafile = fgets($textfile);

                 if (in_array($ii, $nums))

                  {

                     $riga = explode("|", $rigafile);

                     $cartelpag= 'video/';

                     $link=$riga[0];

                     $link.='_';

                     $link.=$riga[1];

                     $link.='.php';

                     $link = str_replace ( ' ', '_' , $link );

                     ?>

                    <div align="center"> <a href="<?php echo $cartelpag.$link; ?>" target="_blank"><img class="foto" src="<?php echo $riga[4]; ?>" width="56" height="56" border="0"></a></div>

                    <?php

                    $m++;

                    $ii++;

                  }else{

                    $ii++;

                  }

                } 

             ?>

      </td><td>   

              <?php

               while ($rigafile = fgets($textfile))

                 {

                   if (in_array($ii, $nums))

                   {

                     $riga = explode("|", $rigafile);

                     $cartelpag= 'video/';

                     $link=$riga[0];

                     $link.='_';

                     $link.=$riga[1];

                     $link.='.php';

                     $link = str_replace ( ' ', '_' , $link );

                     ?>

                    <div align="center"> <a href="<?php echo $cartelpag.$link; ?>" target="_blank"><img class="foto" src="<?php echo $riga[4]; ?>" width="56" height="56" border="0"></a></div>

                    <?php

                    $ii++;

                  }else{

                    $ii++;

                  }

                } 

              ?>

</td> </tr>

</table>

Anche se il primo codice mi sembra più bello :)

Ne approfitto dela vostra gentilezza per farmi un'altra domanda, ma apro un nuovo topic...

Grazie

Ludo

risposto 9 anni fa
ludoplus
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda