Я делаю плагин для моего сайта wordpress. в том, что мне нужно импортировать контакты в файл csv в формате «ID, имя, мобильный, электронный, возрастный, гендерный», чтобы он автоматически включался в db. код я использовал это:in_array всегда возвращает false с fgetcsv
<?php global $wpdb;
$mainurl = get_option('siteurl')."/wp-admin/admin.php?page=add_admin_menu_import_contact";
if($_POST['importtrue'] == "true") {
if (! function_exists('wp_handle_upload')) require_once(ABSPATH . 'wp-admin/includes/file.php');
$uploadedfile = $_FILES['import_contact']['name'];
$uploaded_file_type = $_FILES['import_contact']['type'];
$allowed_file_types = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel','text/plain');
//$path= EMAIL_PLUGIN_DIR.'/import_contact/';
if(in_array($uploaded_file_type, $allowed_file_types)) {
// Options array for the wp_handle_upload function. 'test_upload' => false
$upload_overrides = array('test_form' => false);
$movefile = wp_handle_upload($_FILES['import_contact'], $upload_overrides);
$csv_titles = array('eemail_patient_id' => array('ID', 'id'),
'eemail_name_sub' => array('name', 'NAME','Name'),
'eemail_mobile_sub' => array('Mobile', 'phone','Phone','MOBILE'),
'eemail_email_sub' => array('email', 'emailid','EMAIL','Email'),
'eemail_age_sub' => array('Age', 'Old','AGE'),
'eemail_gender_sub' => array('Gender', 'gender','GENDER') );
if ($movefile) {
echo "<span style='color:green'>File is valid, and was successfully uploaded.</span>\n";
// var_dump($movefile);
print_r($csv_titles); echo '<br/>';
if (($handle = fopen($movefile["file"], "r")) !== FALSE)
{
$header = fgetcsv($handle, 1000, ",");
$dbkey = array();
foreach($header as $key) {
echo $key;
foreach ($csv_titles as $keys => $vals)
{
echo '<br/>'.$keys;
echo '<br/>';
print_r($vals);
if (in_array ($key,$vals))
{
$dbkey[]=$keys;
}
else
{
continue;
}
}
}
// echo '<br/>Dbkey: '; var_dump($dbkey);
if(! empty($dbkey)) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$i = 0;
$values = array();
foreach($dbkey as $key) {
if (!empty($data[$i])) {
$values[$key] = $data[$i];
$i++;
}
}
$keys = "`" . implode("`, `", array_keys($values)) . "`";
$values = "'" . implode("', '", $values) . "'";
$sql = "INSERT INTO ".WP_eemail_TABLE_SUB." ({$keys}) VALUES ({$values})";
$wpdb->get_results($sql);
}
$usql="update ".WP_eemail_TABLE_SUB." set patient_date= CURDATE() where patient_date='0000-00-00' ";
$wpdb->get_results($usql);
}
else { echo "<span style='color:red'>But provide valid titles for CSV in first row to import contacts </span>";}
fclose($handle);
}
// unlink($movefile["file"]);
}
} else
{
echo "Not an allowed type!\n";
}
}
?>
<script language="JavaScript" src="<?php echo emailnews_plugin_url('inc/setting.js'); ?>"></script>
<form name="form_importcontact" enctype="multipart/form-data" accept-charset="utf-8" method="post" action="admin.php?page=add_admin_menu_import_contact" onsubmit="return importcontact_submit()" >
<table width="100%">
<tr>
<td align="left" valign="middle" width="10%">Select CSV File:</td>
<td align="left" valign="middle"><input name="import_contact" id="import_contact" type="file" /></td>
</tr>
<tr>
<td height="35" colspan="2" align="left" valign="bottom">
<table width="100%">
<tr>
<td width="50%" align="left">
<input name="publish" lang="publish" class="button-primary" value="Import Contacts" type="submit" />
<input name="publish" lang="publish" class="button-primary" onclick="_cancel_import()" value="Cancel" type="button" />
</td>
<td width="50%" align="right"> </td>
</tr> <input type="hidden" id="importtrue" name="importtrue" />
</table></td>
</tr>
</table>
</form>
</div>
выход я всегда получаю:
Файл является действительным, и был успешно uploaded.But предоставить действительные названия для CSV в первом ряду, чтобы импортировать контакты
, когда я выходные массивы:
$csv_titles: Array ([eemail_patient_id] => Array ([0] => ID [1] => id) [eemail_name_sub] => Array ([0] => name [1] => NAME [2] => Name) [eemail_mobile_sub] => Array ([0] => Mobile [1] => phone [2] => Phone [3] => MOBILE) [eemail_email_sub] => Array ([0] => email [1] => emailid [2] => EMAIL [3] => Email) [eemail_age_sub] => Array ([0] => Age [1] => Old [2] => AGE) [eemail_gender_sub] => Array ([0] => Gender [1] => gender [2] => GENDER))
$key: ID Name Mobile Email Age Gender
выход echo 'keys'.$keys
и print_r ($ Vals):
keys: eemail_patient_id
Array ([0] => ID [1] => id)
keys: eemail_name_sub
Array ([0] => name [1] => NAME [2] => Name)
keys: eemail_mobile_sub
Array ([0] => Mobile [1] => phone [2] => Phone [3] => MOBILE)
keys: eemail_email_sub
Array ([0] => email [1] => emailid [2] => EMAIL [3] => Email)
keys: eemail_age_sub
Array ([0] => Age [1] => Old [2] => AGE)
keys: eemail_gender_sub
Array ([0] => Gender [1] => gender [2] => GENDER)
я понял, что второй in_array
, если условие не выполняется, следовательно, #dbkey пуст. но я не могу узнать, почему in_array всегда является ложным. логически это кажется правильным для меня. пожалуйста, помогите мне найти причину?
Заранее благодарим!
Попробуйте повторить значение '$ uploaded_file_type' –
, оно возвращает текст/csv. его правильный формат сэр. – Zammuuz
, тогда он должен работать ..... –