2014-01-09 5 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

Я не понять, что я сделал неправильно чтобы получить его для создания первых трех (ID2, ID2, ID3) в дополнение к правильным результатам. Каждый раз, когда я запускаю запрос, результаты одинаковы.

ответ

1

Вы используете $ ул. =

так на первой итерации вашего цикла, $ Облов быть вторят является ID2 второй итерации, $ Облов быть переспросил является ID2 + ID3 третьей итерации, $ ул эхо, это ID2 + ID3 + ID4

В конце концов, это будет выглядеть как ID2, ID2, ID3, ID2, ID3, ID4 Надеюсь, что это поможет!

Чтобы исправить это, попробуйте объявить переменную как $ str = "" в начале вашего цикла, а затем ваше эхо будет только повторять каждый идентификатор один раз.

1

Сбросить $ str для каждой итерации цикла. Добавить:

$str=""; 

После $recent_history = '';

1

Вы должны использовать mysql_fetch_assoc, и эхо вне цикла

Несколько вещей, чтобы иметь в виду,

безопасности должен быть вашим главным монастырем, проверьте наличие символов SQL-инъекции и всегда включайте переменные с одинарными кавычками в запросе. смотрите ниже

<?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 ... нашли ..

Derp в моем While()

Я убирала неправильную строку! $recent_history = ''; должен был $str = '';

EDIT:

Спасибо всем, я не видел вас, ребята, проводки, пока я не представил свою поправку. Я определенно буду защищать сценарий, я просто уверен, что могу делать то, что хочу, чтобы он сделал :)

Смежные вопросы