2012-04-16 3 views
0

У меня 2 формы, которые указывают на один и тот же functions.php страницезапроса, если некоторые переменные POST установлены

1 форма имеет 2 поля ввода, Vechile Тип и Цены, другой форма имеет 3 типа ввода, Vechile ТипЦенообразование и Покрытие Регион

if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'fixed') { 
    // Query 
} 
else if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'pump') { 
    // Query 
} 
else if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'fixed' && $_POST['coverageRegion'] == 'national') { 
    // Query 
} 
else if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'pump' && $_POST['coverageRegion'] == 'international' ) { 
    // Query 
}  

Теперь мое заявление выше не работает, им новое для PHP поэтому, пожалуйста, простите мою наивность, но я хочу только первые 2 запросов для запуска с домашней страницы, где установлены только 2 переменных, а второе 2 запроса для запуска, когда заполняется другая форма.

Есть ли способ, который я могу сказать, если покрытиеRegion не установлено, запустите первые 2?

ответ

1
if (!isset($_POST['coverageRegion'])) 
{ 
    //run first two 
    if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'fixed') 
    { 
     // Query 
    } 
    else if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'pump') 
    { 
     // Query 
    } 
} 
else 
{ 
    // run other two 
    if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'fixed' && $_POST['coverageRegion'] == 'national') 
    { 
     // Query 
    } 
    else if ($_POST['vehicleType'] == 'lgv' && $_POST['pricing'] == 'pump' && $_POST['coverageRegion'] == 'international' ) 
    { 
     // Query 
    } 
} 
2

Я хотел бы сделать это следующим образом:

Я хотел бы сделать это следующим образом:

$where = array('1 = 1'); 
if(isset($_POST['vehicleType'])) { 
    $where[] = "vehicleType = '" . mysql_real_escape_string($_POST['vehicleType']) . "'"; 
} 
if(isset($_POST['pricing'])) { 
    $where[] = "pricing = '" . mysql_real_escape_string($_POST['pricing']) . "'"; 
} 
if(isset($_POST['coverageRegion'])) { 
    $where[] = "coverageRegion = '" . mysql_real_escape_string($_POST['coverageRegion']) . "'"; 
} 

// some more stuff 
// if(isset($_POST['integerColumn'])) { 
//  $where[] = "integerColumn = " . intval($_POST['integerColumn']); 
// } 
// if(count($where) == 1) { 
//  die("You must specify at least one search criteria"); 
// } 

$query = 'SELECT * FROM table WHERE ' . implode(' AND ', $where); 
+0

Clever вещи Салман +1 – vascowhite

0

Я хотел бы сделать это следующим образом:

$vehicle_types = array('lgv', 'hgv', 'plg',); 
$pricings = array('fixed', 'pump',); 
$regions = array('national', 'international',); 
// Variables to search for 
$params = array(); 
// Column names in the table 
$conditions = array(); 

$qry = 'SELECT column1, column2, column3 FROM tablename'; 

// Add vehicle type to query 
if ((isset($_POST['vehicleType'])) 
    && (in_array($_POST['vehicleType'], $vehicle_types))) { 
    $params[] = $_POST['vehicleType']; 
    $conditions[] = 'vehicleType = ?'; 
} 

// Add pricing to query 
if ((isset($_POST['pricing'])) 
    && (in_array($_POST['pricing'], $pricings))) { 
    $params[] = $_POST['pricing']; 
    $conditions[] = 'pricing = ?'; 
} 

// Add region to query 
if ((isset($_POST['coverageRegion'])) 
    && (in_array($_POST['coverageRegion'], $regions))) { 
    $params[] = $_POST['coverageRegion']; 
    $conditions[] = 'region = ?'; 
} 

if (count($params)) { 
    $qry .= ' WHERE ' . implode(' AND ', $conditions); 
    // Connect to database using PDO 
    $db = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'user', 'pass'); 
    $stmt = $db->prepare($qry); 
    $stmt->execute($params); 
    $result = $stmt->fetchAll(); 
    print_r($result); 
} 

Преимущества:

  • Нет if/else спагетти
  • Легко добавить больше вариантов в будущем
  • Нет необходимости mysql_real_escape_string из-за PDO подготовленных заявлений
  • Проверки, что допустимы только переменные принимаются от $_POST
Смежные вопросы