1

CSV ファイルから読み取って、php 経由でプロモーション コード バリデータを作成しようとしています。「test.csv」は私のcsvファイルですが、これは私のバリデーターのコードです:

<?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 つの列があります。最初の列はクーポン コードで、2 番目の列は割引額です。このプロセッサが入力されたコードの検索に成功した場合、割引額と単語の行を元のファイル (javascript ajax 送信側/受信側の html) に返します。コードが見つからない場合、無効なメッセージがページに返されます。

問題は、csv ファイルに 100 行以上あるため、100 行の無効なメッセージが受信者ページに投稿されることです。(または、コードが正常に見つかるまでの行数)応答を返す前にcsvを検索するにはどうすればよいですか?

4

2 に答える 2

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.";
       }
    }
    ?> 
于 2012-12-28T02:59:32.657 に答える
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.";
?> 

それ以外の場合、ループで終了条件に達した場合は、(スクリプトが強制終了されていないため) 一致がないことがわかっているため、それまで待ってから「無効な」メッセージを出力してください。

于 2012-12-28T03:03:51.573 に答える