Ajax, PHP, Javascript, умное решение - PullRequest
0 голосов
/ 13 октября 2009

В настоящее время я создаю тип сайта "объявлений", и когда пользователь заходит на сайт, он / она может выбрать, например, "Транспортные средства" в раскрывающемся списке, а затем выбрать пробег, год, диапазон цен и т. Д. ..

Вот моя проблема, мне удалось установить контакт с БД, используя Ajax для вызова сценария php, который затем проверяет mysql db на критерии поиска и возвращает результат. НО, мне нужно сделать это как можно более "умным" ...

Как я могу создать функцию или, возможно, цикл, чтобы проверить, какую категорию выбрал пользователь, а затем посмотреть, если пользователь сделал какие-либо спецификации, например, по цене или пробегу, а затем создать строку запроса для отправки в код php, который затем проверяет базу данных mysql на предмет поиска?

Вот немного кода из файла Ajax:

//Browser Support Code
function ajaxFunction(){
var ajaxRequest;  // The variable that makes Ajax possible!

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
            // Something went wrong
            alert("Your browser broke!");
            return false;
        }
    }
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
        var ajaxDisplay = document.getElementById('cont');
        ajaxDisplay.innerHTML = ajaxRequest.responseText;
    }
}       

var category = document.getElementById('nav_category_list').value;
var city = document.getElementById('nav_city_list').value;
var querystring = document.getElementById('nav_querystring').value;
var cars_price_from = document.getElementById('cars_price_from').value;
var cars_price_to = document.getElementById('cars_price_to').value;
var cars_year_from = document.getElementById('cars_yr_from').value;
var cars_year_to = document.getElementById('cars_yr_to').value;
var cars_mileage_from = document.getElementById('cars_mile_from').value;
var cars_mileage_to = document.getElementById('cars_mile_to').value;
var cars_grbx = document.getElementById('cars_grbx').value;
var cars_fuel = document.getElementById('cars_fuel').value;

var send_query = "?category=" + category + "&city=" + city + "&cars_price_from=" + cars_price_from + "&cars_price_to=" + cars_price_to + "&cars_year_from=" + cars_year_from + "&cars_year_to=" + cars_year_to + "&cars_mileage_from=" + cars_mileage_from + "&cars_mileage_to=" + cars_mileage_to + "&cars_grbx=" + cars_grbx + "&cars_fuel=" + cars_fuel +"&querystring=" + querystring;

ajaxRequest.open("GET", "bincgi/ajax-example.php" + send_query, true);
ajaxRequest.send(null); 
}

Отредактировано, чтобы добавить:

У меня нет времени изучать jQuery. Извините, ребята, но не могли бы вы указать мне правильное направление, когда дело доходит до кодирования этого ...

Каким будет «лучший» способ делать то, что я хочу?

Кроме того, возникает ошибка, если все элементы массива, которые я отправляю в файл php, не заполнены значениями ... Если массив пуст, сценарий завершится сбоем ...

Любые предложения о том, как решить эту проблему легко?

Ответы [ 5 ]

3 голосов
/ 13 октября 2009

Почему бы просто не добавить элемент-> значение в массив (используя jQuery) после выбора пользователя и передать этот массив в php?

В PHP разбить массив и проверить каждый элемент?

1 голос
/ 13 октября 2009

Узнайте jQuery! Серьезно, это действительно просто.

0 голосов
/ 13 октября 2009

В javascript проверьте значение каждого элемента, если оно не равно нулю, если (a! = ''), То только конкатенация в строковом аргументе. сделать один аргумент с некоторым разделителем и взорваться в php-файле и в соответствии с этим сделать SQL-запрос.

0 голосов
/ 13 октября 2009

Создайте общие методы, подобные этому

function getElementValue(id)
{
   if(document.getElementById(id) != null) 
   {
     return document.getElementById(id).value;
   }
}

Затем дайте уникальный идентификатор для ваших выпадающих списков, таких как catagory1 - 10, затем итерируйте его с циклами и используйте метод.

0 голосов
/ 13 октября 2009

А вот код PHP, к которому призывает приведенный выше код ajax:

    $category = $_GET['category'];
    $city = $_GET['city'];
    $querystring = $_GET['querystring'];
// Escape User Input to help prevent SQL Injection
$category = mysql_real_escape_string($category);
$city = mysql_real_escape_string($city);
$querystring = mysql_real_escape_string($querystring);
$cars_price_from = $_GET['cars_price_from'];
$cars_price_to = $_GET['cars_price_to'];
$cars_year_from = $_GET['cars_year_from'];
$cars_year_to = $_GET['cars_year_to'];
$cars_mileage_from = $_GET['cars_mileage_from'];
$cars_mileage_to = $_GET['cars_mileage_to'];
$cars_gearbox = $_GET['cars_grbx'];
$cars_fuel = $_GET['cars_fuel'];

//build query
    $query = "SELECT * FROM cars_db WHERE price BETWEEN '$cars_price_from' AND '$cars_price_to' AND year BETWEEN '$cars_year_from' AND '$cars_year_to' AND mileage BETWEEN '$cars_mileage_from' AND '$cars_mileage_to' AND gearbox = '$cars_gearbox' AND fuel = '$cars_fuel'";
//Execute query
    $qry_result = mysql_query($query) or die(mysql_error());

//Build Result String
    $display_table = "<table class='ad_container'>";

// Insert a new row in the table for each result
    while($row = mysql_fetch_array($qry_result)){
if ($row['area_id']=='1') {$row['area_id']="Göteborg";}
$display_table .= "<tr>";
$display_table .= "<td width='110' rowspan='2'>BILD</td>";
$display_table .= "<td width='377' height='15'>$row[headline]</td>";
$display_table .= "<td width='98' rowspan='2'>$row[area_id]</td>";
$display_table .= "<td width='67' rowspan='2'>$row[insert_date]</td>";
$display_table .= "</tr>";
$display_table .= "<tr>";
$display_table .= "<td height='15'>$row[price]:-</td>";
$display_table .= "</tr>";
     }

    //echo "Query: " . $query . "<br />";
    $display_table .= "</table>";
    echo $display_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...