2016-02-23 4 views
1

У меня есть простой скрипт здесь, чтобы извлечь запись из mysql из диапазона 2 дат. Странно, что он просто показывает 4 записи, в то время как есть 6 записей, я не устанавливал никаких ограничений на записи. Может кто-нибудь мне помочь?Результат MYSQL не отображает все записи

Попробуйте выбрать из: - 1 февраля по 27 февраля

Вот мой сайт тестирования: http://iamawesome.xyz/track/review.php

enter image description here

Вот мой код: -

$done = 0; 
function displayTable($results) { 
    $total_result = count($results); 
    echo $total_result." results found."; 
    for($x = 1; $x <= $total_result; $x++) { 
     //echo "<tr><td>$allresult['id'][$x]</td>"; 
     echo "<tr><td>".$results['date'][$x]."</td>"; 
     echo "<td>".$results['url'][$x]."</td>"; 
     echo "<td>".$results['clickid'][$x]."</td>"; 
     echo "<td>".$results['code'][$x]."</td></tr>"; 
    } 
} 

if (isset($_POST['sub'])) { 

$datefrom = $_POST['fromdatetime']; 
$dateto = $_POST['todatetime']; 

if ($datefrom == "From" || $datefrom == "" && $dateto == "To" || $dateto == "") { 
    echo "ERROR! No date/time selected"; 
} 
else { 
    /* create a prepared statement */ 
    $stmt = mysqli_prepare($mysqli, "SELECT * FROM data WHERE date_data between (?) AND (?)"); 

    /* bind parameters for markers */ 
    mysqli_stmt_bind_param($stmt, "ss", $datefrom, $dateto); 

    /* execute query */ 
    mysqli_stmt_execute($stmt); 

    /* bind result variables */ 
    mysqli_stmt_bind_result($stmt, $resultid, $resulturl, $resultdate, $resultclickid, $resultcode); 

    $resultcount = 0; 
    $allresult = array(); 

    /* fetch value */ 
    while (mysqli_stmt_fetch($stmt)) { 
     //$allresult['id'][$resultcount] = $resultid; 
     $allresult['url'][$resultcount] = $resulturl; 
     $allresult['date'][$resultcount] = $resultdate; 
     $allresult['clickid'][$resultcount] = $resultclickid; 
     $allresult['code'][$resultcount] = $resultcode; 
     $resultcount++; 
    } 

    /* close statement */ 
    mysqli_stmt_close($stmt); 


/* close connection */ 
mysqli_close($mysqli); 
$done = 1; 
} 
} 
?> 

<style> 
.searchbox { 
border-radius: 20px; 20px; 20px; 20px; 
-moz-border-radius: 20px; 20px; 20px; 20px; 
-webkit-border-radius: 20px; 20px; 20px; 20px; 
border: 2px solid #58ACFA; 
} 
</style> 

<div class="searchbox"> 

<form action="review.php" method="post" style="margin-left:20px; padding-top:10px;"> 
<input id="fromdatetime" name="fromdatetime" type="text" placeholder="From" readonly> - <input id="todatetime" name="todatetime" type="text" placeholder="To" readonly> 
<input type="submit" name="sub" value="Search" id="btnreview"> 
</form> 
</div> 
<br><br> 
<?php 
if ($done == 1) { 
?> 
<div class="searchbox"> 
<table border="1" width="100%" cellspacing="100%"> 
<tr> 
<td><b>Date/Time</b></td> 
<td><b>From URL</b></td> 
<td><b>ClickID</b></td> 
<td><b>Affiliate Code</b></td> 
</tr> 
<?php 
displayTable($allresult); 
} 
?> 
</table> 
+0

Каковы значения '$ datefrom' и' $ dateto', когда вы выбираете эти даты? Используйте 'var_dump ($ dateto);'. Вы также можете попробовать выполнить запрос в phpMyAdmin и сравнить результаты. – Qirel

+0

начните с 'for ($ x = 1; ....' с 0 – devpro

+0

и еще одно предложение используйте foreach вместо for .. просто предложение: 'foreach ($ results as $ key => $ value) { echo " ". $ Value ['date']. ""; ..........} ' – devpro

ответ

3

Проблема в том, что вы считаете первый массив. В настоящее время у вас многомерный массив, и вы только подсчитываете, сколько массивов имеет первый массив.

Поскольку хранить 4 различных значений в массиве здесь

$allresult['url'][$resultcount] = $resulturl; 
$allresult['date'][$resultcount] = $resultdate; 
$allresult['clickid'][$resultcount] = $resultclickid; 
$allresult['code'][$resultcount] = $resultcode; 

когда вы затем сделать count($allresult), то вывод будет 4, потому что $allresult содержит 4 подмассивы, url, date, clickid и code.

Затем вы используете for -loop для вывода массива в вашей функции displayTable. Во-первых, вы начинаете считать в 1 (в то время как массивы начинаются с индекса 0), но что более важно, счет здесь всего 4, потому что массив первого уровня содержит 4 подмассива (как обсуждалось выше).

Я бы переписал функцию, используя вместо нее foreach -loop, так как это более подходит для перебора массивов. Тем не менее, вы можете просто изменить так, чтобы функция count рассчитывает через одну из подмассивов вместо этого, изменив функцию от

function displayTable($results) { 
    $total_result = count($results); // Outputs static 4, generated in the while-loop 
    echo $total_result." results found."; 

    for($x = 1; $x <= $total_result; $x++) { 
     // continue here... 

в

function displayTable($results) { 
    $total_result = count($results['url']); // Actual counts of instances found from the query 
    echo $total_result." results found."; 

    for($x = 0; $x < $total_result; $x++) { 
     // continue here... 

Что существенно изменилось здесь был x = 1; $x <= $total_result в $x = 0; $x < $total_result и, самое главное, от $total_result = count($results); до $total_result = count($results['url']);.

+0

нафига просто собирался этот пост :) Принимается ваш ответ – MuthaFury

+0

Ха-ха, хорошо, что ты понял это в любом случае! ;-) Приветствия! – Qirel

+1

хорошая работа @Qirel :) – devpro

0

Обновление вашего запрос

SELECT * FROM data WHERE date_data between (?) AND (?) 

С

SELECT * FROM data WHERE DATE(date_data) between (?) AND (?) 

это могло бы работать. Предполагается, что дата вашего первого параметра ниже второй даты параметра

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