【问题标题】:Altering an array in PHP for CSV upload更改 PHP 中的数组以进行 CSV 上传
【发布时间】:2017-04-05 21:22:15
【问题描述】:

我的 PHP 代码中有一个包含大约 200 个列元素的数组。它看起来像这样:

$coldata = array();

$coldata[ "orderNumber" ] = $filesop[0];
$coldata[ "place" ] = $filesop[1];
$coldata[ "workOrderNum" ] = $filesop[2];
$coldata["lowSideMIUNum"] = $filesop[3];
$coldata["highSideMIUNum"] = $filesop[4];
$coldata["accountNum"] = $filesop[5];
$coldata["custName"] = $filesop[6];
$coldata["address"] = $filesop[7];
$coldata["locID"] = $filesop[8];

就像我说的,这会持续到大约 199/200。我今天发现 CSV 将保持此顺序,但他们以随机顺序添加了大约 30 个字段。有些会在前 20 个中,有些会在 110 和 120 之间。有没有更好的做法在这里添加新元素?我已经将它们添加到数据库中它们需要的位置,但现在我需要将它们放在数组中的正确位置,我不知道是否有办法不重新编号整个数组。

更新 完整的代码,除非对长或重复的元素进行编码

<?php

$server = "localhost";
$user = "root";
$pw = "root";
$db = "uwsTest";

$connect = mysqli_connect($server, $user, $pw, $db);

if ($connect->connect_error) {
die("Connection failed: " . $conn->connect_error);
}else{
    echo'success!';
}


if(isset($_POST['submit']))
{
ini_set('auto_detect_line_endings', true);

$file = $_FILES["file"]["tmp_name"];
$handle = fopen($file, "r");


$filesop = fgetcsv($handle, 0, ",");

$coldata = array();

$coldata[ "orderNumber" ] = $filesop[0];
$coldata[ "place" ] = $filesop[1];
$coldata[ "workOrderNum" ] = $filesop[2];   
$table_cols = array();

/*staging*/
$table_cols[0] = //200 element array code omitted

$tablenames = array("staging");

for($tableno = 0;$tableno < sizeof($tablenames);$tableno++){
$q = "";
$q2 = "";
$q3 = "";
$q4 = "";
$q5 = "";
$q6 = "";
$col_list = '`'.str_replace(',','`,`',$table_cols[$tableno]).'`';
$q .= "INSERT INTO ".$tablenames[$tableno]." (".$col_list.") VALUES (";
$last_id = mysqli_insert_id($connect);
$cols = explode(",",$table_cols[$tableno]);
$data = array();
foreach($cols as $key => $fldname) {
    $data[] = "'".$coldata[$fldname]."'";
}

/*INSERT INTO STAGING TABLE - INITAL CSV UPLOAD*/
$q .= implode(",",$data).");";

/*INSERT INTO CLIENTS TABLE FROM STAGING TABLE*/
$q2 .= "INSERT INTO clients (orderNumber,place,workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,date,utility,serialNumber,serviceName,address2,servicePreformed)
 SELECT orderNumber,place,workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,date,utility,serialNumber,serviceName,address2,servicePreformed
 FROM staging
 WHERE StageID = (SELECT MAX(StageID)FROM staging);";

 /*INSERT INTO METERS TABLE FROM STAGING TABLE*/
 $q3 .= "INSERT INTO meters (workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,utility,serialNumber,serviceName,bypassSize,meterSize,meterType,manufacturer,registration,technician,linePressurePSI,lat,lon,lowSideRrBefore,highSideRrBefore,firesideRrBefore,lowSideRrAfter,highSideRrAfter,firesideRrAfter,vgOxygen,vgCombustGas,vgCarbonMon,vgHydroSulf)
 SELECT workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,utility,serialNumber,serviceName,bypassSize,meterSize,meterType,manufacturer,registration,technician,linePressurePSI,lat,lon,lowSideRrBefore,highSideRrBefore,firesideRrBefore,lowSideRrAfter,highSideRrAfter,firesideRrAfter,vgOxygen,vgCombustGas,vgCarbonMon,vgHydroSulf 
 FROM staging
 WHERE StageID = (SELECT MAX(StageID)FROM staging);";

 /*INSERT INTO TESTS TABLE FROM STAGING TABLE*/
 $q4 .= "INSERT INTO tests (workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,date,utility,serialNumber,serviceName,test1TestRateGPM,test1MeterVol,test1TesterVol,test1Accuracy,test1CorrectAcc,test2TestRateGPM,test2MeterVol,test2TesterVol,test2Accuracy,test2CorrectAcc,test3TestRateGPM,test3MeterVol,test3TesterVol,test3Accuracy,test3CorrectAcc,test4TestRateGPM,test4MeterVol,test4TesterVol,test4Accuracy,test4CorrectAcc,test5TestRateGPM,test5MeterVol,test5TesterVol,test5Accuracy,test5CorrectAcc,test6TestRateGPM,test6MeterVol,test6TesterVol,test6Accuracy,test6CorrectAcc,test7TestRateGPM,test7MeterVol,test7TesterVol,test7Accuracy,test7CorrectAcc,test8TestRateGPM,test8MeterVol,test8TesterVol,test8Accuracy,test8CorrectAcc,inletValveSize,InletValveType,inletValveCond,outletValveSize,outletValveType,outletValveCond,bypassValveSize,bypassValveType,bypassValveCond,vaultLength,vaultWidth,vaultHeight,meterLocation,testPort,testPortInstalled,testPortSize,picture,comments,testResults,retest,test1TestRateGPM2,test1MeterVol2,test1TesterVol2,test1Accuracy2,test1CorrectAcc2,test2TestRateGPM2,test2MeterVol2,test2TesterVol2,test2Accuracy2,test2CorrectAcc2,test3TestRateGPM2,test3MeterVol2,test3TesterVol2,test3Accuracy2,test3CorrectAcc2,test4TestRateGPM2,test4MeterVol2,test4TesterVol2,test4Accuracy2,test4CorrectAcc2,test5TestRateGPM2,test5MeterVol2,test5TesterVol2,test5Accuracy2,test5CorrectAcc2,test6TestRateGPM2,test6MeterVol2,test6TesterVol2,test6Accuracy2,test6CorrectAcc2,test7TestRateGPM2,test7MeterVol2,test7TesterVol2,test7Accuracy2,test7CorrectAcc2,test8TestRateGPM2,test8MeterVol2,test8TesterVol2,test8Accuracy2,test8CorrectAcc2)
 SELECT workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,date,utility,serialNumber,serviceName,test1TestRateGPM,test1MeterVol,test1TesterVol,test1Accuracy,test1CorrectAcc,test2TestRateGPM,test2MeterVol,test2TesterVol,test2Accuracy,test2CorrectAcc,test3TestRateGPM,test3MeterVol,test3TesterVol,test3Accuracy,test3CorrectAcc,test4TestRateGPM,test4MeterVol,test4TesterVol,test4Accuracy,test4CorrectAcc,test5TestRateGPM,test5MeterVol,test5TesterVol,test5Accuracy,test5CorrectAcc,test6TestRateGPM,test6MeterVol,test6TesterVol,test6Accuracy,test6CorrectAcc,test7TestRateGPM,test7MeterVol,test7TesterVol,test7Accuracy,test7CorrectAcc,test8TestRateGPM,test8MeterVol,test8TesterVol,test8Accuracy,test8CorrectAcc,inletValveSize,InletValveType,inletValveCond,outletValveSize,outletValveType,outletValveCond,bypassValveSize,bypassValveType,bypassValveCond,vaultLength,vaultWidth,vaultHeight,meterLocation,testPort,testPortInstalled,testPortSize,picture,comments,testResults,retest,test1TestRateGPM2,test1MeterVol2,test1TesterVol2,test1Accuracy2,test1CorrectAcc2,test2TestRateGPM2,test2MeterVol2,test2TesterVol2,test2Accuracy2,test2CorrectAcc2,test3TestRateGPM2,test3MeterVol2,test3TesterVol2,test3Accuracy2,test3CorrectAcc2,test4TestRateGPM2,test4MeterVol2,test4TesterVol2,test4Accuracy2,test4CorrectAcc2,test5TestRateGPM2,test5MeterVol2,test5TesterVol2,test5Accuracy2,test5CorrectAcc2,test6TestRateGPM2,test6MeterVol2,test6TesterVol2,test6Accuracy2,test6CorrectAcc2,test7TestRateGPM2,test7MeterVol2,test7TesterVol2,test7Accuracy2,test7CorrectAcc2,test8TestRateGPM2,test8MeterVol2,test8TesterVol2,test8Accuracy2,test8CorrectAcc2
 FROM staging
 WHERE StageID = (SELECT MAX(StageID)FROM staging);";

 /*INSERT INTO COSTS TABLE FROM STAGING TABLE*/
 $q5 .= "INSERT INTO costs (workOrderNum,onsiteSurveyTestCost,onsiteSurveyTestRepairCost,offsiteSurveyTestCost,offsiteSurveyTestRepairCost,onsiteTestOnlyCost,onsiteTestRepairOnlyCost,onsiteRepairOnly,testPort2,repairCompleteMeterReplacement,repairCompleteMeterReplacementLaborCost,umeCost,umeLaborCost,rotatingLowSideDiskChamber,rotatingLowSideDiskChamberLaborCost,turbineChamberCost,turbineChamberLaborCost,automaticValveCost,automaticValveLaborCost,strainerCost,strainerLaborCost,lowRegisterCost,lowRegisterLaborCost,highRegisterCost,highRegisterLaborCost,miuCost,miuLaborCost,totalCost)
 SELECT workOrderNum,onsiteSurveyTestCost,onsiteSurveyTestRepairCost,offsiteSurveyTestCost,offsiteSurveyTestRepairCost,onsiteTestOnlyCost,onsiteTestRepairOnlyCost,onsiteRepairOnly,testPort2,repairCompleteMeterReplacement,repairCompleteMeterReplacementLaborCost,umeCost,umeLaborCost,rotatingLowSideDiskChamber,rotatingLowSideDiskChamberLaborCost,turbineChamberCost,turbineChamberLaborCost,automaticValveCost,automaticValveLaborCost,strainerCost,strainerLaborCost,lowRegisterCost,lowRegisterLaborCost,highRegisterCost,highRegisterLaborCost,miuCost,miuLaborCost,totalCost 
 FROM staging
 WHERE StageID = (SELECT MAX(StageID)FROM staging);";

 /*INSERT INTO WORKORDERS TABLE FROM STAGING TABLE*/
 $q6 .= "INSERT INTO workorders (workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,utility,serialNumber,serviceName)
 SELECT workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,utility,serialNumber,serviceName 
 FROM staging
 WHERE StageID = (SELECT MAX(StageID)FROM staging);";

 /*DEBUG ALL SQL QUERIES*/
echo "<p>\$q:<pre>".print_r($q,true)."</pre></p>\n";
echo "<p>\$q:<pre>".print_r($q2,true)."</pre></p>\n";
echo "<p>\$q:<pre>".print_r($q3,true)."</pre></p>\n";
echo "<p>\$q:<pre>".print_r($q4,true)."</pre></p>\n";
echo "<p>\$q:<pre>".print_r($q5,true)."</pre></p>\n";
echo "<p>\$q:<pre>".print_r($q6,true)."</pre></p>\n";
}

/*CONNECT INITAL QUERY AND GET ERROR*/
if(mysqli_multi_query($connect, $q)) {echo'File submitted'; } else {     /*var_dump($q)*/echo "Error: " . mysqli_error($connect); }

/*CONNECT OTHER QUERIES - NO ERROR PRINTING*/
mysqli_multi_query($connect,$q2);
mysqli_multi_query($connect,$q3);
mysqli_multi_query($connect,$q4);
mysqli_multi_query($connect,$q5);
mysqli_multi_query($connect,$q6);
}

?>

【问题讨论】:

  • 他们会向您发送第一行的列名吗?如果是这样,请关闭它并放弃数字索引。如果没有,您要么必须手动同步它们。
  • 正如@mkaatman 所问,CSV 在第一行有列名吗?如果是这样,这将使您能够极大地自动化流程并帮助检测未来的变化。
  • 显示代码!您不必显示数组的所有 200 行,而是显示用于导入数据的所有代码。
  • 当您阅读包含列名的第一行时,如果它们与表列的名称不匹配,您可能会有一个数组,其中的键与 CSV 中的列名匹配,并且与列名匹配的值。之后无需像在您的 OP 中那样维护数组。此外,由于您将基于数组创建 SQL,因此在更改 CSV 时字段的顺序并不重要
  • 我不知道你为什么使用 $filesop = print_r(fgetcsv($handle, 0, ",")); print_r 的目的是什么?将字段放在数组中肯定会使导入更容易。此外,您定义了 $q2 - $q6,但从不填充它们。尽管我在插入语句中看不到任何明显的问题,但考虑到它是如何构建的,很难知道。回显该语句,并在 phpAdmin 中尝试以查看您可能遇到的错误。也贴在这里,让我看看。

标签: php sql arrays database csv


【解决方案1】:

导入第一行包含列名的 CSV 文件。

允许您定义 CSV 中的列名与您将数据导入到的表中的列名之间的转换。

<?php

//  $c_colslist is an array of name/value pairs. The name matches a name in the CSV, 
//  while the value is the name of the column in the table where the value is stored.
//  If there are changes in the CSV, you only have to edit this array and the table staging.
//  If the change is only a change in the order of the fields, you do not have to edit anything.
$c_colslist = array(
    'orderNumber' => 'orderNumber',
    'place' => 'place',
    'workOrderNum' => 'workOrderNum',
    'Column1' => 'userName'
);


//  $csvCols is an array containing the list of column names found in the CSV file, in the order they are found.
$csvCols = array();

//  

$file = $_FILES["file"]["tmp_name"];
$handle = fopen($file, "r");


//  $rowIDs will contain a list of the unique IDs of all inserted rows.
$rowIDs = array();

$rowno = 0;
while(!feof($handle)){
    //  Get the row of data.
    //  If 1st row, it has the column names
    $rowno++;
    $row = fgetcsv($handle, 0, ",");
    if($rowno == 1) {
        //  Save the column name list
        $csvCols = $row;
        //  Pre-create the insert statement (all but the data)
        $qstr = "";
        $qstr .= "INSERT INTO `staging` (";
        $cols = array();
        //  $col_idx contains a list of indexes for each CSV column name (ie. the order they are found in the file)
        $col_idx = array(0);
        $colno = 0;
        foreach($csvCols as $idx => $c_colname) {
            $cols[$colno] = "`".$c_colslist[$c_colname]."`"
            $col_idx[$c_colname] = $colno;
            $colno++;
        }
        $qstr .= implode(',',$cols). ") ";
    } else {
        //  Build the INSERT statement
        $mqstr = $qstr; //  Start with the query string created when the first row was read.
        $mqstr .= ") VALUES (";
        //  Get the values in the same order as the columns.
        $vals = array();
        foreach($csvCols as $idx => $c_colname) {
            $val[] = "'".$row[$col_idx[$c_colname]]."'";
        }
        $mqstr .= implode(',',$vals);
        $mqstr .= ");";
        $query = mysqli_query($connect, $mqstr);
        $rowIDs[] = mysqli_insert_id($connect);
    }

}

//  Now we can copy the records into the other tables.

/*INSERT INTO CLIENTS TABLE FROM STAGING TABLE*/
$q2 .= "INSERT INTO clients (`orderNumber`,`place`,`workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`date`,`utility`,`serialNumber`,`serviceName`,`address2`,`servicePreformed`)";
$q2 .= " SELECT `orderNumber`,`place`,`workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`date`,`utility`,`serialNumber`,`serviceName`,`address2`,`servicePreformed`";
$q2 .= " FROM `staging`";
$q2 .= " WHERE `StageID` IN (";
$q2 .= implode(',',$rowIDs);
$q2 .=  ");";
$query = mysqli_query($connect, $q2);

/*INSERT INTO METERS TABLE FROM STAGING TABLE*/
$q3 .= "INSERT INTO meters (workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`utility`,`serialNumber`,`serviceName`,`bypassSize`,`meterSize`,`meterType`,`manufacturer`,`registration`,`technician`,`linePressurePSI`,`lat`,`lon`,`lowSideRrBefore`,`highSideRrBefore`,`firesideRrBefore`,`lowSideRrAfter`,`highSideRrAfter`,`firesideRrAfter`,`vgOxygen`,`vgCombustGas`,`vgCarbonMon`,`vgHydroSulf)";
$q3 .= " SELECT workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`utility`,`serialNumber`,`serviceName`,`bypassSize`,`meterSize`,`meterType`,`manufacturer`,`registration`,`technician`,`linePressurePSI`,`lat`,`lon`,`lowSideRrBefore`,`highSideRrBefore`,`firesideRrBefore`,`lowSideRrAfter`,`highSideRrAfter`,`firesideRrAfter`,`vgOxygen`,`vgCombustGas`,`vgCarbonMon`,`vgHydroSulf ";
$q3 .= " FROM staging";
$q3 .= " WHERE `StageID` IN (";
$q3 .= implode(',',$rowIDs);
$q3 .=  ");";
$query = mysqli_query($connect, $q3);

/*INSERT INTO TESTS TABLE FROM STAGING TABLE*/
$q4 .= "INSERT INTO `tests` (`workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`date`,`utility`,`serialNumber`,`serviceName`,`test1TestRateGPM`,`test1MeterVol`,`test1TesterVol`,`test1Accuracy`,`test1CorrectAcc`,`test2TestRateGPM`,`test2MeterVol`,`test2TesterVol`,`test2Accuracy`,`test2CorrectAcc`,`test3TestRateGPM`,`test3MeterVol`,`test3TesterVol`,`test3Accuracy`,`test3CorrectAcc`,`test4TestRateGPM`,`test4MeterVol`,`test4TesterVol`,`test4Accuracy`,`test4CorrectAcc`,`test5TestRateGPM`,`test5MeterVol`,`test5TesterVol`,`test5Accuracy`,`test5CorrectAcc`,`test6TestRateGPM`,`test6MeterVol`,`test6TesterVol`,`test6Accuracy`,`test6CorrectAcc`,`test7TestRateGPM`,`test7MeterVol`,`test7TesterVol`,`test7Accuracy`,`test7CorrectAcc`,`test8TestRateGPM`,`test8MeterVol`,`test8TesterVol`,`test8Accuracy`,`test8CorrectAcc`,`inletValveSize`,`InletValveType`,`inletValveCond`,`outletValveSize`,`outletValveType`,`outletValveCond`,`bypassValveSize`,`bypassValveType`,`bypassValveCond`,`vaultLength`,`vaultWidth`,`vaultHeight`,`meterLocation`,`testPort`,`testPortInstalled`,`testPortSize`,`picture`,`comments`,`testResults`,`retest`,`test1TestRateGPM2`,`test1MeterVol2`,`test1TesterVol2`,`test1Accuracy2`,`test1CorrectAcc2`,`test2TestRateGPM2`,`test2MeterVol2`,`test2TesterVol2`,`test2Accuracy2`,`test2CorrectAcc2`,`test3TestRateGPM2`,`test3MeterVol2`,`test3TesterVol2`,`test3Accuracy2`,`test3CorrectAcc2`,`test4TestRateGPM2`,`test4MeterVol2`,`test4TesterVol2`,`test4Accuracy2`,`test4CorrectAcc2`,`test5TestRateGPM2`,`test5MeterVol2`,`test5TesterVol2`,`test5Accuracy2`,`test5CorrectAcc2`,`test6TestRateGPM2`,`test6MeterVol2`,`test6TesterVol2`,`test6Accuracy2`,`test6CorrectAcc2`,`test7TestRateGPM2`,`test7MeterVol2`,`test7TesterVol2`,`test7Accuracy2`,`test7CorrectAcc2`,`test8TestRateGPM2`,`test8MeterVol2`,`test8TesterVol2`,`test8Accuracy2`,`test8CorrectAcc2`) ";
$q4 .= "SELECT `workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`date`,`utility`,`serialNumber`,`serviceName`,`test1TestRateGPM`,`test1MeterVol`,`test1TesterVol`,`test1Accuracy`,`test1CorrectAcc`,`test2TestRateGPM`,`test2MeterVol`,`test2TesterVol`,`test2Accuracy`,`test2CorrectAcc`,`test3TestRateGPM`,`test3MeterVol`,`test3TesterVol`,`test3Accuracy`,`test3CorrectAcc`,`test4TestRateGPM`,`test4MeterVol`,`test4TesterVol`,`test4Accuracy`,`test4CorrectAcc`,`test5TestRateGPM`,`test5MeterVol`,`test5TesterVol`,`test5Accuracy`,`test5CorrectAcc`,`test6TestRateGPM`,`test6MeterVol`,`test6TesterVol`,`test6Accuracy`,`test6CorrectAcc`,`test7TestRateGPM`,`test7MeterVol`,`test7TesterVol`,`test7Accuracy`,`test7CorrectAcc`,`test8TestRateGPM`,`test8MeterVol`,`test8TesterVol`,`test8Accuracy`,`test8CorrectAcc`,`inletValveSize`,`InletValveType`,`inletValveCond`,`outletValveSize`,`outletValveType`,`outletValveCond`,`bypassValveSize`,`bypassValveType`,`bypassValveCond`,`vaultLength`,`vaultWidth`,`vaultHeight`,`meterLocation`,`testPort`,`testPortInstalled`,`testPortSize`,`picture`,`comments`,`testResults`,`retest`,`test1TestRateGPM2`,`test1MeterVol2`,`test1TesterVol2`,`test1Accuracy2`,`test1CorrectAcc2`,`test2TestRateGPM2`,`test2MeterVol2`,`test2TesterVol2`,`test2Accuracy2`,`test2CorrectAcc2`,`test3TestRateGPM2`,`test3MeterVol2`,`test3TesterVol2`,`test3Accuracy2`,`test3CorrectAcc2`,`test4TestRateGPM2`,`test4MeterVol2`,`test4TesterVol2`,`test4Accuracy2`,`test4CorrectAcc2`,`test5TestRateGPM2`,`test5MeterVol2`,`test5TesterVol2`,`test5Accuracy2`,`test5CorrectAcc2`,`test6TestRateGPM2`,`test6MeterVol2`,`test6TesterVol2`,`test6Accuracy2`,`test6CorrectAcc2`,`test7TestRateGPM2`,`test7MeterVol2`,`test7TesterVol2`,`test7Accuracy2`,`test7CorrectAcc2`,`test8TestRateGPM2`,`test8MeterVol2`,`test8TesterVol2`,`test8Accuracy2`,`test8CorrectAcc2` ";
$q4 .= "FROM `staging` ";
$q4 .= " WHERE `StageID` IN (";
$q4 .= implode(',',$rowIDs);
$q4 .=  ");";
$query = mysqli_query($connect, $q4);

/*INSERT INTO COSTS TABLE FROM STAGING TABLE*/
$q5 .= "INSERT INTO `costs` (`workOrderNum`,`onsiteSurveyTestCost`,`onsiteSurveyTestRepairCost`,`offsiteSurveyTestCost`,`offsiteSurveyTestRepairCost`,`onsiteTestOnlyCost`,`onsiteTestRepairOnlyCost`,`onsiteRepairOnly`,`testPort2`,`repairCompleteMeterReplacement`,`repairCompleteMeterReplacementLaborCost`,`umeCost`,`umeLaborCost`,`rotatingLowSideDiskChamber`,`rotatingLowSideDiskChamberLaborCost`,`turbineChamberCost`,`turbineChamberLaborCost`,`automaticValveCost`,`automaticValveLaborCost`,`strainerCost`,`strainerLaborCost`,`lowRegisterCost`,`lowRegisterLaborCost`,`highRegisterCost`,`highRegisterLaborCost`,`miuCost`,`miuLaborCost`,`totalCost`) ";
$q5 .= "SELECT `workOrderNum`,`onsiteSurveyTestCost`,`onsiteSurveyTestRepairCost`,`offsiteSurveyTestCost`,`offsiteSurveyTestRepairCost`,`onsiteTestOnlyCost`,`onsiteTestRepairOnlyCost`,`onsiteRepairOnly`,`testPort2`,`repairCompleteMeterReplacement`,`repairCompleteMeterReplacementLaborCost`,`umeCost`,`umeLaborCost`,`rotatingLowSideDiskChamber`,`rotatingLowSideDiskChamberLaborCost`,`turbineChamberCost`,`turbineChamberLaborCost`,`automaticValveCost`,`automaticValveLaborCost`,`strainerCost`,`strainerLaborCost`,`lowRegisterCost`,`lowRegisterLaborCost`,`highRegisterCost`,`highRegisterLaborCost`,`miuCost`,`miuLaborCost`,`totalCost ` ";
$q5 .= "FROM `staging` ";
$q5 .= " WHERE `StageID` IN (";
$q5 .= implode(',',$rowIDs);
$q5 .=  ");";
$query = mysqli_query($connect, $q5);

/*INSERT INTO WORKORDERS TABLE FROM STAGING TABLE*/
$q6 .= "INSERT INTO `workorders` (`workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`utility`,`serialNumber`,`serviceName`) ";
$q6 .= "SELECT `workOrderNum`,`lowSideMIUNum`,`highSideMIUNum`,`accountNum`,`custName`,`address`,`locID`,`utility`,`serialNumber`,`serviceName  ";
$q6 .= "FROM `staging` ";
$q6 .= " WHERE `StageID` IN (";
$q6 .= implode(',',$rowIDs);
$q6 .=  ");";
$query = mysqli_query($connect, $q6);

?>

【讨论】:

  • 我已经在我的代码中处理了这个问题,基本上只是将它包装在我的 'if(asset($_POST['submit'])' 调用中,但是我收到了一个意外错误 (T_Variable ) 在这一行: $col_idx[$c_colname] = $colno; 实际上我只是通过在它上面的行中添加一个分号来修复它: $cols[$colno] = "".$c_colslist[$c_colname].""; 这解决了这个问题,但是现在我得到一个未定义的索引,用于 CSV 中发生在该行的每条记录。知道 $cols[$colno] 行可能发生什么吗?
  • 我想我看到了一个错字。将 $col_idx = array(0); 行更改为 $col_idx = array(); (大约第 40 行)
  • 好的,我删除了那个 '0' 并添加了一些调试语句。网页上没有 SQL 错误,只是 PHP 控制台的未定义索引。但是在我的调试转储页面上,它将临时表的插入显示为 (,,,,,,,,,,,) 所以它似乎由于某种原因没有捕获变量
  • 是的,未定义的索引(前几个元素是未定义的偏移量)都在这一行: $cols[$colno] = "".$c_colslist[$c_colname]."";我正在尝试一些事情,但还没有运气
  • 在构建 $col_idx 的 foreach 循环之后添加一行:echo "

    col_idx:

    ".print_r($col_idx,true)."
    ";看看它是否正在创建数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 2014-09-16
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多