jakebur01 Posted April 7, 2009 Share Posted April 7, 2009 I am having trouble putting this together. I have tried a few things, but I have not been able to figure it out. 1. I am trying to run 25 rows. 2. Pass where I am at to the next page using $_GET and run the next set of 25 rows. 3. and continue until finished <?php if (isset($_GET['limit_start'])) { $limit_start=$_GET['limit_start']; $limit_end=$_GET['limit_end']; } ini_set('max_execution_time', '999'); // example of how to use basic selector to retrieve HTML contents include('simple_html_dom.php'); $source_file = "C:/Inetpub/Websites/edit.com/echo.txt"; $fp= fopen("$source_file", "a"); $other="\n"; $db = mysql_connect('localhost', 'xx', 'xx') or die(mysql_error()); mysql_select_db('xx') or die(mysql_error()); $total_rows = mysql_num_rows(mysql_query("SELECT * FROM zip_code where `state_prefix` = 'OK'", $db)); $rows_per_loop = 25; $total_loops = ceil($total_rows/$rows_per_loop); // run the loop, while loop counter is less than the total number of loops: for($s=0; $s<$total_loops; $s++) { // get the numbers for the limit, // start is just the current loop number multiplied by the rows per loop // and end is loop counter + 1, multiplied by the rows per loop $limit_start = $rows_per_loop*$s; $limit_end = $rows_per_loop*($s+1); $result = mysql_query("SELECT * FROM zip_code where `state_prefix` = 'OK' LIMIT $limit_start, $limit_end") or die(mysql_error()); while($myrow = mysql_fetch_array ($result)) { $zip=$myrow['zip_code']; // get DOM from URL or file $html=file_get_html("http://www.mysite.com/selector.php?transaction=search&template=map_search&search1=0&pwidth=400&pheight=700&proxIconId=400&proxIcons=1&search2=0&search3=1&country=US&searchQuantifier=AND&address=&city=&stateProvince=+&postalCode=$zip&radius=500&x=78&y=16"); $i = 0; $tmp = $html->find('span[class=mqEmp], span[class=Black11]'); $cnt = count($tmp) - 1; foreach($tmp as $e) { if($i > 0 && $i < $cnt){ $outputstring=$e->plaintext; $outputstring=$outputstring. "\t"; fwrite($fp, $outputstring, strlen($outputstring)); if ($i % 8 == 0) { fwrite($fp, $other, strlen($other)); } } $i++; } } // now that we've run those, let's clear the results so that we don't run out of memory. mysql_free_result($result); // show where we are at echo $limit_start,' - ',$limit_end,'<br />'; sleep(1); // give PHP a little nap to keep from overloading server ob_flush(); // as recommended by MadTechie, in case we go beyond the max execution time flush(); // add flush, to make sure it is outputted header( "location:http://www.edit.com/selector.php?limit_start=$limit_start&limit_end=$limit_end" ); } fclose($fp); ?> Link to comment https://forums.phpfreaks.com/topic/153008-solved-passing-where-i-am-at-to-a-new-page/ Share on other sites More sharing options...
Fruct0se Posted April 7, 2009 Share Posted April 7, 2009 I did this quick so hopefully all is good, see if this works for you. <?php if ($_GET['limit_end') { $limit_end=$_GET['limit_end']; } ini_set('max_execution_time', '999'); // example of how to use basic selector to retrieve HTML contents include('simple_html_dom.php'); $source_file = "C:/Inetpub/Websites/edit.com/echo.txt"; $fp= fopen("$source_file", "a"); $other="\n"; $db = mysql_connect('localhost', 'xx', 'xx') or die(mysql_error()); mysql_select_db('xx') or die(mysql_error()); $total_rows = mysql_num_rows(mysql_query("SELECT * FROM zip_code where `state_prefix` = 'OK'", $db)); $rows_per_loop = 25; // run the loop, while loop counter is less than the total number of loops: while ($s!=$rows_per_loop) { $s++; // get the numbers for the limit, // start is just the current loop number multiplied by the rows per loop // and end is loop counter + 1, multiplied by the rows per loop $result = mysql_query("SELECT * FROM zip_code where `state_prefix` = 'OK' OFFSET $limit_end") or die(mysql_error()); $limit_end++; while($myrow = mysql_fetch_array ($result)) { $zip=$myrow['zip_code']; // get DOM from URL or file $html=file_get_html("http://www.mysite.com/selector.php?transaction=search&template=map_search&search1=0&pwidth=400&pheight=700&proxIconId=400&proxIcons=1&search2=0&search3=1&country=US&searchQuantifier=AND&address=&city=&stateProvince=+&postalCode=$zip&radius=500&x=78&y=16"); $i = 0; $tmp = $html->find('span[class=mqEmp], span[class=Black11]'); $cnt = count($tmp) - 1; foreach($tmp as $e) { if($i > 0 && $i < $cnt){ $outputstring=$e->plaintext; $outputstring=$outputstring. "\t"; fwrite($fp, $outputstring, strlen($outputstring)); if ($i % 8 == 0) { fwrite($fp, $other, strlen($other)); } } $i++; if ($limit_end==$total_rows) { $s=$rows_per_loop; } } } // now that we've run those, let's clear the results so that we don't run out of memory. mysql_free_result($result); // show where we are at echo "$limit_end of $total_rows<br />"; sleep(1); // give PHP a little nap to keep from overloading server ob_flush(); // as recommended by MadTechie, in case we go beyond the max execution time flush(); // add flush, to make sure it is outputted if($limit_end!=$total_rows) { header( "location:http://www.edit.com/selector.php?limit_end=$limit_end" ); } } fclose($fp); ?> Link to comment https://forums.phpfreaks.com/topic/153008-solved-passing-where-i-am-at-to-a-new-page/#findComment-803654 Share on other sites More sharing options...
jakebur01 Posted April 7, 2009 Author Share Posted April 7, 2009 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OFFSET ''' at line 1 I also added a missing bracket in the first if statement near $_GET. Link to comment https://forums.phpfreaks.com/topic/153008-solved-passing-where-i-am-at-to-a-new-page/#findComment-803692 Share on other sites More sharing options...
Fruct0se Posted April 7, 2009 Share Posted April 7, 2009 if ($limit_end) { $result = mysql_query("SELECT * FROM zip_code where `state_prefix` = 'OK' OFFSET $limit_end") or die(mysql_error()); } else { $result = mysql_query("SELECT * FROM zip_code where `state_prefix` = 'OK'") or die(mysql_error()); } This way we only offset after the first round, forgot that $Limit_end would have no value until it was run the first time through. Just caught something else: $limit_end++; while($myrow = mysql_fetch_array ($result)) Make the $limit_end inside your while loop: while($myrow = mysql_fetch_array ($result)) { $limit_end++; Link to comment https://forums.phpfreaks.com/topic/153008-solved-passing-where-i-am-at-to-a-new-page/#findComment-803701 Share on other sites More sharing options...
jakebur01 Posted April 7, 2009 Author Share Posted April 7, 2009 Something isn't right. I'm getting PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 840 bytes). Something else must be out of place. It won't even do one row if I change $rows_per_loop to 1. I also changed if ($limit_end==$total_rows) { $s=$rows_per_loop; } } to if ($limit_end==$total_rows) { $i=$rows_per_loop; } } Link to comment https://forums.phpfreaks.com/topic/153008-solved-passing-where-i-am-at-to-a-new-page/#findComment-803887 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.