2014-01-09 1 views
0

빠른 스크립트를 사용하여 데이터베이스에 고객의 최근 활동을 표시합니다. 결과를 출력하는 스크립트가 있지만 퍼팅이 헷갈 렸습니다. 내 데이터베이스에서PHP와 MySQL 질의 결과가 혼동 스럽습니다.

  <?php 
       //Search for customer recent history 
       $q = "SELECT * FROM txn_log WHERE customer_no = $customer_no ORDER BY datetime DESC LIMIT 3"; 
       $r = mysql_query($q) or die(mysql_error()); 

       while($row = mySQL_fetch_array($r)) { 
        $recent_history = ''; 

        $str .= '<a href="#" class="list-group-item">'; 
        $str .= ' <span class="badge">' . gmdate("Y-m-d\TH:i:s\Z", $row['datetime']) . '</span>'; 
        $str .= ' <i class="fa fa-check"></i> ' . $row['txn_id'] . ': ' . $row['txn_type'] . ' ' . $row['amount_dif']; 
        $str .= '</a>'; 

        echo $str; 
       } 

      ?> 

나는 그들과 관련된 세 가지 기록, ID에서 시작과 함께 하나 명의 테스트 고객이 2. UNIX 타임 스탬프의 순서에만 세 개의 레코드를 출력되어야한다 위 내 쿼리를 사용

, 다음 순서에 따라 세 개의 레코드를 생성해야한다 => ID2, ID3, ID4

무엇 다음 => ID2, ID2는, ID3은 ID2는, ID3, ID4

I가 없어 출력하고 다하고 내가 잘못한 것을 이해한다. 정확한 결과 외에도 처음 세 개 (ID2, ID2, ID3)를 생성합니다. 쿼리를 실행할 때마다 결과는 동일합니다. 당신은 $ str을를 사용하는

답변

1

. =

그래서 루프의 첫 번째 반복에, 에코되는 $ str을이 ID2 두 번째 반복되고, $ str을 인 에코는 ID2 + ID3 세 번째 반복, $ str을이다 ID2 + ID3 + ID4

결국 ID2, ID2, ID3, ID2, ID3, ID4처럼 보입니다. 도움이 되길 바랍니다!

이 문제를 해결하려면 루프의 시작 부분에서 변수를 $ str = ""로 선언하십시오. 그러면 에코는 각 ID를 한 번만 에코합니다.

1

각 루프 반복마다 $ str을 재설정하십시오. 추가 :

$str=""; 

1

$recent_history = ''; 후 당신은,

보안 수도회 최우선되어야합니다, 염두에두고

몇 가지를 mysql_fetch_assoc를 사용해야하고, 루프 밖에 에코 SQL 주입 문자를 확인하고 쿼리에서 항상 작은 따옴표로 변수를 묶습니다. 내 동안의

DERP에게() .. 그것을 발견 ...

<?php 
     //Search for customer recent history 
     $customer_no = str_replace("'", '', $customer_no); 
     $q = "SELECT * FROM txn_log WHERE customer_no = '$customer_no' ORDER BY datetime DESC LIMIT 3"; 
     $r = mysql_query($q) or die(mysql_error()); 

     while($row = mySQL_fetch_assoc($r)) { 
      $recent_history = ''; 

      $str .= '<a href="#" class="list-group-item">'; 
      $str .= ' <span class="badge">' . gmdate("Y-m-d\TH:i:s\Z", $row['datetime']) . '</span>'; 
      $str .= ' <i class="fa fa-check"></i> ' . $row['txn_id'] . ': ' . $row['txn_type'] . ' ' . $row['amount_dif']; 
      $str .= '</a>'; 
     } 
      echo $str; 
    ?> 
0

Woops 아래 참조

내가 잘못 문자열을 삭제했다! 내 보정을 제출 때까지 게시

모두 감사합니다, 나는 당신을 보지 않았다 사람 : $recent_history = '';$str = '';

편집되어 있어야합니다. 필자는 확실히 스크립트 보안을 유지하려고합니다. 내가 원하는 작업을 수행 할 수 있는지 확인합니다.

관련 문제