mor*_*ped 10 javascript php web-applications conditional-statements
我的PHP代码在Amazon.com上发送查询以检索有关书籍的信息.当它接收到信息时,有两种可能性来执行以下程序.可以定义应该使用的内容,它必须考虑研究的图书利润总数.
我现在做的是,我发送第一个请求并检索结果总数.根据结果的数量,我为变量分配一个新值$queryUrl.如果结果数大于1200,程序应该按原样执行.
如果结果的数量小于1200,程序应该完成执行循环以遍历整个结果页面和其余的PHP代码但只有一次.
目前,如果结果少于1200.该程序遍历所有结果页面,但在PHP代码结束时停止.它执行所有代码几次,具体取决于查询的参数是$searchMonthUrlParam继承变量recupMonthJavaScript.
现在,我有
PHP:
//Retrieve variable value passed in POST from JavaScript
$pageNum = (isset($_POST["pageNum"]) && $_POST["pageNum"]) ? intval($_POST["pageNum"]) : 1;
$writeMode = (isset($_POST["writeMode"]) && $_POST["writeMode"]) ? $_POST["writeMode"] : "w";
$searchType = (isset($_POST["searchType"]) && $_POST["searchType"]) ? intval($_POST["searchType"]) : 0;
$month = (isset($_POST["month"]) && $_POST["month"]) ? intval($_POST["month"]) : date("n");
$year = (isset($_POST["year"]) && $_POST["year"]) ? intval($_POST["year"]) : date("Y") ;
$keyword = (isset($_POST["keyword"]) && strlen($_POST["keyword"])) ? $_POST["keyword"] : "";
$startMonth = (isset($_POST["startMonth"]) && strlen($_POST["startMonth"])) ? $_POST["startMonth"] : NULL;
$startYear = (isset($_POST["startYear"]) && strlen($_POST["startYear"])) ? $_POST["startYear"] : NULL;
$endMonth = (isset($_POST["endMonth"]) && strlen($_POST["endMonth"])) ? $_POST["endMonth"] : NULL;
$endYear = (isset($_POST["endYear"]) && strlen($_POST["endYear"])) ? $_POST["endYear"] : NULL;
if($keyword) {
if($writeMode === "w") {
file_put_contents(CSV_FILE, "");
}
$searchMonthUrlParam = "&field-datemod=".$month;
$searchYearUrlParam = "&field-dateyear=".$year;
$searchTypeUrlParam = "";
switch($searchType) {
case SEARCH_TYPE_TITLE:
$searchTypeUrlParam = "&field-title=";
break;
case SEARCH_TYPE_KEYWORDS:
$searchTypeUrlParam = "&field-keywords=";
break;
case SEARCH_TYPE_AUTHOR:
$searchTypeUrlParam = "&field-author=";
$searchTypeUrlParam = "&field-publisher=";
break;
case SEARCH_TYPE_PUBLISHER:
break;
}
//send request to Amazon
$queryUrl = AMAZON_TOTAL_BOOKS_COUNT . $searchMonthUrlParam . $searchYearUrlParam . $searchTypeUrlParam . urlencode($keyword) . '&page=' . $pageNum;
$queryResult = file_get_contents($queryUrl);
//Search number total results
if (preg_match('/of\s+([0-9,]+)\s+Results/', $queryResult, $matches)) {
$totalResults = (int) str_replace(',', '', $matches[1]);
} else {
throw new \RuntimeException('Total number of results not found');
}
//this condition work
if ($totalResults > MAX_RESULT_ALL_PAGES) {
$queryUrl = AMAZON_SEARCH_URL . $searchMonthUrlParam . $searchYearUrlParam . $searchTypeUrlParam . urlencode($keyword) . '&page=' . $pageNum;
}
//with this condition I don't know how to proceed
else {
$queryUrl = AMAZON_TOTAL_BOOKS_COUNT.$searchMonthUrlParam.$searchYearUrlParam.$searchTypeUrlParam.urlencode($keyword)."&page=".$pageNum;
}
$htmlResultPage = file_get_html($queryUrl);
$htmlQueryResult = $htmlResultPage->find("div[class=result]");
exit;
Run Code Online (Sandbox Code Playgroud)
JavaScript:
if(processedResultCount === 0) {
pageNum = 1;
recupMonth--;
if(recupMonth === 0 && recupYear > endYear) {
recupMonth = 12;
recupYear--;
}
else if(parseInt(recupMonth, 10) === parseInt(endMonth, 10) && parseInt(recupYear, 10) === parseInt(endYear, 10)) {
alert("Processing finished");
if(totalResultCount != 0) {
contentElt.innerHTML = "Total processed results: " + totalResultCount + '<br/><br/>> <a href="amazon_keyword_stats.csv" title="Download CSV result file">Download CSV result file</a>';
}
return;
}
}
getAmazonResult(pageNum, writeMode);
return;
}
}
}
xmlHttp.open("POST", "ctrl/getAmazonResult.php", true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send("pageNum=" + pageNum + "&writeMode=" + writeMode + "&searchType=" + searchType + "&month=" + recupMonth + "&year=" + recupYear + "&keyword=" + keyword + "&startMonth=" + startMonth + "&startYear=" + startYear + "&endMonth=" + endMonth + "&endYear=" + endYear);
Run Code Online (Sandbox Code Playgroud)
有人会有一个解决方案,如果它进入其他但他已完成执行一次完成后如何驱动stoper PHP代码执行?
要退出循环并结束 PHP 执行,只需返回一个结果:
//this is the condition you indicated works
if ($totalResults > MAX_RESULT_ALL_PAGES) {
$queryUrl = AMAZON_SEARCH_URL . $searchMonthUrlParam . $searchYearUrlParam . $searchTypeUrlParam . urlencode($keyword) . '&page=' . $pageNum;
}
//this is the condition you indicated does not work
else {
return someSortOfResultProcessing($queryResult);
}
Run Code Online (Sandbox Code Playgroud)