2

我有一个插入多行的表单。表单有六行字段。用户可以决定使用所有六行或使用几行。当所有六行都填满时,我使用下面的代码,它工作正常。

下面的代码工作正常

    //Database connection string
 global $conn;

//insert Records
$strSQLInsert = "insert into tbl_sales (Depot_Id,SalesProduct_Id,Sales_Date,Distributor_Id,Selling_Price,Units_Sold,Trns_type) values

('".$Af_Depot."','".$Af_Product2."','".$Af_Date."','".$Af_Dist."','".$Af_Price2."','".$Af_Qty2."','".$Af_Trans."'), 
('".$Af_Depot."','".$Af_Product3."','".$Af_Date."','".$Af_Dist."','".$Af_Price3."','".$Af_Qty3."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product4."','".$Af_Date."','".$Af_Dist."','".$Af_Price4."','".$Af_Qty4."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product5."','".$Af_Date."','".$Af_Dist."','".$Af_Price5."','".$Af_Qty5."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product6."','".$Af_Date."','".$Af_Dist."','".$Af_Price6."','".$Af_Qty6."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product1."','".$Af_Date."','".$Af_Dist."','".$Af_Price1."','".$Af_Qty1."','".$Af_Trans."')";
db_exec($strSQLInsert,$conn);

但是,当我尝试包含一个 php if 语句以省略空行时,它会给我一个错误。在下面的代码中,我尝试测试第一行但它不起作用。如果您有任何想法,请提供帮助。

//Database connection string
 global $conn;

//insert Records
$strSQLInsert = "insert into tbl_sales (Depot_Id,SalesProduct_Id,Sales_Date,Distributor_Id,Selling_Price,Units_Sold,Trns_type) values

"if ($Af_Qty2 > 0){     //error occurs here
('".$Af_Depot."','".$Af_Product2."','".$Af_Date."','".$Af_Dist."','".$Af_Price2."','".$Af_Qty2."','".$Af_Trans."'), 
  }"

('".$Af_Depot."','".$Af_Product3."','".$Af_Date."','".$Af_Dist."','".$Af_Price3."','".$Af_Qty3."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product4."','".$Af_Date."','".$Af_Dist."','".$Af_Price4."','".$Af_Qty4."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product5."','".$Af_Date."','".$Af_Dist."','".$Af_Price5."','".$Af_Qty5."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product6."','".$Af_Date."','".$Af_Dist."','".$Af_Price6."','".$Af_Qty6."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product1."','".$Af_Date."','".$Af_Dist."','".$Af_Price1."','".$Af_Qty1."','".$Af_Trans."')";
db_exec($strSQLInsert,$conn);
4

3 回答 3

1

尝试一下。

//Database connection string
global $conn;

//insert Records
$strSQLInsert = "insert into tbl_sales (Depot_Id,SalesProduct_Id,Sales_Date,Distributor_Id,Selling_Price,Units_Sold,Trns_type) values ";

if ($Af_Qty2 > 0){   
    $strSQLInsert .= "('".$Af_Depot."','".$Af_Product2."','".$Af_Date."','".$Af_Dist."','".$Af_Price2."','".$Af_Qty2."','".$Af_Trans."'),";
}

$strSQLInsert .= "('".$Af_Depot."','".$Af_Product3."','".$Af_Date."','".$Af_Dist."','".$Af_Price3."','".$Af_Qty3."','".$Af_Trans."'),";
$strSQLInsert .= "('".$Af_Depot."','".$Af_Product4."','".$Af_Date."','".$Af_Dist."','".$Af_Price4."','".$Af_Qty4."','".$Af_Trans."'),";
$strSQLInsert .= "('".$Af_Depot."','".$Af_Product5."','".$Af_Date."','".$Af_Dist."','".$Af_Price5."','".$Af_Qty5."','".$Af_Trans."'),";
$strSQLInsert .= "('".$Af_Depot."','".$Af_Product6."','".$Af_Date."','".$Af_Dist."','".$Af_Price6."','".$Af_Qty6."','".$Af_Trans."'),";
$strSQLInsert .= "('".$Af_Depot."','".$Af_Product1."','".$Af_Date."','".$Af_Dist."','".$Af_Price1."','".$Af_Qty1."','".$Af_Trans."');";

db_exec($strSQLInsert,$conn);
于 2013-04-10T07:45:17.313 回答
0

您不能在双引号内写 If 条件。所以尝试如下:

$strSQLInsert = "insert into tbl_sales (Depot_Id,SalesProduct_Id,Sales_Date,Distributor_Id,Selling_Price,Units_Sold,Trns_type) values ";

if ($Af_Qty2 > 0){     //error occurs here
$strSQLInsert .= "('".$Af_Depot."','".$Af_Product2."','".$Af_Date."','".$Af_Dist."','".$Af_Price2."','".$Af_Qty2."','".$Af_Trans."'),";
  }

$strSQLInsert .="('".$Af_Depot."','".$Af_Product3."','".$Af_Date."','".$Af_Dist."','".$Af_Price3."','".$Af_Qty3."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product4."','".$Af_Date."','".$Af_Dist."','".$Af_Price4."','".$Af_Qty4."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product5."','".$Af_Date."','".$Af_Dist."','".$Af_Price5."','".$Af_Qty5."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product6."','".$Af_Date."','".$Af_Dist."','".$Af_Price6."','".$Af_Qty6."','".$Af_Trans."'),
('".$Af_Depot."','".$Af_Product1."','".$Af_Date."','".$Af_Dist."','".$Af_Price1."','".$Af_Qty1."','".$Af_Trans."')";
db_exec($strSQLInsert,$conn);
于 2013-04-10T07:39:38.233 回答
0

正如您在评论中提到的,您只是在学习 PHP,所以我想指出一些事情。

首先,SQL Injection,只是做你的研究,阅读它是什么以及如何预防它。

其次,使用$Af_PriceN哭声来使用数组

$prices = array(...);
$products = array(...);

或者在理想世界中,您将创建包含所有数据的类:

class Product {
    public $id;
    public $price;

    public function __construct($id, $price)
    {
        $this->id = $id;
        $this->price = $price;
    }
}

$p = array(
    new Product(1, 17.85),
    new Product(2, 19.47),
    ...
)

然后你可以foreach用来构建复杂的查询:

foreach( $p as $prod){
    // append product to query
}

但是回到您的示例,假设您将每个替换$Af_fooN$Af_foo = array,那么您可以:

$rows = array();

for( $i = 0; $i < count( $Af_Product); $i++){
    if( $Af_Qty[$i]){
        continue;
    }

    $r = "('".$Af_Depot."','".$Af_Product[$i]."','".$Af_Date."','".$Af_Dist."',
          '".$Af_Price[$i]."','".$Af_Qty[$i]."','".$Af_Trans."')";

    array_push( $rows, $r);
}

// And join rows
if( count( $rows)){
    $strSQLInsert = "insert into tbl_sales (Depot_Id,SalesProduct_Id,Sales_Date,Distributor_Id,Selling_Price,Units_Sold,Trns_type) values ";
    $strSQLInsert .= implode( ',', $rows);
}

签出array_pushimplode。但是你仍然没有转义值,所以让我们定义db_esc为类似于mysqli_real_escape_string.

$r = "('".db_esc($Af_Depot)."','".db_esc($Af_Product[$i])...;

键入真的很烦人,因此您可以使用以下功能的优势array_map

// Inside loop:
$pieces = array( $Af_Depot, $Af_Product[$i], $Af_Date, $Af_Dist,
                 $Af_Price[$i], $Af_Qty[$i], $Af_Trans);

$pieces = array_map( 'db_esc', $pieces);

// And here comes a trick:
$r = "('" . implode( "','", $pieces) . ")";

所以总结一下整个代码:

// Assuming
$Af_Depot = ...;
$Af_Date = ...;
$Af_Trans = ...;

$Af_Product = array();
$Af_Price = array();
$Af_Qty = array();

// Prepare
$rows = array();

// Go trough items:

for( $i = 0; $i < count( $Af_Product); $i++){
    if( $Af_Qty[$i]){
        continue;
    }

    $pieces = array( $Af_Depot, $Af_Product[$i], $Af_Date, $Af_Dist,
                     $Af_Price[$i], $Af_Qty[$i], $Af_Trans);

    $pieces = array_map( 'db_esc', $pieces);
    $r = "('" . implode( "','", $pieces) . ")";

    array_push( $rows, $r);
}

// And join rows
if( count( $rows)){
    $strSQLInsert = "insert into tbl_sales (Depot_Id,SalesProduct_Id,Sales_Date,Distributor_Id,Selling_Price,Units_Sold,Trns_type) values ";
    $strSQLInsert .= implode( ',', $rows);
}
于 2013-04-10T08:49:13.713 回答