0

同じfunctions.phpページを指す2つのフォームがあります

1つのフォームにはVechileTypePricingの2つの入力フィールドがあり、もう1つのフォームにはVechileTypePricingCoverageRegionの3つの入力タイプがあります。

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つのクエリは他のフォームが設​​定されている場合にのみ実行します。記入。

CoverageRegionが設定されていない場合、最初の2つを実行すると言う方法はありますか?

4

3 に答える 3

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);
于 2012-04-16T10:19:00.847 に答える
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 
    }
}
于 2012-04-16T10:08:37.210 に答える
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
于 2012-04-16T10:38:30.107 に答える