SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.02.2013 04:49:55

cro
Участник
Зарегистрирован: 15.02.2013
Сообщений: 13

PHP SQL Выборка по разным параметрам, поля, чекбоксы.

Здравствуйте.
Подскажите пожалуйста реализацию выборки по разным параметрам.
Вот часть кода, работает корректно если выбраны оба селекта.
Как сделать что бы работал только второй фильтр(host_type) если первый(host_name) не выбран?
send_data.php


$q1=mysql_query("SELECT host_name FROM main_data");
echo '<select id="host_name">';
echo '<option value="">All</option>';
while($rowa=mysql_fetch_array($q1))
    {
    echo '<option value="'.$rowa['host_name'].'">';
    echo $rowa['host_name'].'</option>';
    }
echo '</select><br/>';
$q2=mysql_query("SELECT DISTINCT host_type FROM main_data");
echo '<select id="host_type">';
while($rowb=mysql_fetch_array($q2))
    {
    echo '<option value="'.$rowb['host_type'].'">';
    echo $rowb['host_type'].'</option>';
    }
echo '</select><br/>';
echo '<input type="submit" value="Search" onclick="recivedata();">'
 

recive_data.php
$q1=mysql_query("SELECT * FROM main_data WHERE host_name LIKE '$_POST[host_name]'
                AND host_type LIKE '$_POST[host_type]' "
);


Проблема в том, что если $_POST[host_name] (пустой) не был выбран в тэге селекта - обрабатывается пустая строка.
Спасибо.

Отредактированно cro (15.02.2013 05:55:15)

Неактивен

 

#2 15.02.2013 09:25:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: PHP SQL Выборка по разным параметрам, поля, чекбоксы.

Можно собирать строку $q1 "по кусочкам".
то есть сначала $q1 = "SELECT * FROM main_data";
А потом уже, если $_POST[host_name] не пустой, то добавляйте к $q1 соотв. условие WHERE.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 15.02.2013 17:51:04

cro
Участник
Зарегистрирован: 15.02.2013
Сообщений: 13

Re: PHP SQL Выборка по разным параметрам, поля, чекбоксы.

Будьте добры, напишите пример.

Неактивен

 

#4 15.02.2013 18:03:00

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: PHP SQL Выборка по разным параметрам, поля, чекбоксы.


$query = "SELECT * FROM `main_data` WHERE TRUE ";
if ( isset($_POST['host_type']) ) {
  $query .= " AND `host_type` LIKE '" . mysql_real_escape_string($_POST['host_type']) . "' ";
}
if ( isset($_POST['host_name']) ) {
  $query .= " AND `host_name` LIKE '" . mysql_real_escape_string($_POST['host_name']) . "' ";
}
 


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 15.02.2013 18:57:51

cro
Участник
Зарегистрирован: 15.02.2013
Сообщений: 13

Re: PHP SQL Выборка по разным параметрам, поля, чекбоксы.

Данные php скрипту передаются через ajax -

function recivedata() {
$.ajax({
type: 'POST',
url: "recive-data.php",
data: {
        host_name: $('#host_name').val(),
        host_type: $('#host_type').val()
    },
    success: function(data){$('#resp').html(data);}}
)}


php скрипт
<?
header('Content-type: text/html; charset="utf-8"');
include 'dbinfo.php';
$q1=mysql_query("SELECT * FROM `main_data` WHERE TRUE ");
if ( isset($_POST['host_type']) ) {
  $q1 .= " AND `host_type` LIKE '$_POST[host_type]' ";
}
if ( isset($_POST['host_name']) ) {
  $q1 .= " AND `host_name` LIKE '$_POST[host_name]' ";
}
echo '<table class="table" border="1"><tr><th>Header 1</th><th>Header 2</th><th>Header 3</th></tr>';
while($rowa=mysql_fetch_array($q1))
    {
    echo "<tr>";
    echo '<td>'.$rowa['host_name'].'</td>';
    echo '<td>'.$rowa['host_type'].'</td>';
    echo '<td>'.$rowa['disc_space'].'</td>';
    echo "</tr>";
    }
mysql_close($link);
?>


Выдаёт ошибку -
Warning: mysql_fetch_array() expects parameter 1 to be resource


Поправьте пожалуйста.

Неактивен

 

#6 15.02.2013 20:27:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: PHP SQL Выборка по разным параметрам, поля, чекбоксы.

Не-не-не, Дэвид Блейн...
Не
$q1=mysql_query("SELECT * FROM `main_data` WHERE TRUE ");
а
$q1 = "SELECT * FROM `main_data` WHERE TRUE ";
Потом дополняем $q1 условиями, если в $_POST есть данные нужные.
И только потом уже делаете mysql_query($q1);
и так далее.

Еще, кстати, насчет:
$q1 .= " AND `host_type` LIKE '$_POST[host_type]' ";

Массив $_POST является ассоциаитвным, я бы понял, если бы Вы туда обращались $_POST['host_type']
или
$host_type = 'ЧТО_НИБУДЬ_В_ДУХЕ_ХОСТ_ТАЙП';
$_POST[$host_type]
А Ваша запись - не уверен, что она корректна.
Так что пишите лучше
$q1 .= " AND `host_type` LIKE '" . $_POST['host_type'] "'";
Ну а еще лучше, конечно, оборачивать строковые переменные, передаваемые базе в mysql_real_escape_string


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 15.02.2013 21:35:50

cro
Участник
Зарегистрирован: 15.02.2013
Сообщений: 13

Re: PHP SQL Выборка по разным параметрам, поля, чекбоксы.

Спасибо за помощь, вот так работает.

<?
header('Content-type: text/html; charset="utf-8"');
include 'dbinfo.php';

$q1 = "SELECT * FROM `main_data` WHERE TRUE ";
if ( isset($_POST['host_type']) ) {
  $q1 .= " AND `host_type` LIKE '$_POST[host_type]'";
}
if ( isset($_POST['host_name']) ) {
  $q1 .= " AND `host_name` LIKE '$_POST[host_name]'";
}
$ver=mysql_query($q1);

echo '<table class="table" border="1"><tr><th>Header 1</th><th>Header 2</th><th>Header 3</th></tr>';
while($rowa=mysql_fetch_array($ver))
    {
    echo "<tr>";
    echo '<td>'.$rowa['host_name'].'</td>';
    echo '<td>'.$rowa['host_type'].'</td>';
    echo '<td>'.$rowa['disc_space'].'</td>';
    echo "</tr>";
    }

mysql_close($link);
?>

Отредактированно cro (16.02.2013 00:10:48)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson