MySQL 查询的预准备列名称不起作用

Pre-prepared column names for MySQL query not working

我有这个 PHP 文件,它应该获取通过表单提交给它的所有信息,并将其放入 MySQL 数据库中。现在,我正处于确保拥有所有信息的阶段,并且正在准备 "insert into (" . $var . ")" 类型的查询。

数组:

$merged_arrays = array( 
    $sales_rep = strtoupper($_POST['sales_rep']),
    $c_first_name = strtoupper($_POST['c_first_name']),
    $c_last_name = strtoupper($_POST['c_last_name']),
    $c_address = strtoupper($_POST['c_address']),
    $c_zip = strtoupper($_POST['c_zip']),
    $deal_number = strtoupper($_POST['deal_number']),
    $deal_stock_number = strtoupper($_POST['deal_stock_number']),
    $deal_selling_model = strtoupper($_POST['deal_selling_model']),
    $deal_new_status = strtoupper($_POST['deal_new_status']),
    $deal_dh = strtoupper($_POST['deal_dh']),
    $deal_finance_amount = strtoupper($_POST['deal_finance_amount']),
    $deal_pack = strtoupper($_POST['deal_pack']),
    $deal_retro = strtoupper($_POST['deal_retro']),
    $deal_holdback = strtoupper($_POST['deal_holdback']),
    $sales_rep2 = strtoupper($_POST['sales_rep2']) or $sales_rep2 = null,
    $deal_trade_in_model_1 = strtoupper($_POST['deal_trade_in_model_1']),
    $deal_trade_in_amount_1 = strtoupper($_POST['deal_trade_in_amount_1']),
    $deal_trade_in_model_2 = strtoupper($_POST['deal_trade_in_model_2']),
    $deal_trade_in_amount_2 = strtoupper($_POST['deal_trade_in_amount_2']),
    $deal_reserve_amount = strtoupper($_POST['deal_reserve_amount']),
    $deal_warrantee = strtoupper($_POST['deal_warrantee']),
    $deal_gap = strtoupper($_POST['deal_gap']),
    $deal_etch = strtoupper($_POST['deal_etch']),
    $deal_maintenence = strtoupper($_POST['deal_maintenence']),
    $deal_gross = strtoupper($_POST['deal_gross']));

补充数组: 这是数组 "dictionary",它存储 php 变量到 table 中的文字列名称的所有翻译。

$column_dictionary = array(
    $sales_rep = "Sales Rep 1",
    $c_first_name = "Customer First Name",
    $c_last_name = "Customer Last Name",
    $c_address = "Street Address",
    $c_zip = "Zip",
    $c_city = "City",
    $c_state = "State",
    $deal_number = "Deal Number",
    $deal_stock_number = "Stock #",
    $deal_selling_model = "Model",
    $deal_new_status = "New/Used",
    $deal_dh = "Destination and Handling Amount",
    $deal_finance_amount = "Financing Amount",
    $deal_pack = "Pack Amount",
    $deal_retro = "Retro Amount",
    $deal_holdback = "Holdback Amount",
    $sales_rep2 = "Sales Rep 2",
    $deal_trade_in_model_1 = "Trade-In Vehicle 1 Description",
    $deal_trade_in_amount_1 = "Trade-In Vehicle 1 Amount",
    $deal_trade_in_model_2 = "Trade-in Vehicle 2 Description",
    $deal_trade_in_amount_2 = "Trade-in Vehicle 2 Amount",
    $deal_reserve_amount = "Reserve Amount",
    $deal_warrantee = "Warrantee Amount",
    $deal_gap = "Gap Amount",
    $deal_etch = "Etch Amount",
    $deal_maintenence = "Maintenance Amount",
    $deal_gross = "Gross Amount");

While 循环: 循环计算数组 $merged_arrays 以查看是否有任何内容。如果有内容,则应将其放入变量 $columms 中。

$columns = "";
$i = 0;
while($i < 26) {
    if (!$merged_arrays[$i] == false) {
        $columns = $columns . "`" . $column_dictionary[$i] . "`, ";
    }
    $i = $i + 1;
}

问题: 当我 运行 这个,提交了带有值的表单时, $deal_trade_in_model_2 一直在列变量中显示(连同它的兄弟,$deal_trade_in_amount_2),不管表单中是否有输入或不。 $deal_maintenence 以及 $deal_gross 从未列出,即使我 运行 一个 javasacript 函数来确保它们都设置为“$0”(因为它是一个货币字段。我'在过去的几个小时里,我几乎尝试了所有我能想到的方法,我真的需要了解我做错了什么,这样我就不会再犯同样的错误。

我附上了页面的 JS Fiddle 及其发送到的表单,以及所有 JS 和 CSS。

http://jsfiddle.net/23smyy8g/

回答这个问题时,请扮演老师的角色。我喜欢从错误中学习。 :)

命名数组使用箭头符号。

$myArray = array(
     'sales_rep' => 'Sales rep name',
     'company' => 'Company Name'
);

编辑

您可以使用 foreach 循环来避免处理递增步骤。此外,您的 if 语句似乎也导致了问题。

if (!$merged_arrays[$i] == false)

! not 运算符的优先级高于 == 比较,因此这不是该列,并检查它是否为假,这很可能不是您正在尝试的。我假设您希望检查它是否不是 null/falsey,空函数可用于此目的。如果您只想检查它是否为假,请像这样使用 != 运算符:

if ($merged_arrays[$i] != false)

还要注意 .=$str = $str . 'extra' 更简洁。

$columns = "";
foreach ($merged_arrays  as $key => $column)
    if (!empty($column)) {
        $columns .= "`" . $column_dictionary[$key] . "`, ";
    }
}

进一步编辑

您应该按以下方式构建数组:

array(
    'key1' => value1,
    'key2' => value2
)

您的数组实际上保存了变量赋值的结果。