#php #html #search #mysqli
#php #HTML #Поиск #mysqli
Вопрос:
Я новичок и пытаюсь создать приложение для сельского хозяйства, чтобы набраться опыта и попробовать что-то продвинутое. Но я не могу понять, как выполнять поиск в моем приложении. У меня есть:
- 4 select html elements
- 5 search boxes
Из соображений экономии места я напишу только 3/14 столбца для html-элементов.
HTML-код:
<form>
<!-- makes the global filter based on all the data from db -->
<select id="select1" name="select1" onchange="this.form.submit()">
<option value="">Select</option>
<option value="code">Code</option>
<option value="land">Land</option>
<option value="name">Name</option>
</select><br/>
<!-- makes a filter for a html column, based on a db column -->
<select id="select2" name="select2" onchange="this.form.submit()">
<option value="">All parcels</option>
<option value="P1">P1</option>
<option value="P2">P2</option>
<option value="P3">P3</option>
</select>
<!-- search boxes to filter 5 html columns -->
<input type="search" id="search1" name="search2">
<input type="search" id="search2" name="search2">
<input type="search" id="search3" name="search3">
<input type="search" id="search4" name="search4">
<!-- same as the previous select menu, just this is for another html column -->
<select id="select3" name="select3" onchange="this.form.submit()">
<option value="">Select</option>
<option value="MO">MO</option>
<option value="MA">MA</option>
<option value="ME">ME</option>
</select>
<!-- the 5th search box -->
<input type="search" id="search5" name="search5">
<!-- renders the data from db according to the selections made by the user or search terms -->
<table id="table" class="display" cellspacing="0" width="100%">
<tr>
<th id="code">Code</th>
<th id="land">Land</th>
<th id="name">Name</th>
</tr>
<tr>
<?php
require 'config.php'; # login to database
# ---- QUERY ----
?>
</tr>
</table>
<!-- this displays in the page as many rows as the user selects -->
<select name="select4" id="select4" onchange="this.form.submit()">
<option value="">Select</option>
<option value="1">1</option>
<option value="5">5</option>
<option value="10">10</option>
</select>
</form>
Код PHP: я просто поместил этот блок кода вместо «# —- QUERY ——» сверху, чтобы заполнить столбцы html на странице:
if(isset($_POST['select1'])){
$select1 = $_POST['select1'];
switch($select1){
case 'code':
$stmt = $db->query("SELECT * FROM users WHERE `code`='code'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr> <?php
}
break; # some more cases follows
} # end switch($select1)
} # end if(isset($_POST['select1']))
elseif(isset($_POST['select2'])){
$select2 = $_POST['select2'];
switch($select2){
case P1:
$stmt = $db->query("SELECT * FROM users WHERE `parcel` LIKE '%P1%'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr> <?php
}
break; # some more cases here
} # end switch($select2)
} # end if(isset$_POST['select2'])
elseif(isset($_POST['search1'])){
$search1 = $_POST['search1'];
$stmt = $db->query("SELECT * FROM users WHERE `name` LIKE '%search1%'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr> <?php
}
} # end elseif(isset($_POST['search1']))
elseif(isset($_POST['search2'])){
$search2 = $_POST['search2'];
$stmt = $db->query("SELECT * FROM users WHERE `cont_ref_a` LIKE '%search2%'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr> <?php
}
} # end elseif(isset($_POST['search2']))
elseif(isset($_POST['search3'])){
$search3 = $_POST['search3'];
$stmt = $db->query("SELECT * FROM users WHERE `owner` LIKE '%search3%'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr> <?php
}
} # end elseif(isset($_POST['search3']))
elseif(isset($_POST['search4'])){
$search4 = $_POST['search4'];
$stmt = $db->query("SELECT * FROM users WHERE `block` LIKE '%search4%'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr> <?php
}
} # end elseif(isset($_POST['search4']))
elseif(isset($_POST['select3'])){
$select3 = $_POST['select3'];
switch($select3){
case 'T1':
$stmt = $db->query("SELECT * FROM users WHERE `zone`='T1'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr> <?php
}
break; # end case 'T1', more cases follows
} # end switch($select3)
} # end elseif(isset($_POST['select3']))
elseif (isset($_POST['search5'])){
$search5 = $_POST['search5'];
$stmt = $db->query("SELECT * FROM users WHERE `s_a` LIKE '%search5%'");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr><?php
}
} # end elseif(isset($_POST['search5']))
elseif(isset($_POST['select1'])){
$select1 = $_POST['select1'];
switch($select1){
case 'code':
$stmt = $db->query("SELECT * FROM users");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
</tr><?php
}
break; # end case 'code', more cases follows
} # end switch($select1)
} # end elseif(isset($_POST[select1]))
elseif(isset($_POST['select4'])){
$select4 = $_POST['select4'];
switch($select4){
case 1:
$stmt = $db->query("SELECT * FROM users LIMIT 1");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr><?php
}
break; # end case 1, more cases follows
} # end switch($select4)
} # end elseif(isset($_POST['select4'])))
else { # if noone of the select menus or search boxes where filled, then just render all the data from db to the page
$stmt = $db->query("SELECT * FROM users");
while($row = $stmt->fetch_assoc()){ ?>
<tr class="action">
<td id="td"><?php echo $row['code'];?></td>
<td id="td"><?php echo $row['land'];?></td>
<td id="td2"><?php echo $row['name'];?></td>
</tr><?php
}
} # end php script
Извините за столь длинный пост, но я постарался выразить его как можно лучше. Проблема в том, что когда я выбираю один вариант из меню выбора или ввожу термин для поиска, ничего не отображается. На данный момент меня не волнует, если чего-то не хватает в моем коде, когда речь идет о безопасности, я просто хочу, чтобы это приложение работало. Любая помощь? Большое спасибо!
LE: Я, наконец, нашел решение своей проблемы (и я напишу это здесь, чтобы у любых других людей, которые будут искать проблемы такого типа, был ответ (я напишу тривиальный пример)):
Для полей поиска:
<form action="" method="post">
<input type="search" name="search1" onchange="this.form.submit()">
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr><?php
if(isset($_POST['search1'])){
$search1 = $_POST['search1'];
if(!empty($_POST['search1'])){
$sql = "SELECT * FROM tblName WHERE fname LIKE '%$search1%'";
$stmt = $db->query($sql);
while($row = $stmt->fetch_assoc()){ ?>
<tr>
<td><?php echo $row['fname'];?></td>
<td><?php echo $row['lname'];?></td>
</tr><?php
}
}
}
else {
$sql = "SELECT * FROM tblName";
$stmt = $db->query($sql);
while($row = $stmt->fetch_assoc()){ ?>
<tr>
<td><?php echo $row['fname'];?></td>
<td><?php echo $row['lname'];?></td>
</tr><?php
}
} ?>
</table>
</form>
Для меню выбора:
<form action="" method="post">
<select name="select1" onchange="this.form.submit()">
<option value="">Select</option>
<option value="fname">First Name</option>
<option value="lname">Last Name</option>
</select>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr><?php
if(isset($_POST['select1'])){
$select1 = $_POST['select1'];
if(!empty($_POST['select1'])){
switch($select1){
case 'fname':
$stmt = $db->query("SELECT * FROM users");
while($row = $stmt->fetch_assoc()){ ?>
<tr>
<td><?php echo $row['fname'];?></td>
</tr><?php
}
break;
case 'lname':
$stmt = $db->query("SELECT * FROM users");
while($row = $stmt->fetch_assoc()){ ?>
<tr>
<td><?php echo $row['lname'];?></td>
</tr><?php
}
break;
}
}
}
else {
$stmt = $db->query("SELECT * FROM users");
while($row = $stmt->fetch_assoc()){ ?>
<tr>
<td><?php echo $row['fname'];?></td>
<td><?php echo $row['lname'];?></td>
</tr><?php
}
}?>
</table>
</form>
Комментарии:
1. Я предполагаю, что у вас есть именованный элемент под названием
select1
? Этого нигде нет в вашем вопросе, и весь ваш запрос зависит от этого. Добавьте сообщение об ошибках в начало вашего файла (ов)error_reporting(E_ALL); ini_set('display_errors', 1);
посмотрите, даст ли это что-нибудь.2. О, извините, я немного устал! Да, у меня есть первое меню выбора, название которого «select1». Это глобальный выбор, основанный на столбцах html. Например: Если пользователь выберет «Code», то ему будут возвращены все данные из столбца
data
из моей базы данных; и т.д.3. Тогда примите мое предложение. Немного поспите и вернитесь к работе со свежей головой. Поверьте мне, это работает, и вы, вероятно, в конечном итоге поблагодарите меня за это. Усталая голова создает усталый код 😉
4. кроме того, вы захотите усовершенствовать это, чтобы вы действительно писали свой запрос и выполняли его один раз и просто запускали его с переменными, которые получены из отправленных форм.
Ответ №1:
Ваш пример кода неполон. То, как это написано, многие из ваших вариантов поиска не будут работать. Я бы попробовал выбрать select2 и P1. Это должно сработать.
Но во всех ваших операторах IF потенциально есть ошибка. Вы не должны просто проверять, установлена ли переменная $ _POST, вы должны убедиться, что она не равна нулю или нулевой длине (strlen($var) > 0). Переменные Post могут быть «установлены», но все еще не были отправлены с фактическими данными.
Я бы удалил из вашего примера все, что не связано с select2, и посмотрел, сможете ли вы заставить его работать в гораздо более простом формате.
И, конечно, разбивать весь ваш SQL и PHP-код на кучу HTML — плохая идея, но это не входит в суть вопроса.
Комментарии:
1. В этом и заключается проблема. Я попробовал приведенный вами пример для одного меню выбора и одного окна поиска, и это сработало. Но когда он начинает работать полностью как приложение, он терпит неудачу. И это меня так злит, потому что я чувствую, что что-то «маленькое» меняет ситуацию от неработающей к противоположной.