【发布时间】:2021-07-20 05:29:53
【问题描述】:
我正在尝试从 CSV 文件导入和获取数据并将其存储在我的数据库中
我的数据库表架构是这样的
用户(ID、Fname、Lname、user_type、major、Bday、Email、密码、图像、状态)
csv (111, Leo, pichon, , business, , leo@yzu.cn)
这是我的 csv 文件架构,列只匹配我的数据库架构所需的字段,它的类似如下:
'' 空字段要么有默认值,要么为空 ''
导入后,我的数据文件几乎每一行都会收到以下通知: 未定义的偏移量:php csv 中的 1 这是我的 php 函数:
if ($_GET['action'] = 'UsersCvs') {
if (isset($_FILES['users_cvs']['name'])) {
$file = $_FILES['users_cvs']['tmp_name'];
if ($_FILES["users_cvs"]["size"] > 0) {
$handle = fopen($file, "r");
$c = 0;
while (($files = fgetcsv($handle, 2000, ",")) !== false) {
// $id = mysqli_real_escape_string($link , $files[0]);
// $fname = $files[1];
// $lname = $files[2];
// $user_type = $files[3];
// $major = $files[4];
// $email = $files[6];
// $gender = mysqli_real_escape_string($link, $filesop[6]);
//$sql = "INSERT INTO users(ID , Fname,Lname , user_type , major , Email) values ('" . $id . "','" . $fname . "' ,'" . $lname . "' ,'" .$user_type. "','" . $major . "','" . $email . "')";
// mysqli_query($link, $sql);
$num = count($files);
echo "<p> $num fields in row $c: <br /></p>\n";
$c++;
for ($i = 0; $i < $num; $i++) {
echo $files[$i] . "<br />\n";
}
}
fclose($file);
// if ($sql) {
// echo 1 ;
// } else {
// echo mysqli_error($link); ;
// }
} else {
}
}else{
echo 'no file found';
}
}
对我来说似乎很奇怪,经过检查,我的数据被编码为不可读的字符串 像这样的
<p> 3 fields in line 2: <br /></p>
�Ѷѩ\h�1�������
��drKK(G~�S⼥���Nw|x���
�s�k�Ŗ�X���J�fb�fWш�eʬ�y�`hc�g�
第 3 行中的 1 个字段:
第 4 行中的 2 个字段:
我已经尽了最大努力并进行了在线研究,但我找不到任何匹配的参考资料 我非常感谢您提前提供帮助
【问题讨论】:
-
您对SQL Injections 持开放态度,应该使用参数化准备好的语句而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使是受信任的用户,you are still at risk of corrupting your data。 Escaping is not enough.
-
您确定您正在阅读正确的文件吗?检查 $file 的值。
-
你的表单方法是get还是post?不确定您是否可以使用 get 上传。
-
是的,我正在阅读正确的文件,我正在使用 ajax post 方法,并将操作附加到我的 url 以指示我的操作类型
-
我没有插入数据,但它似乎是在从文件中读取后立即注入的