2013-08-29 2 views
0

Здесь есть .xml формат:загрузка XML в PHP тузда - Вставить значение Нет в таблице

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><!--File Created By Call Logs Backup & Restore v3.21 on 29/08/2013 19:53:23--><?xml-stylesheet type="xsl" href="calls.xsl"?> 
<calls count="500"> 
<call number="+919257035805" duration="0" date="1377691732581" type="3" readable_date="28/08/2013 17:38:52" contact_name="(Unknown)" /> 
<call number="+919257035805" duration="38" date="1377691747866" type="2" readable_date="28/08/2013 17:39:07" contact_name="(Unknown)" /> 
</calls> 

Вот .php сценария

if ($_FILES[xml][size] > 0) { 
$file = $_FILES[xml][tmp_name]; 
$xml = simplexml_load_file($file); 
    $count = 0; 
foreach ($xml->call as $call) { 
$number = mysql_real_escape_string($call->number); 
$duration = mysql_real_escape_string($call->duration); 
$type = mysql_real_escape_string($call->type); 
$readable_date = mysql_real_escape_string($call->readable_date); 
$contact_name = mysql_real_escape_string($call->contact_name); 


mysql_query("INSERT INTO call_log (number, duration, type, readable_date, contact_name) VALUES ('$number', '$duration', '$type', '$readable_date', '$contact_name')") or die ("Error in query: $insert. ".mysql_error()); 

    } 

//redirect 
    header('Location: upload_sql.php?success=1?inserts=' . $count . ''); die; 

} 

Но этот сценарий дозы не добавить любое значение в таблицу. ..... полностью пусто

ответ

0

Вы пытаетесь прочитать значения атрибутов неправильно. Вы должны использовать вызов массива:

$number = mysql_real_escape_string($call['number']); 
$duration = mysql_real_escape_string($call['duration']); 
$type = mysql_real_escape_string($call['type']); 
$readable_date = mysql_real_escape_string($call['readable_date']); 
$contact_name = mysql_real_escape_string($call['contact_name']); 

При использовании $call->number объект SimpleXMLElement пытается получить дочерний узел <number>, который не существует в <call>.

Другое, что такое тип поля readable_date в БД?
если это не VARCHAR тогда никаких проблем, но если TIMESTAMP или DATETIME во вставной MySQL будет преобразовать 0000-00-00 00:00:00 что неправильно, так что вы должны сначала преобразовать его в нужный формат DB даты и время:
Это проще преобразовать уже имеющуюся метку время $call['date'] используя date() функция, чем конвертировать $call['readable_date']

$readable_date = date('Y-m-d H:i:s', (int) $call['date']); 

Но так как мне кажется, ваш date и readable_date не соответствуют те же даты, которые могут понадобиться, чтобы правильно преобразовать его:

$readable_date = convertDate($call['readable_date']); 

Функция для преобразования:

function convertDate($in) 
{ 
    preg_match('#^(\d{2})/(\d{2})/(\d{4}) (\d{2}):(\d{2}):(\d{2})$#', $in, $matches); 
    return $matches[3] . '-' . $matches[2] . '-' . $matches[1] . ' ' . 
     $matches[4] . ':' . $matches[5] . ':' . $matches[6]; 
} 
Смежные вопросы