2015-06-10 1 views
1

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

То, что я сделал, устанавливается так, что когда пользователь ищет его, он отображает результаты сопоставления, если нет поиска, тогда он отображает всю таблицу. Это показывает таблицу, но при поиске он не будет возвращением никаких данных (все остальное работает, хотя)

Это то, что я получил для поиска ...

<?php 
if(isset($_POST['submit'])){ 
if(isset($_GET['query'])){ 
if(preg_match("/^[ a-zA-Z]+/", $_POST['query'])){ 
$query=$_GET['query']; 
$q=mysql_query("SELECT * FROM employees WHERE name LIKE '%$query%'") or die("could not search"); 
$result = mysql_query($q) or die(mysql_error()); 
while ($row = mysql_fetch_array($result)){ 

Я не могу работать как его нужно отформатировать. В поле поиска «Запрос». Любая помощь будет оценена!

----- EDIT ----- Я не могу заставить его работать еще ... любые указатели?

<?php if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username']){?><br /><form method="post" action="search.php"> 
<input name="query" type="text" required class="forms" id="query" placeholder="Search name..." size="35" /> 
<input type="submit" name="submit" id="submit" value=" Search " HEIGHT="25" WIDTH="70" BORDER="0" ALT="Submit"><button onclick="window.location.href='search.php'"> Clear </button></form><br /> 
<table border="0" cellspacing="2" class="data"><tr> 
<td align="center" class="idtd"><strong>ID</strong></td> 
<td align="center" class="nametd"><strong>Name</strong></td> 
<td align="center" class="positiontd"><strong>Position</strong></td> 
<td align="center" class="banktd"><strong>Bank</strong></td> 
<td align="center" class="pooltd"><strong>Pool</strong></td> 
<td align="center" class="starttd"><strong>Start Date</strong></td> 
<td align="center" class="endtd"><strong>End Date</strong></td> 
<td align="center" class="ghourstd"><strong>Gross Hours</strong></td> 
<td align="center" class="chourstd"><strong>Cont'd Hours</strong></td> 
</tr></table> 
<?php 
if(isset($_POST['submit'])){$where = !empty($_GET['query']) ? $db->real_escape_string($_GET['query']) : ""; 
$q = mysql_query("SELECT * FROM employees WHERE name LIKE '% " . $where . "%'") or die(mysql_error()); 
while ($row = mysql_fetch_array($result)){ 
echo "<table class='data' border='0' cellspacing='2'><tr> 
<td align='center' class='idtd'>".$row['id']."</td> 
<td align='center' class='nametd'>".$row['name']."</td> 
<td align='center' class='positiontd'>".$row['position']."</td> 
<td align='center' class='banktd'>".$row['bank']."</td> 
<td align='center' class='pooltd'>".$row['pool']."</td> 
<td align='center' class='starttd'>".$nStartDate."</td> 
<td align='center' class='endtd'>".$row['enddate']."</td> 
<td align='center' class='ghourstd'>".$row['grosshours']."</td> 
<td align='center' class='chourstd'>".$row['contractedhours']."</td><tr ></table>";}}}} else{ ?> 
<h1>You must be logged in to view this page.</h1><?php } ?> 
+0

Если вы можете, вы должны [прекратить использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленном] (http://en.wikipedia.org/wiki/Prepared_statement) [заявлениях] (http://php.net/manual/en/pdo.prepared-statements.php) и рассмотрите возможность использования PDO , [это действительно не сложно] (http://jayblanchard.net/demystifying_php_pdo.html). –

+0

Половина вашего кода, кажется, отсутствует. –

+0

Вы также смешиваете $ _GET и $ _POST в этой строке preg_match. – demonkoryu

ответ

0

Я считаю, что вам нужен период в вашем синтаксисе SQL:

$q=mysql_query("SELECT * FROM employees WHERE name LIKE '%.$query.%'") or die("could not search");

+0

Я все еще борюсь с этим. Пожалуйста, см. Мой отредактированный пост для полного кода. – noozl

+0

'$ q = mysql_query (" SELECT * FROM employees WHERE name LIKE '% ". $ Где."%' ") Или die (mysql_error()); while ($ row = mysql_fetch_array ($ result)) {' переменная' $ result' не имеет ссылки, должна ли она быть '$ q' вместо этого? –

+0

Ах да, это должно быть. Doh! Теперь он просто возвращает всю таблицу вместо соответствия искомому слову ... hmm – noozl

0

Я просто хотел бы использовать это:

if(isset($_POST['submit'])){ 
    $where = !empty($_GET['query']) ? $db->real_escape_string($_GET['query']) : ""; 
    $q = mysql_query("SELECT * FROM employees WHERE name LIKE '% " . $where . "%'") or die(mysql_error()); 
    while ($row = mysql_fetch_array($result)){ 
     // ToDo 
    } 
} 

Для информации: Вы сделали mysql_query() два раза : первый раз строки, второй раз результат - второй раз была ошибка.

1

принять помощь некоторой переменной, как показано ниже

$condition = '1 = 1';//which will result all rows (1=1 is TRUE) 
if($_GET['query']) 
{ 
    $query=$_GET['query']; 
    $condition = " name LIKE '%$query%'";// this will search only with querydata 
} 

$q=mysql_query("SELECT * FROM employees WHERE '$condition'") or die("could not search"); 

$result = mysql_query($q) or die(mysql_error());//you have double mysql_query() remove this 

И самое главное, прекратить использование mysql_ * функции они устарели давно используют mysqli_ * или PDO, не думаю, что эти новые & трудно, когда смотрите на уроках example.

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