如何使用具有多个输入但仅使用输入值更新输入的表单更新mysql记录

如何使用具有多个输入但仅使用输入值更新输入的表单更新mysql记录,mysql,syntax,Mysql,Syntax,所以我的问题是,我有一个由三部分组成的表单,是一张服务票,表单的第一部分由调度员填写并提交给mysql,然后,技师看到他们通过电子邮件分配了一张工单,他们调出分配给他们的工单的搜索结果,然后单击搜索结果中的链接,显示第二张表格,让他们输入他们所做的事情以及材料和劳动力,表单的第二部分是我的问题,它有多个类似的值,例如item_qty1、item_qty2、item_qty3等等。当我在更新票证集查询中使用超过1个值(如item_qty1)时,我会得到一个语法错误。另外,我很清楚我的代码受到sql

所以我的问题是,我有一个由三部分组成的表单,是一张服务票,表单的第一部分由调度员填写并提交给mysql,然后,技师看到他们通过电子邮件分配了一张工单,他们调出分配给他们的工单的搜索结果,然后单击搜索结果中的链接,显示第二张表格,让他们输入他们所做的事情以及材料和劳动力,表单的第二部分是我的问题,它有多个类似的值,例如item_qty1、item_qty2、item_qty3等等。当我在更新票证集查询中使用超过1个值(如item_qty1)时,我会得到一个语法错误。另外,我很清楚我的代码受到sql注入的影响,当我有一个工作表单时,我会处理这个问题。这是我的代码:

<?php
// database connection //

include 'db_connect.php';



include 'data/var/variables.php';

//Writes the information to the database

    mysql_query("UPDATE tickets SET     work_performed = $work_performed,
                                        item_qty1 = $item_qty1,
                                        item_qty2 = $item_qty2,
                                        item_qty3 = $item_qty3,
                                        item_qty4 = $item_qty4,
                                        item_qty5 = $item_qty5,
                                        manuf_1 = $manuf_1, 
                                        manuf_2 = $manuf_2,  
                                        manuf_3 = $manuf_3, 
                                        manuf_4 = $manuf_4,
                                        manuf_5 = $manuf_5,
                                        part_number1 = $part_number1,
                                        part_number2 = $part_number2,
                                        part_number3 = $part_number3,
                                        part_number4 = $part_number4,
                                        part_number5 = $part_number5,
                                        part_description1 = $part_description1, 
                                        part_description2 = $part_description2, 
                                        part_description3 = $part_description3, 
                                        part_description4 = $part_description4,
                                        part_description5 = $part_description5, 
                                        part_price1 = $part_price1, 
                                        part_price2 = $part_price2, 
                                        part_price3 = $part_price3, 
                                        part_price4 = $part_price4, 
                                        part_price5 = $part_price5,
                                        price_extension1 = $price_extension1, 
                                        price_extension2 = $price_extension2, 
                                        price_extension3 = $price_extension3, 
                                        price_extension4 = $price_extension4, 
                                        price_extension5 = $price_extension5, 
                                        material_total = $material_total, 
                                        sales_tax = $sales_tax, 
                                        shipping_cost = $shipping_cost, 
                                        work_date1 = $work_date1,
                                        work_date2 = $work_date2,   
                                        work_date3 = $work_date3, 
                                        work_date4 = $work_date4, 
                                        work_date5 = $work_date5, 
                                        tech_name1 = $tech_name1, 
                                        tech_name2 = $tech_name2, 
                                        tech_name3 = $tech_name3, 
                                        tech_name4 = $tech_name4, 
                                        tech_name5 = $tech_name5, 
                                        cost_code1 = $cost_code1, 
                                        cost_code2 = $cost_code2, 
                                        cost_code3 = $cost_code3, 
                                        cost_code4 = $cost_code4, 
                                        cost_code5 = $cost_code5, 
                                        pay_rate1 = $pay_rate1, 
                                        pay_rate2 = $pay_rate2, 
                                        pay_rate3 = $pay_rate3, 
                                        pay_rate4 = $pay_rate4,
                                        pay_rate5 = $pay_rate5, 
                                        total_hours1 = $total_hours1, 
                                        total_hours2 = $total_hours2, 
                                        total_hours3 = $total_hours3, 
                                        total_hours4 = $total_hours4, 
                                        total_hours5 = $total_hours5, 
                                        hours_subtotal1 = $hours_subtotal1, 
                                        hours_subtotal2 = $hours_subtotal2, 
                                        hours_subtotal3 = $hours_subtotal3, 
                                        hours_subtotal4 = $hours_subtotal4, 
                                        hours_subtotal5 = $hours_subtotal5, 
                                        total_hours = $total_hours, 
                                        material_total = $material_total, 
                                        labor_cost = $labor_cost, 
                                        grand_total = $grand_total  WHERE `id` = '$id'"); 




mysql_affected_rows();

echo mysql_error();

?>

这段修改过的代码每次都能完美地工作,没有语法错误,每次都会发布到选定的记录中,但是,这对我来说不起作用,我需要额外的值,或者如果用户需要,我需要一种向表单中添加额外字段的方法,这将解决我的问题,即除非他们必须在每个字段中输入值,否则不必在每个字段中输入值。此外,如果有人有任何关于如何压缩它,使之更“功能性”的例子,我想,这将是非常感谢。谢谢

要优化代码,可以做的是:

// define an array of column names and values got from input.
$column_names = array('column1' => $column1, 'column2' => $column2, .....);

// built an sql select clause
$select_clause = array();
foreach ($column_names as $cn => $cn_val) {
 if (!empty($cn_val)) {
   $select_clause = "{$cn} = {$cn_val}";
 }
}
// built proper query
$sql = "UPDATE table_name SET" . implode(',', $select_clause) . " table_name WHERE .....";

// continue with your stuff.

对于MySQL的库函数MySQL的RealMyLovieEngEnter字符串,您是否使用myQuxRealReleSeEx Strug(),它为下列字符准备了反斜杠:\x00,\n,\r,\,','和\x1a.@ sAsNSAN。或PDO::quote()..@sAnS不,我没有,我不明白你想说什么,因为我的问题是,查询要求我在列出的每个值中输入一些东西,并且我并不总是需要在每个值中添加一些东西。因此,如果我在items字段中只输入1个项目,并将item_qty2、item_qty3等保留为空,我会得到一个语法错误,除非我删除ose查询中的值。您应该使用escape函数来转义导致错误的任何不需要的字符或代码,并且在SQL语句中不受SQL注入的影响。我将尝试一下,看看它是如何工作的,感谢您的帮助jospratik。我不知道这个网站有什么问题,但使用@jospratik是成功或失败的有时它能工作,但大多数时候它不能!
// define an array of column names and values got from input.
$column_names = array('column1' => $column1, 'column2' => $column2, .....);

// built an sql select clause
$select_clause = array();
foreach ($column_names as $cn => $cn_val) {
 if (!empty($cn_val)) {
   $select_clause = "{$cn} = {$cn_val}";
 }
}
// built proper query
$sql = "UPDATE table_name SET" . implode(',', $select_clause) . " table_name WHERE .....";

// continue with your stuff.