Looping problem?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Promextheus Xex

    Looping problem?

    First php post...

    Hi there,

    I'm writing some code for my website to list people listening to my music. I
    have a loop for an array that dosen't seem to display all people. most of
    the time it resuses to go past 11 even though there are more people. I've
    created a small loop just to list the IP addresses as a test, which works.

    ie:

    $loop = 0; //dummy loop
    variable
    while($loop != $currentlistene rs){ //while loop for listeners
    echo "$loop - $hostname[$loop]<br>";
    $loop++;
    }

    When I use the same loop again to get more detailed info, the $loop only
    counts from 0 to about 10 or sometimes more. It's never consistant. I never
    encountered this in any other language before. The $currentlistene rs is
    never altered during the loop execution. What I've done was echo $loop to
    see it's progress throughout the loop. This is so frustrating.

    EG:
    --------------------------------------------------------
    $loop = 0; //dummy loop variable
    while($loop != $currentlistene rs){ //while loop for listeners

    // Get the surfer's ip address
    $addr = $hostname[$loop];

    $ip = sprintf("%u", ip2long($addr)) ;

    // Load array with start ips
    $row = 1;
    while (($buffer = fgets($handle, 4096)) !== FALSE) {
    $array[$row] = substr($buffer, 1, strpos($buffer, ",") - 1);
    $row++;
    }

    // Locate the row with our ip using bisection
    $row_lower = '0';
    $row_upper = $row;
    while (($row_upper - $row_lower) 1) {
    $row_midpt = (int) (($row_upper + $row_lower) / 2);
    if ($ip >= $array[$row_midpt]) {
    $row_lower = $row_midpt;
    } else {
    $row_upper = $row_midpt;
    }
    }

    // Read the row with our ip
    rewind($handle) ;
    $row = 1;
    while ($row <= $row_lower) {
    $buffer = fgets($handle, 4096);
    $row++;
    }
    $buffer = str_replace("\" ", "", $buffer);
    $ipdata = explode(",", $buffer);

    echo "<td><font size=1><center> $loop <img
    src='../WhosBeenListeni ng/Flags/$ipdata[4].gif' width='18' height='12'>
    $ipdata[6] - $hostname[$loop]</td>";
    echo "<td><font size=1><center> $useragent[$loop]</td>";

    $sec = $connecttime[$loop];
    $hours = intval(intval($ sec) / 3600);
    $hms = str_pad($hours, 2, "0", STR_PAD_LEFT).' :';
    $minutes = intval(($sec / 60) % 60);
    $hms .= str_pad($minute s, 2, "0", STR_PAD_LEFT). ':'; // then add to $hms
    (with a leading 0 if needed)
    $seconds = intval($sec % 60); // seconds by 60 and keep the
    remainder
    $hms .= str_pad($second s, 2, "0", STR_PAD_LEFT); // add to $hms, again
    with a leading 0 if needed
    echo "<td><font size=1><center> $hms</td>";

    echo "<td><font size=1><center> $underruns[$loop]</td>";
    echo "</tr>";
    $loop++; //update loop variable
    }
    --------------------------------------------------------

    Is there something wrong with the $loop variable itself? It has not been
    declared (if I can use this term in PHP) in any way. I am using PHP 5 on my
    computer at this time. Here is the link for my site (xex.ca) that shows the
    scripting results. If there are more than 10 people listening to that one
    perticular stream then you will see the problem. If I get it working then I
    will use the same code for all the streams to get a total info page.
    http://74.113.12.208:29992/Xex/Radio...castdetail.php. I am altering
    and adding to code I found on the net.

    Any help is appriciated.

    - Prometheus Xex

    P.S. If this is the wrong group for this kind of help, then please redirect
    me to a more appropriate place.


  • rehevkor5

    #2
    Re: Looping problem?


    Promextheus Xex wrote:
    First php post...
    >
    Hi there,
    >
    I'm writing some code for my website to list people listening to my music. I
    have a loop for an array that dosen't seem to display all people. most of
    the time it resuses to go past 11 even though there are more people. I've
    created a small loop just to list the IP addresses as a test, which works.
    >
    ie:
    >
    $loop = 0; //dummy loop
    variable
    while($loop != $currentlistene rs){ //while loop for listeners
    echo "$loop - $hostname[$loop]<br>";
    $loop++;
    }
    >
    When I use the same loop again to get more detailed info, the $loop only
    counts from 0 to about 10 or sometimes more. It's never consistant. I never
    encountered this in any other language before. The $currentlistene rs is
    never altered during the loop execution. What I've done was echo $loop to
    see it's progress throughout the loop. This is so frustrating.
    >
    EG:
    --------------------------------------------------------
    $loop = 0; //dummy loop variable
    while($loop != $currentlistene rs){ //while loop for listeners
    >
    // Get the surfer's ip address
    $addr = $hostname[$loop];
    >
    $ip = sprintf("%u", ip2long($addr)) ;
    >
    // Load array with start ips
    $row = 1;
    while (($buffer = fgets($handle, 4096)) !== FALSE) {
    $array[$row] = substr($buffer, 1, strpos($buffer, ",") - 1);
    $row++;
    }
    >
    // Locate the row with our ip using bisection
    $row_lower = '0';
    $row_upper = $row;
    while (($row_upper - $row_lower) 1) {
    $row_midpt = (int) (($row_upper + $row_lower) / 2);
    if ($ip >= $array[$row_midpt]) {
    $row_lower = $row_midpt;
    } else {
    $row_upper = $row_midpt;
    }
    }
    >
    // Read the row with our ip
    rewind($handle) ;
    $row = 1;
    while ($row <= $row_lower) {
    $buffer = fgets($handle, 4096);
    $row++;
    }
    $buffer = str_replace("\" ", "", $buffer);
    $ipdata = explode(",", $buffer);
    >
    echo "<td><font size=1><center> $loop <img
    src='../WhosBeenListeni ng/Flags/$ipdata[4].gif' width='18' height='12'>
    $ipdata[6] - $hostname[$loop]</td>";
    echo "<td><font size=1><center> $useragent[$loop]</td>";
    >
    $sec = $connecttime[$loop];
    $hours = intval(intval($ sec) / 3600);
    $hms = str_pad($hours, 2, "0", STR_PAD_LEFT).' :';
    $minutes = intval(($sec / 60) % 60);
    $hms .= str_pad($minute s, 2, "0", STR_PAD_LEFT). ':'; // then add to $hms
    (with a leading 0 if needed)
    $seconds = intval($sec % 60); // seconds by 60 and keep the
    remainder
    $hms .= str_pad($second s, 2, "0", STR_PAD_LEFT); // add to $hms, again
    with a leading 0 if needed
    echo "<td><font size=1><center> $hms</td>";
    >
    echo "<td><font size=1><center> $underruns[$loop]</td>";
    echo "</tr>";
    $loop++; //update loop variable
    }
    --------------------------------------------------------
    >
    Is there something wrong with the $loop variable itself? It has not been
    declared (if I can use this term in PHP) in any way. I am using PHP 5 on my
    computer at this time. Here is the link for my site (xex.ca) that shows the
    scripting results. If there are more than 10 people listening to that one
    perticular stream then you will see the problem. If I get it working then I
    will use the same code for all the streams to get a total info page.
    http://74.113.12.208:29992/Xex/Radio...castdetail.php. I am altering
    and adding to code I found on the net.
    >
    Any help is appriciated.
    >
    - Prometheus Xex
    >
    P.S. If this is the wrong group for this kind of help, then please redirect
    me to a more appropriate place.

    In addition to printing out $loop in each iteration, you should also
    print out $currentlistene rs at the beginning to make sure it has the
    value you're expecting.

    One thing I think you should do no matter what is change your while()
    loop to a for() loop, like so:

    for($loop = 0; $loop < $currentlistene rs; $loop++)
    {
    }

    Comment

    Working...