2015-12-21 2 views
0

Tony, обновленный код, показанный ниже, не позволит мне прокомментировать это, поэтому я отредактировал свой предыдущий пост, этот код ниже, не возвращает никаких результатов или ошибок, просто перезагружает страницу. Единственная проблема, которую я вижу с помощью кода, - это то, что мне нужно иметь возможность искать по всем заголовкам таблиц, по рейтингу, имени, области и т. Д. У меня был набор данных, который в реальном времени обновлял таблицы до результата, т работа с таблицей PHP и я не уверен, как я имел в виду, чтобы заставить его работать с DataTables, так как я никогда не использовал его раньше:Live Update Searchable Database MYSQL и PHP

updated code: 

<html> 
<head> 
<body> 
<style> 
table { 
color: #333; /* Lighten up font color */ 
font-family: Helvetica, Arial, sans-serif; /* Nicer font */ 
width: 100%; 
border-collapse: 
collapse; border-spacing: 0; 
} 

td, th { border: 1px solid #00000; height: 30px; } /* Make cells a bit taller */ 

th { 
background: #F3F3F3; /* Light grey background */ 
font-weight: bold; /* Make sure they're bold */ 
} 

td { 
background: #FAFAFA; /* Lighter grey background */ 
text-align: center; /* Center our text */ 
} 
</style> 

<script type="text/javascript" language="javascript" src="http://wcfcourier.com/app/special/data_tables/media/js/jquery.js"></script> 
<script type="text/javascript" language="javascript" src="http://wcfcourier.com/app/special/data_tables/media/js/jquery.dataTables.min.js"></script> 

<script type="text/javascript" charset="iso-8859-1"> 



$(document).ready(function(){ 
    $('#five_year').dataTable({ 
    "iDisplayLength": 300, 
    "aLengthMenu": [[5, 10, 25, 50, -1], [5, 10, 25, 50, "All"]] 
    }); 
$(document).ready(function() { 
    // Setup - add a text input to each footer cell 
    $('#five-year tfoot th').each(function() { 
     var title = $('#five_year thead th').eq($(this).index()).text(); 
     $(this).html('<input type="text" placeholder="Search '+title+'" />'); 
    }); 

    // DataTable 
    var table = $('#five_year').DataTable(); 

    // Apply the search 
    table.columns().eq(0).each(function (colIdx) { 
     $('input', table.column(colIdx).footer()).on('keyup change', function() { 
      table 
       .column(colIdx) 
       .search(this.value) 
       .draw(); 
     }); 
    }); 
}); 

}); 


$().ready(function() { 
    var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/; 

    $("table td").filter(function() { 
     return $(this).html().match(regEx); 
    }).each(function() { 
     $(this).html($(this).html().replace(regEx, "<a href=\"mailto:$1\">$1</a>")); 
    }); 
}); 
</script> 
<form action="index.php" method="post"> 
    <input type="text" name="search" placeholder="Search...." /> 
    <input type="submit" value=">>" /> 
</form> 
<?php 
$con=mysqli_connect("localhost","root","windows11","main"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 


$result = mysqli_query($con,"SELECT * FROM `users` ORDER BY ID asc, Name asc") or die(mysqli_error($con)); 

echo 
"<table border=1> 
<tr> 
<th>Rating</th> 
<th>Name</th> 
<th>Discipline</th> 
<th>Rate</th> 
<th>Area</th> 
<th>Number</th> 
<th>Email</th> 
</tr>"; 

while($row = mysqli_fetch_array($result)){ 

echo "<tr>"; 
echo "<td>" . $row['Rating'] . "</td>"; 
echo "<td>" . $row['Name'] . "</td>"; 
echo "<td>" . $row['Discipline'] . "</td>"; 
echo "<td>" . $row['Rate'] . "</td>"; 
echo "<td>" . $row['Area'] . "</td>"; 
echo "<td>" . $row['Number'] . "</td>"; 
echo "<td>" . $row['Email'] . "</td>"; 
echo "</tr>"; 
echo "</form>"; 
} 
// If there is a search variable try to search database 
if(isset($_POST['search'])) { 

       $searchq = $_POST['search']; 
       $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq); 
       $sql = "SELECT * FROM `users` WHERE `Rating` LIKE '%$searchq%';"; 

       if ($result = mysqli_query($conn, $sql)) { 
        if (mysqli_num_rows($result) > 0) { 

         echo ' 
         <table class="hoverTable"> 
          <tr> 
           <th>Rating</th> 
           <th>Name</th> 
           <th>Discipline</th> 
           <th>Rate</th> 
           <th>Area</th> 
           <th>Number</th> 
           <th>Email</th> 
          </tr>'; 

          while($row = $result->fetch_assoc()) { 
           echo " 
           <tr> 
            <td>".$row["rating"]."</td> 
            <td>".$row["name"]."</td> 
            <td>".$row["discipline"]."</td> 
            <td>".$row["rate"]."</td> 
            <td>".$row["area"]."</td> 
            <td>".$row["number"]."</td> 
            <td>".$row["email"]."</td> 
           </tr>"; 
          } 

         echo ' 
         </table>'; 

        } else { 
         $message = "0 results"; 
        } 
       } 
       mysqli_free_result($result); 
      } 
     $conn->close(); 
?> 



</body> 
</head> 
</html> 

Это также сценарий DataTables, который работает с HTML таблицы (все данные отщепляются в строки таблицы с помощью HTML не echo'd обнаруживаемых с помощью PHP скрипта:

<script type="text/javascript" language="javascript" src="http://wcfcourier.com/app/special/data_tables/media/js/jquery.js"></script> 
<script type="text/javascript" language="javascript" src="http://wcfcourier.com/app/special/data_tables/media/js/jquery.dataTables.min.js"></script> 

<script type="text/javascript" charset="iso-8859-1"> 



$(document).ready(function(){ 
    $('#five_year').dataTable({ 
    "iDisplayLength": 300, 
    "aLengthMenu": [[5, 10, 25, 50, -1], [5, 10, 25, 50, "All"]] 
    }); 
$(document).ready(function() { 
    // Setup - add a text input to each footer cell 
    $('#five-year tfoot th').each(function() { 
     var title = $('#five_year thead th').eq($(this).index()).text(); 
     $(this).html('<input type="text" placeholder="Search '+title+'" />'); 
    }); 

    // DataTable 
    var table = $('#five_year').DataTable(); 

    // Apply the search 
    table.columns().eq(0).each(function (colIdx) { 
     $('input', table.column(colIdx).footer()).on('keyup change', function() { 
      table 
       .column(colIdx) 
       .search(this.value) 
       .draw(); 
     }); 
    }); 
}); 

}); 


$().ready(function() { 
    var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/; 

    $("table td").filter(function() { 
     return $(this).html().match(regEx); 
    }).each(function() { 
     $(this).html($(this).html().replace(regEx, "<a href=\"mailto:$1\">$1</a>")); 
    }); 
}); 
</script> 

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

благодарит за помощь.

+0

Да, это возможно, проверить [DataTables] (http://datatables.net/) у него есть все, что вам нужно сделать. – Naruto

+0

Хотя, в зависимости от объема данных, вы можете настроить таблицу MyISAM с определенными полями для типа данных, хранящихся там, и ссылки на исходные записи для скорость. Предполагая, что вы хотите асинхронно выполнять поиск по миллионам записей. – ash

+0

Я посмотрел на datatables, но не вижу, как реализовать это с моими таблицами. в HTML-таблицах orignal, я смог включить идентификатор таблицы, с которым работал jscript, но таким образом, если i добавьте идентификатор таблицы в любом месте, он не работает и сбой сценария. – Mouseman85

ответ

0

Я установил простой поиск в предыдущем проекте класса, который запросил таблицу в моей базе данных и вернул результаты. Вы можете изменить это и попробовать, если вы думаете, что это может помочь:

Поместите поиск в форму.

// If there is a search variable try to search database 

если (Исеть ($ _POST [ 'поиск'])) {

   $searchq = $_POST['search']; 
       $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq); 
       $sql = "SELECT * FROM `Customers` WHERE `Client` LIKE '%$searchq%';"; 

       if ($result = mysqli_query($conn, $sql)) { 
        if (mysqli_num_rows($result) > 0) { 

         echo ' 
         <table class="hoverTable"> 
          <tr> 
           <th>Rating</th> 
           <th>Name</th> 
           <th>Discipline</th> 
           <th>Rate</th> 
           <th>Area</th> 
           <th>Number</th> 
           <th>Email</th> 
          </tr>'; 

          while($row = $result->fetch_assoc()) { 
           echo " 
           <tr> 
            <td>".$row["rating"]."</td> 
            <td>".$row["name"]."</td> 
            <td>".$row["discipline"]."</td> 
            <td>".$row["rate"]."</td> 
            <td>".$row["area"]."</td> 
            <td>".$row["zipcode"]."</td> 
            <td>".$row["email"]."</td> 
           </tr>"; 
          } 

         echo ' 
         </table>'; 

        } else { 
         $message = "0 results"; 
        } 
       } 
       mysqli_free_result($result); 
      } 
     $conn->close(); 

?>

+0

Для этого потребуется, чтобы поиск стал новой страницей? Мне нужен поиск, который будет на той же странице, что и таблица, также я совершенно новичок в этом, если это нужно работать на той же странице, где мне нужно будет вставить его в свой код? если я вставляю что-либо в код Mouseman85

+0

Вы можете запустить его на той же странице. Просто повторите результаты в таблицу, которую вы уже настроили. – Tony

+0

HI Tony, где я когда-либо вставляю этот код, он просто разбивает код базы данных, я вставил внизу, после строки mysqli_close ($ con), и это вызывает ошибку 500, я пробовал поставить ее раньше, вверху, посередине, в своих ont тегах, и это просто вызывает 500 ошибок каждый раз. Какие-либо предложения? Спасибо в advace – Mouseman85