从CSV导入PHP不会用空格覆盖旧数据
如果有人能帮忙的话,我会非常感激的,我已经在这里和谷歌上搜索过了,找不到有什么问题,我怎么说这些行的结尾是什么?这是密码从CSV导入PHP不会用空格覆盖旧数据,php,mysql,csv,import,Php,Mysql,Csv,Import,如果有人能帮忙的话,我会非常感激的,我已经在这里和谷歌上搜索过了,找不到有什么问题,我怎么说这些行的结尾是什么?这是密码 <?php if (isset($_POST['submitbulk'])) { if (is_uploaded_file($_FILES['filename']['tmp_name'])) { echo "<h2>Orders Updated:</h2>"; readfile($_FILES['filename']['tmp_
<?php if (isset($_POST['submitbulk'])) {
if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
echo "<h2>Orders Updated:</h2>";
readfile($_FILES['filename']['tmp_name']);
}
//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($data[2] != 0) {
$shipdate = $data[2];
}else{
$shipdate = date('Y-m-d');
}
if (isset($data[1])) {
$vendor_invoice = $data[1];
}else{
$vendor_invoice = 0;
}
if (isset($data[3])) {
$shipping_cost = $data[3];
}else{
$shipping_cost = "";
}
if (isset($data[4])) {
$fedex_tracking = $data[4];
$fedex_notify_order[] = $data[0];
$fedex_notify_tracking[] = $data[4];
}else{
$fedex_trackoing = "";
}
if (isset($data[5])) {
$ups_tracking = $data[5];
$ups_notify_order[] = $data[0];
$ups_notify_tracking[] = $data[5];
}else{
$ups_trackoing = "";
}
if (isset($data[6])) {
$ontrac_tracking = $data[6];
$ontrac_notify_order[] = $data[0];
$ontrac_notify_tracking[] = $data[6];
}else{
$ontrac_trackoing = "";
}
if (isset($fedex_tracking, $ups_tracking, $ontrac_tracking)) {
$array3[] = $data[0];
}else{
echo "";
}
$import = sprintf("UPDATE orders SET ".
"vendor_invoice_number='%s', ".
"ship_date='%s', ".
"ship_cost='%s', ".
"fedex_track_num='%s', ".
"ups_track_num='%s', ".
"ontrac_track_num='%s' ".
"WHERE orders_id=%s",
mysql_real_escape_string($vendor_invoice),
mysql_real_escape_string($shipdate),
mysql_real_escape_string($shipping_cost),
mysql_real_escape_string($fedex_tracking),
mysql_real_escape_string($ups_trackoing),
mysql_real_escape_string($ontrac_tracking),
(int)$data[0]);
mysql_query($import) or die(mysql_error());
}
fclose($handle);
print "</br>Updated Successfully";
//view upload form
}else { ?>
Import Vendor Invoice Numbers<br />
<form enctype='multipart/form-data' action='submit.php' method='post'>
<input size='50' type='file' name='filename'><br />
<input type='submit' name='submitbulk' value='Upload'></form>
<?php }
?>
构造查询的方式是错误的。您当前的代码有点混乱,我想这就是您要寻找的:
$import = sprintf("UPDATE orders SET ".
"vendor_invoice_number='%s', ".
"ship_date='%s', ".
"shipping_costs='%s', ".
"fedex_trackoing='%s', ".
"ups_trackoing='%s', ".
"ontrac_trackoing='%s' ".
"WHERE orders_id=%s",
mysql_real_escape_string($data[1]),
mysql_real_escape_string($shipdate),
mysql_real_escape_string($shipping_cost),
mysql_real_escape_string($fedex_trackoing),
mysql_real_escape_string($ups_trackoing),
mysql_real_escape_string($ontrac_trackoing),
(int)$data[0]);
基本问题是,您试图在双引号字符串初始化中使用“$data[1]”
,这根本不起作用
但请注意,这是值得怀疑的。您不应该盲目信任发布到服务器上的数据。任何东西都可能在其中,以目前的方式使用这些数据会带来巨大的安全问题。阅读一些关于“sql注入”的内容,考虑切换到高级的mysqli
扩展(您当前使用的mysql
扩展已被弃用),并了解“准备语句”的优点
更新此处的附加评论/更新的问题:
要防止基于csv文件的内容执行此类更新查询,最简单的方法是将执行命令包含在条件构造中:
if ( ! empty($data[1])
&& ! empty($shipdate)
&& ! empty($shipping_cost) )
&& ! empty($fedex_trackoing) )
&& ! empty($ups_trackoing) )
&& ! empty($ontrac_trackoing) ) {
mysql_query($import) or die(mysql_error());
}
显然,您需要的实际条件取决于您想要判断的情况,即您决定不更新数据库中的现有条目。当将此与问题内部发布的原始循环内容结合起来时,很明显代码现在有些混乱。重新实现这是一种更加精简的方式,这当然是有意义的…文件编码呢fgetcsv
只能正确读取utf-8
@iamseleepy此页面受IP限制,只允许知道该做什么的人使用,谢天谢地,我们不必担心编码问题,但如果有更好的方法,我洗耳恭听:)谢谢,这很有效,我知道有更好的方法导入数据,但我无法让它们工作,我想使用parseCSV,但我仍在努力让它发挥作用。谢天谢地,我们不必担心sql注入,因为谁有权访问该页面。有没有办法让它只在csv文件中有数据时更新列?我原以为if语句将其设置为“”可以做到这一点,但它只是将其更改为blank。我编辑了我的问题,添加了我发现的另一种方式,类似于此工作吗?当然可以。如果您可以在未更改的状态下使用csv文件中的数据,这是有意义的。但通常情况下,我们迟早需要脚本级别的灵活性。可能用于处理数据,但最有可能用于合理性检查和验证步骤。
if ( ! empty($data[1])
&& ! empty($shipdate)
&& ! empty($shipping_cost) )
&& ! empty($fedex_trackoing) )
&& ! empty($ups_trackoing) )
&& ! empty($ontrac_trackoing) ) {
mysql_query($import) or die(mysql_error());
}