2015-07-10 1 views
0

Я могу разобрать CSV-файл и создать инструкции вставки на 100% правильно, когда CSV-файл доступен через URL-адрес. Проблема в том, что код не работает, когда я использую fopen по адресу, заканчивающемуся ..format=csv.Parsing PHP Issue - fopen() не работает правильно для CSV-файла

Есть ли что-нибудь, что мне не хватает в коде для того, чтобы это сработало?

<?php 

$servername = "localhost"; 
$username = "root"; 
$password = "xxxx"; 
$dbname = "player"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 


$f_pointer=fopen("URL-format=csv","r"); 


$sql = "TRUNCATE TABLE scores"; 
$conn->query($sql); 


while(! feof($f_pointer)){ 
    $ar=fgetcsv($f_pointer); 
$sql="INSERT INTO  scores(pos,errorthing,name,total)values('$ar[0]','$ar[1]','$ar[2]','$ar[3]','$ar[4]')"; 
$conn->query($sql); 
    echo $sql; 
echo "<br>"; 
    } 
?> 

Это сообщение об ошибке:

>[email protected]:/# php testing.php 
    PHP Notice: Undefined offset: 1 in /testing.php on line 21 
    PHP Notice: Undefined offset: 2 in /testing.php on line 21 
    PHP Notice: Undefined offset: 3 in /testing.php on line 21 
    PHP Notice: Undefined offset: 4 in /testing.php on line 21 
    INSERT INTO scores(pos,errorthing,name,total)values(??? UtUehOE_ZUzUAfAakQ87dsLbM.csvu??O????_a?t.????s??-??P?蜗+?L?r???ן??? Mj???g<?ӛ????_7??Q?D?Y?R?e?c','','','','')<br>PHP Notice: Undefined offset: 2 in /testing.php on line 21 
    PHP Notice: Undefined offset: 3 in /testing.php on line 21 
    PHP Notice: Undefined offset: 4 in /testing.php on line 21 
    INSERT INTO scores(pos,errorthing,name,total)values(' ??R?<???M??oCQ??0? P????[?*?q??EF?iB????','?EJsM???','','','')<br>PHP Notice: Undefined offset: 2 in /testing.php on line 21 
    PHP Notice: Undefined offset: 3 in /testing.php on line 21 
    PHP Notice: Undefined offset: 4 in /testing.php on line 21 
    4n c?%???o??'??q?wĠ!f1?)?d)ΐ???᡾???z0?*total)values('R: 
             ??','?g?ٓ4tG9????fd???*???','','','') <br>PHP Notice: Undefined offset: 4 in /testing.php on line 21 
     INSERT INTO scores(pos,errorthing,name,total)values('m?``???)??VZg?\{[email protected]?P?}???gY9y?p?TA=ˌ','[email protected]^Q?I~FR??%g?? 
           *%;?M??.?&`??m?e cZy!????','4?xI??','#?????"}?.????u??d^????-e?dF?B','')<br>PHP Notice: Undefined offset: 3 in /testing.php on line 21 
     PHP Notice: Undefined offset: 4 in /testing.php on line 21 
     INSERT INTO scores(pos,errorthing,name,total)values('罡?m??7?&?ɣ 
                   ?g)??L3??l??T2?e[?v? 
]!?????xm??ѧB?7?ļ?J?????ۋ?bA?»O?Y?4e?O??O? 
cl??;???9-bZ?bط??Rk*t?????Ƣ??V??9??죨?\?۴ B??ԅ?T?a?OR? 3??P??????2~?}[email protected]?(????Ns%T1??i]=M???=?????+??)W#{Z?b?S)μ???W??','?3vK?qZ?D?7mE/T? 
                    ?ѡ????5?~SMl?bwɿ8J?ؾ>??1Q?/e?ifäs/U?D????'YI??m;NU?%ی?fx??٦?x#??Ù??_??_??O????e??{M???e?v?E??~?)????_??B??I??X?','','')<br>PHP Notice: Undefined offset: 1 in /testing.php on line 21 
     PHP Notice: Undefined offset: 2 in /testing.php on line 21 
     PHP Notice: Undefined offset: 3 in /testing.php on line 21 
     PHP Notice: Undefined offset: 4 in /testing.php on line 21 
     INSERT INTO scores(pos,errorthing,name,total)values('??w՛"???B???Ep?? DXҖ4:?Z?oU<?`???w??"?*?Ϛ???/??'7Ɂ?;q"?*?2?E?65??S4 
             ^??"?<҃ 
              pl??}?g?Ksw?'xI?x?R??8[??%d??? 0-kp??="D??r}J?־?g??','','','','')<br>PHP Notice: Undefined offset: 2 in /testing.php on line 21 
    PHP Notice: Undefined offset: 3 in /testing.php on line 21 
     PHP Notice: Undefined offset: 4 in /testing.php on line 21 
     INSERT INTO scores(pos,errorthing,name,total)values('v??Mrpqӳq????x??m??z?Z?ɮ??}R͘???3t?:\0YxOyLv8?ؠi?Mi??<?>?T?KN?<?j??.?ZB?','???c?R>???R??i????b?Ģ????Nb??b<V>鄪???(׽??$?ɓ(????L>??(????Ƿ'?."?t??q?f꼪?\????N?IH?ӡ?;?Y?iO4J??Xʤ9??Ă?5?RUb \V.?;?????2??QN????????+??MX???F?k?*h?Olr?Q$?&^9H?v}[email protected]?y?T?Ԯ???W?1?{??<???ܷN?b^V8 
     ?T?????\?nv4l?j??}???(?','','','')<br>PHP Notice: Undefined offset: 2 in /testing.php on line 21 
     PHP Notice: Undefined offset: 3 in /testing.php on line 21 
     PHP Notice: Undefined offset: 4 in /testing.php on line 21 
     INSERT INTO scores(pos,errorthing,name,total)values('`??wp??g???????B? u?SS??x?a^hKhv???51?JԸ8S???5zQ6?숵?`ntn?C*VMk?ؔ~|????Pw?)?IF?g?|MCt?gS????"V ?KXf>?^?6?]???????xW?W???gێ!??d?QoH??]?!??ia??`ͨ?>?-?h?ki?K ƅ?? ?!ZQ???t??? O???`??3??u??P??c܁[email protected];????~?????8Gc?;?$sI?z??"??R5??N?;вX[?^? Aȃj??i??d','?[??0GUH?ٷ???c?*???Jl?V??a?j??lă?N:?&[email protected]?O?:? S??????mPY??v?a똺?????P?p?=?#???]???ow?????GPp','','','')<br> 
+0

Можете ли вы показать весь URL? –

+0

Может быть, вычистить ошибку тоже немного - просто так, чтобы сообщество стало читать? – Fiid

ответ

0

В своем коде вы не получаете значения $ ар [0], $ ар [1], $ ар [2] и т.д., поэтому, вы получаете ошибки.

попробуйте это, чтобы узнать, как открыть CSV-файл, прочитать содержимое и вставить в соответствующие столбцы базы данных.

$row = 1; 
    if (($handle = fopen("xxxxxxxxx.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
    echo "<p> $num fields in line $row: <br /></p>\n"; 
    $row++; 
    for ($c=0; $c < $num; $c++) { 
     $blackpowder = $data; 
     $dynamit = implode(";", $blackpowder); 
     $pieces = explode(";", $dynamit); 
     $col1 = $pieces[0]; 
     $col2 = $pieces[1]; 
     $col3 = $pieces[2]; 
     $col4 = $pieces[3]; 
     $col5 = $pieces[5]; 
     mysql_query(" 
      INSERT INTO `xxxxxx` 
       (`xxx`,`xxx`,`xxx`,`xxxx`,`xxx`) 
      VALUES 
       ('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."') 
     "); 
    } 
} 
} 
+0

Зачем ПП «попробовать это»? Пожалуйста, добавьте объяснение того, что вы сделали, и почему вы сделали это именно так, не только для OP, но и для будущих посетителей SO. –

0

Не используйте while (!feof($f_pointer)), чтобы прочитать файл. Флаг EOF не установлен до после, который вы пытаетесь прочитать в конце файла. Итак, вы читаете дополнительное время, которое возвращает false, и когда вы пытаетесь использовать это как массив, вы получаете ошибки.

Изменение цикла к:

while ($ar = fgetcsv($f_pointer)) { 
    ... 
} 
+0

Спасибо за то, что нашли время ответить, теперь я получаю следующую ошибку. Примечание: неопределенная переменная: fp in /testing.php в строке 17 PHP Warning: fgetcsv() ожидает, что параметр 1 будет ресурсом, null указан в/testing. php on line 17 –

+0

Почему мой код не работает с URL-адресом с завершением .format = csv. Это странно, и я потратил 5 часов на эту ошибку: /. Спасибо Barmar за помощь –

+0

Извините, '$ fp' должен быть' $ f_pointer'. – Barmar