Привет всем, это мой первый пост, подумал, что это будет хорошо, поскольку я окончательно застрял. Насколько я понимаю, операторы switch и If / else в PHP не имеют переменной области видимости.
Моя проблема заключается в том, что у меня есть файл CSV (образец один) с примерно 5 строками значений, и мне нужно его поместить в таблицу DB mySQL (заголовки столбцов представлены в моих «случаях» для моего оператора switch) BUt anyways I 'разбор CSV-файла и проверка, чтобы убедиться, что данные находятся в столбце, который он должен хранить, и сохраняя его в переменной. Затем я сохраняю все переменные в массиве, который становится сериализованным, а затем передается в мой SQL-запрос.
Я продолжаю получать ошибку SCREAM: Ошибка подавления игнорируется для (!) Примечание: Неопределенная переменная: компания в C: \ wamp \ www \ lcimport \ serialize.php в строке 98
Но я знаю, что эти переменные есть, потому что я могу повторить их, и они будут вызваны. Но если эти ошибки не исчезнут, мой запрос не будет запускаться, не заполняя мою таблицу db.
Что я делаю не так?
<?php //define some constants $db = 'lc'; mysql_connect('localhost', 'root', ''); mysql_select_db($db); mysql_error(); $uid = md5(uniqid(time())); //we only have this here to be a row counter $row = 1; if (($handle = fopen("C:\\wamp\\www\\lcimport\\4records.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); //var_dump($data); // echo $data[0]; echo ''; if ($row === 1) { $header = $data; } $row++; for ($c=0; $c < $num; $c++) { //echo $data[$c] . "<br />\n"; if ($row === 2) continue; switch ($header[$c] ){ case "Contact": $contact = explode (" ", $data[$c]); $firstName = $contact[0]; $lastName = $contact[1]; break; case "Company": $company = $data[$c]; case "Address1": //store $address1 = $data[$c]; break; case "Address2": $address2 = $data[$c]; break; case "Address3": $address3 = $data[$c]; break; case "City": $city = $data[$c]; break; case "State": $state = $data[$c]; break; case "Zip": $zip = $data[$c]; break; case "Phone1": $phone1 = $data[$c]; break; case "Phone2": $phone2 = $data[$c]; break; case "Phone 3": $phone3 = $data[$c]; break; case "Fax": $fax = $data[$c]; break; case "Accountno": $accountNo = $data[$c]; break; default: $junk = $data[$c]; break; } } echo $company; $meta = serialize(Array( "firstname" => $firstName, "lastname" => $lastName, "lawfirmname" => $company, 'address' => $address1, 'city' => $city, 'state' => $state, 'zip' => $zip, 'fulladdress' => '', 'officenumber' => $phone1, 'faxnumber' => $fax, 'mobilenumber' => $phone2, 'email' =>'nothing', 'website' => 'somthing.com', 'privacy' => 0, 'status' =>1 )); mysql_query("INSERT INTO `mg_profiles` (meta) VALUES ($meta)"); mysql_error(); } fclose($handle); } ?>
Если все остальные переменные существуют и работают правильно , то недостающий break;
должна быть проблема по делу Компании.
Не рекомендуется связываться с реляционной базой данных в цикле, больше памяти и процесса эффективно хранить результаты в массиве, и после того, как все данные получены, просто вставьте с помощью простого запроса, потому что
INSERT INTO `mg_profiles` (meta) VALUES (...), (...), (...)
работает отлично.
PHP имеет команду для обработки таких процессов:
while (($data = fgetcsv($handle, 1000, ",")) !== false) { if ($row == 1 || $row == 2) { $row++; continue; } list ($contact, $company, $address1 /*, ...*/) = $data; }
Просто определите его перед условным утверждением (перед if ())
$company = '';
Поскольку компания $ появляется только внутри условного оператора, когда условие терпит неудачу, оно wde не определено, следовательно, ошибка