2012-12-28 56 views
1

我試圖通過從CSV文件讀取通過PHP進行促銷代碼驗證程序。下面是我的驗證碼,而「test.csv」是我的csv文件:通過CSV文件搜索,然後回覆在PHP中

<?php 
// if data are received via POST, with index of 'test' 
if (isset($_POST['test'])) { 
    $file = fopen('test.csv', 'r'); 
    $coupon = array($_POST['test']); 
    $coupondef = $_POST['test'];    // get data 
    $coupon = array_map('preg_quote', $coupon); 
    $regex = '/'.implode('|', $coupon).'/i'; 
    while (($line = fgetcsv($file)) !== FALSE) { 
    list($promocode, $amount) = $line; 

    if(preg_match($regex, $promocode)) { 
     echo "Coupon: '<i>".$coupondef."</i> is valid, with ".$amount."% of discount"; 
     $promocodevalid = 1; 
     break; 
    } else { 
     echo "Coupon: '<i>".$coupondef."</i> is invalid."; 
     $promocodevalid = 0;} 
} 
} 
?> 

這裏是我的HTML代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="ro"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2" /> 
<title>Example Ajax POST</title> 

<script type="text/javascript"><!-- 
function get_XmlHttp() { 
    var xmlHttp = null; 

    if(window.XMLHttpRequest) { 
    xmlHttp = new XMLHttpRequest(); 
    } 
    else if(window.ActiveXObject) { 
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    return xmlHttp; 
} 

function ajaxrequest(php_file, tagID) { 
    var request = get_XmlHttp(); 

    var the_data = 'test='+document.getElementById('txt2').value; 

    request.open("POST", php_file, true); 

    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    request.send(the_data); 
    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     document.getElementById(tagID).innerHTML = request.responseText; 
    } 
    } 
} 
--></script> 
</head> 
<body> 

<h3 style="cursor:pointer;" onclick="ajaxrequest('couponcheck.php', 'context')"><u>Click</u></h3> 
<input type="text" id="txt2" value=""></div> 
<div id="context">Here will be displayed the response from the php script.</div> 

</body> 
</html> 

CSV文件配有2列中的每一行 - 第一個是優惠券代碼,而第二個是優惠金額。如果此處理器成功搜索輸入的代碼,它將返回打折數量和一行字回原始文件(帶有javascript ajax發送者/接收者的html)。如果找不到代碼,它會將無效的消息發送回頁面。

問題是,由於我的csv文件中有超過100行,因此會有100行無效消息發佈到我的接收方頁面。 (或者在成功找到代碼之前獲得一定數量的行)在發送迴應之前,我想讓它通過csv進行搜索?

回答

0

如果行無效,你想要做的不是回顯。只要回顯是否有效,如果沒有有效的($ promocodevalid = false;),那麼你可以回顯錯誤。在這裏你去:

<?php 
    // if data are received via POST, with index of 'test' 
    if (isset($_POST['test'])) { 
     $promocodevalid = false; 
     $file = fopen('test.csv', 'r'); 
     $coupon = array($_POST['test']); 
     $coupondef = $_POST['test'];    // get data 
     $coupon = array_map('preg_quote', $coupon); 
     $regex = '/'.implode('|', $coupon).'/i'; 
     while (($line = fgetcsv($file)) !== FALSE) { 
      list($promocode, $amount) = $line; 

      if(preg_match($regex, $promocode)) { 
       echo "Coupon: '<i>".$coupondef."</i> is valid, with ".$amount."% of discount"; 
       $promocodevalid = true; 
       break; 
      } 
     } 
     if(!$promocodevalid) { 
      echo "Coupon: '<i>".$coupondef."</i> is invalid."; 
     } 
    } 
    ?> 
+0

工程就像一個魅力!非常感謝! – Ansehelm

+0

請記住接受幫助你的答案。這是該網站的工作原理。其他人如果他們有相同的問題將看到什麼答案幫助你,並使用相同的解決方案。 –

+0

已接受。 :D抱歉,延遲。 – Ansehelm

0

既然你調用使用Ajax這個PHP腳本,你應該立即返回,當你已經做的比賽:

<?php 
// if data are received via POST, with index of 'test' 
if (isset($_POST['test'])) { 
    $file = fopen('test.csv', 'r'); 
    $coupon = array($_POST['test']); 
    $coupondef = $_POST['test'];    // get data 
    $coupon = array_map('preg_quote', $coupon); 
    $regex = '/'.implode('|', $coupon).'/i'; 
    while (($line = fgetcsv($file)) !== FALSE) { 
    list($promocode, $amount) = $line; 

    if(preg_match($regex, $promocode)) { 
     echo "Coupon: '<i>".$coupondef."</i> is valid, with ".$amount."% of discount"; 
     exit; // match made, stop the php file now 
    } 
} 
// if you get here you know there was no match 
echo "Coupon: '<i>".$coupondef."</i> is invalid."; 
?> 

否則,如果你對你的循環達到終止條件你知道沒有匹配(因爲腳本沒有被殺死),所以等到那時輸出一個「無效」的消息。

+0

感謝您的幫助。 :) – Ansehelm