PDA

View Full Version : ورود اطلاعات از فایل xml به دیتابیس



raha_86
شنبه 26 مرداد 1387, 18:19 عصر
سلام دوستان خوبم
می خواستم ببینم چگونه این امکان وجود دارد که اطلاعات یک فایل xml را وارد دیتا بیس کردبا توجه به اینکه من با php و my sql کار میکنم.
خواهش می کنم منو راهنمایی کنید"البته در سایت phpclasses.org اطلاعاتی پیدا کردم ولی باز هم با مشکل برخوردم":افسرده:

vahid4134
شنبه 26 مرداد 1387, 18:44 عصر
خوب اطلاعات رو با xml parser آنالیز و استخارج می کنید بعد وارد می کنید

paksar
شنبه 26 مرداد 1387, 20:26 عصر
سلام

این لینک بدرت میخوره

http://www.w3schools.com/php/php_xml_parser_expat.asp

موفق باشی.

raha_86
یک شنبه 27 مرداد 1387, 11:00 صبح
سلام و با تشکر
من الان در حال باز کردن لینک هستم بررسی میکنم و خبرشو میدم
ممنونم

sama01
یک شنبه 27 مرداد 1387, 12:00 عصر
بهتر نبود می‌پرسیدید "چگونه اطلاعات را از xml استخراج کنیم."

حال مشکل اصلی‌تان را بیان کنید تا بتوان راه‌نمایی کرد.

raha_86
یک شنبه 27 مرداد 1387, 14:10 عصر
سلام دوستان

"sama01"جان،
من می خواهم یک سری اطلاعات(مثلا: نام-شماره دانشجویی-نمره) را از فایل xml (و یا فایل اکسل)( هر دفعه بعد از آپلود آن فایل توسط مدیر سایت) بگیرم و وارد جدولی(tbl_student) از database بکنم

لینکی که دوست خوبمان" paksar" قرار دادند را من استفاده کردم ، ولی با استفاده از آن ، فقط می توان اطلاعات را نمایش داد و نمی توان آنها را داخل جدولی از دیتابیس (مثلا بوسیله آرایه) ریخت من فایل php و فایل xml را پیوست کرده ام ، الان نمی دانم دستور زیر در کجا و چگونه وارد کنم؟
mysql_query("insert into tbl_student(idstudent,name,score) VALUES ('$idstudent','$name','$score')")or die("no insert");



ممنونم از راهنماییتون:افسرده:

sama01
یک شنبه 27 مرداد 1387, 14:50 عصر
فکر می‌کنم برای خواندن xml به‌ترین گزینه، استفاده از SimpleXML باشه.

فرض کنید این فایل xml باشه:


<?xml version="1.0" encoding="utf-8"?>
<AllStudents>
<student>
<name>Ali</name>
<id>8211210064</id>
<degree>14.86</degree>
</student>
<student>
<name>Reza</name>
<id>8211210042</id>
<degree>18.05</degree>
</student>
</AllStudents>
این هم فایل php برای خواندن فایل xml و ذخیره داده‌های آن در db:


<?php
$xml = simplexml_load_file('xml.xml');

foreach ($xml->student as $student) {
$name = $student->name;
$id = $student->id;
$degree = $student->degree;

$query = "INSERT INTO `table'
(`name`,`id`,`degree`)
VALUES
($name,$id ,$degree )";

$db->runQuery($query); //ذخیره داده‌ها در دیتابیس
}
?>

raha_86
یک شنبه 27 مرداد 1387, 16:08 عصر
سلام و با تشکر

من همان فایلهای شما را روی سرور قرار دادم فایل xml را نمیتونهload بکنه و پیغام زیر رو میده:

Fatal error: Call to undefined function: simplexml_load_file() in C:\Inetpub\vhosts\...\xml2.php on line 3

خواهشمندم منو راهنمایی کنید:ناراحت:

sama01
یک شنبه 27 مرداد 1387, 19:32 عصر
آیا host مورد استفاده‌ی شما، از PHP5 پشتیبانی می‌کنه؟

raha_86
دوشنبه 28 مرداد 1387, 10:46 صبح
سلام
من پس از بررسی متوجه شدم که php5 رو پشتیبانی نمی کنه و php4 رو پشتیبانی میکنه
حال با این وجود آیا باز هم راهی هست؟
ممنون از راهنماییتون

vahid4134
دوشنبه 28 مرداد 1387, 11:01 صبح
سلام
من پس از بررسی متوجه شدم که php5 رو پشتیبانی نمی کنه و php4 رو پشتیبانی میکنه
حال با این وجود آیا باز هم راهی هست؟
ممنون از راهنماییتون
اول از همه simplexml از utf-8 پشتيباني نمي كنه
بهتره از خود توابع پارسر xml استفاده كني
http://ir.php.net/xml

raha_86
دوشنبه 28 مرداد 1387, 14:41 عصر
اول از همه simplexml از utf-8 پشتيباني نمي كنه
بهتره از خود توابع پارسر xml استفاده كني
http://ir.php.net/xml


من قبلا هم از توابع پارسر xml استفاده کردم و با مشکل مواجه شدم .
باز هم فایل های قبلی رو پیوست کردم خواهشا راهنمایی کنید که چگونه اطلاعات فایل xml رو وارد دیتابیس کنم
چون با استفاده از اون دستورات ، فقط می توان اطلاعات را نمایش داد و نمی توان آنها را داخل جدولی از دیتابیس (مثلا بوسیله آرایه) ریخت من فایل php و فایل xml را پیوست کرده ام ، الان نمی دانم دستور زیر در کجا و چگونه وارد کنم؟
mysql_query("insert intotbl_student(idstudent,name,score) VALUES ('$idstudent','$name','$score')")ordie("no insert");

raha_86
سه شنبه 29 مرداد 1387, 09:10 صبح
سلام دوستان خوبم
اگه ممکنه یه نفر منو راهنمایی کنه...:افسرده:

vahid4134
سه شنبه 29 مرداد 1387, 10:23 صبح
من قبلا هم از توابع پارسر xml استفاده کردم و با مشکل مواجه شدم .
باز هم فایل های قبلی رو پیوست کردم خواهشا راهنمایی کنید که چگونه اطلاعات فایل xml رو وارد دیتابیس کنم
چون با استفاده از اون دستورات ، فقط می توان اطلاعات را نمایش داد و نمی توان آنها را داخل جدولی از دیتابیس (مثلا بوسیله آرایه) ریخت من فایل php و فایل xml را پیوست کرده ام ، الان نمی دانم دستور زیر در کجا و چگونه وارد کنم؟
mysql_query("insert intotbl_student(idstudent,name,score) VALUES ('$idstudent','$name','$score')")ordie("no insert");

دوست عزیز شما اول فکر کنید که می خواید اطلاعات رو نمایش بدید. بعدش بیاید اطلاعاتی رو که استراخ کردید برای نمایش به جای اینکه echo کنید داخل متغیر بریزید . حالا یک سری متغیر دارید که می خواید داخل دیتابیس بریزید

raha_86
سه شنبه 29 مرداد 1387, 11:17 صبح
سلام
خوب منم همینکارو میخواستم بکنم ، ولی چون فقط یک "echo $data" داخل این برنامه هست که آرایه هم نیست من نمیدانم چگونه باید اطلاعات مربوط به هر فرد رو تفکیک کنم.
حالا شما لطف کنین یه نگاهی به این کدها بیندازید و منو راهنایی کنین ممنون میشم


<?php
include("sqlconnect.php");
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs){ }

//Function to use at the end of an element
function stop($parser,$element_name)
{
echo "</br>";
}

//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}

//Specify element handler
xml_set_element_handler($parser,"start","stop");//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
while ($data=fread($fp,4096)){
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}

//Free the XML parser
xml_parser_free($parser);
//mysql_query("insert into tbl_student(idstudent,name,score) VALUES ('$idstudent','$name','$score')")or die("no insert");
?>

متشکرم:گیج:

raha_86
چهارشنبه 30 مرداد 1387, 08:22 صبح
سلام دوستان خوبم
چرا هیچ کس جواب منو نمیده؟
لطف کنین یه راهنمایی به من بکنین...:افسرده:

raha_86
پنج شنبه 31 مرداد 1387, 08:07 صبح
من نمی دونم یعنی سوال من اینقدر سخته که تو این فروم به این بزرگی هیچ کس جواب نمیده!!!

sama01
پنج شنبه 31 مرداد 1387, 10:54 صبح
1. در پاسخ به دوستمون که گفته بودند simpleXml با utf-8 مشکل داره باید عرض کنم که بنده تست کردم و هیچ مشکلی نداشت.
2. ظاهرا تنها راه شما استفاده از توابع DOM XML Functions (http://ir.php.net/domxml) هست.
ضمنا می‌تونید در این فایل (آشنايي با SimpleXML (http://www.iranphp.net/articles/aplications/Articles012.pdf)) نمونه‌ی انجام یک پروژه را ببینید. در این فایل، هم با استفاده از DOM XML و هم SimpleXml با یک فایل xml‌ ارتباط برقرار شده است. مفیده.

raha_86
پنج شنبه 31 مرداد 1387, 13:01 عصر
با سلام
واقعا ممنونم از نمونه ای که معرفی کردید، من اجرا کردم روی local محلی "روی سیستم خودم" درست انجام شد ولی روی سرور اینترنتی پیام خطای زیر رو می ده:

parse error, unexpected T_STRING in C:\Inetpub\vhosts\...\new.php on line 7

من دقیقا همان کد نمونه رو گذاشتم که خط 7 هم کد زیر است:


if ($shelf instanceof domElement) {
process_shelf($shelf);
}

این error مربوط به چی میشه و باید چیکار کنم؟

مربوط به ورژن php نمیشه؟

ممنون از لطفتون

raha_86
یک شنبه 03 شهریور 1387, 08:18 صبح
شرمنده ،من هنوز مشکلم برطرف نشده...
خیلی هم سرچ کردم ولی فایده ای نداشت ، اگه ممکنه ، یه نفر بگه همون فایلی که قبلا اتچ کردم رو چه تغییری باید بدم تا اطلاعاتش وارد دیتابیس بشه ، چون فقط همون روی سرور من جواب داد
خیلی خیلی متشکرم:خجالت::ناراحت:

vahid4134
یک شنبه 03 شهریور 1387, 19:09 عصر
1. در پاسخ به دوستمون که گفته بودند simpleXml با utf-8 مشکل داره باید عرض کنم که بنده تست کردم و هیچ مشکلی نداشت.
2. ظاهرا تنها راه شما استفاده از توابع DOM XML Functions (http://ir.php.net/domxml) هست.
ضمنا می‌تونید در این فایل (آشنايي با SimpleXML (http://www.iranphp.net/articles/aplications/Articles012.pdf)) نمونه‌ی انجام یک پروژه را ببینید. در این فایل، هم با استفاده از DOM XML و هم SimpleXml با یک فایل xml‌ ارتباط برقرار شده است. مفیده.
ممنون که اشتباه من رو اصلاح کردید (یادمه پارسال که تازه simpleXML مشهور شده بود تنها مشکلش پشتیبانی نکردن از یونیکدها بود که توی نسخه جدید اصلاح شده)

شرمنده ،من هنوز مشکلم برطرف نشده...
خیلی هم سرچ کردم ولی فایده ای نداشت ، اگه ممکنه ، یه نفر بگه همون فایلی که قبلا اتچ کردم رو چه تغییری باید بدم تا اطلاعاتش وارد دیتابیس بشه ، چون فقط همون روی سرور من جواب داد
خیلی خیلی متشکرم:خجالت::ناراحت:
simpleXML روی نسخه 5 هست نه روی نسخه 4 (این هاست شما چرا به php5 کوچ نمی کنه دگیه خیلی وقته که همه به php5 رفتن و الان هم منتظر نسخه 6 هستن)

vahid4134
یک شنبه 03 شهریور 1387, 19:19 عصر
برای حل این مشکل یا از
http://www.phpclasses.org/browse/package/3598.html
یا از
http://www.weberdev.com/get_example-4416.html
استفاده کنید. یا از مثال استفاده کنید یا اینکه اول به آرایه تبدیل کنید و بعد به راحتی آرایه رو insert کنید

raha_86
دوشنبه 04 شهریور 1387, 17:02 عصر
vahid4134جان، واقعا ممنونم

از http://www.weberdev.com/get_example-4416.html (http://www.weberdev.com/get_example-4416.html) استفاده کردم و به نتیجه رسیدم.

موفق باشی:لبخندساده:

حالا دوستان عزیز، آیا امکان این هستش که فایل اکسل رو مستقیما به دیتابیس وارد کنیم یا اینکه باید برنامه ای بنویسیم که اکسل رو تبدیل به xml کند و سپس داخل دیتابیس بریزیم؟

vahid4134
دوشنبه 04 شهریور 1387, 22:46 عصر
http://www.google.com/search?hl=en&client=firefox-a&rls=com.ubuntu:en-US:unofficial&hs=AZM&pwst=1&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=excel+to+mysql&spell=1

elham200870
جمعه 02 اسفند 1392, 15:31 عصر
سلام دوستان من با استفاده از simplexml_load_fileفایل xml رو خوندم و داخل جدولی که گفتم نمایش داده می شود حالا میخوام داخل دیتا بیسم که یه جدول bookدیگه با همین نام در داخل اون ایجاد کردم ذخیره کنم و اطلاعاتی که در فایل xml رو داخل بانک بریزد با اون دستور insert شما من انحام دادم $db->runQuery($insert); اما این خط با خطا روبرو میشم میشه در این مورد راهنماییم کنید آیا لازمه اون بانکی که داخل دیتابیسم هستش رو حذف کنم؟


$file_name =$_FILES ['file']['name'];
$real_path="image/".$file_name;

if (move_uploaded_file($_FILES['file']['tmp_name'],$real_path))
{


$languages = simplexml_load_file($file_name );
?>
<table border=1 align="center" dir="rtl">
<tr>
<th>کد کتاب</th>
<th>عنوان کتاب</th>
<th>تعداد کتاب</th>
<th>مولف</th>
<th>مترجم</th>
<th> ناشر</th>
<th>نوبت چاپ </th>
<th>سال چاپ</th>
<th>قیمت</th>
<th>صفحه</th>
<th>شابک</th>
<th>موضوع</th>

</tr>
<?php


foreach ($languages->book as $book) {?>

<tr>
<td align="right" valign="middle"><?php echo $book["code_book"];?></td>
<td align="right" valign="middle"><?php echo $book["titlebook"];?></td>
<td align="right" valign="middle"><?php echo $book["countbook"];?></td>
<td align="right" valign="middle"><?php echo $book["authername"];?></td>
<td align="right" valign="middle"><?php echo $book["translation"];?></td>
<td align="right" valign="middle"><?php echo $book["publisher"];?></td>
<td align="right" valign="middle"><?php echo $book["timeprint"];?></td>
<td align="right" valign="middle"><?php echo $book["yearprint"];?></td>
<td align="right" valign="middle"><?php echo $book["price"];?></td>
<td align="right" valign="middle"><?php echo $book["page"];?></td>
<td align="right" valign="middle"><?php echo $book["shabak"];?></td>
<td align="right" valign="middle"><?php echo $book["code_sub"];?></td>

</tr>
<?php
$titlebook=$book->titlebook;
$countbook=$book->countbook;
$authername=$book->authername;
$translation=$book->translation;
$publisher=$book->publisher;
$timeprint=$book->timeprint;
$yearprint=$book->yearprint;
$price=$book->price;
$page=$book->page;
$shabak=$book->shabak;
$code_sub=$book->code_sub;
$con=mysql_connect("localhost","root","");
$db=mysql_select_db("library",$con);
mysql_query("set names utf8",$con);
$insert=mysql_query( "insert into book (titlebook,countbook,authername,translation,publis her,timeprint,yearprint,price,page,shabak,code_sub ) values('$titlebook',$countbook,'$authername','$tra nslation','$publisher','$timeprint',$yearprint,$pr ice,$page,'$shabak',$code_sub) " , $con );
//$db->runQuery($insert);
} }

?>
</table>