[PHP & XML] XML in MySQL plaatsen

Pagina: 1
Acties:
  • 148 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Ik heb onderstaande XML en PHP code. Nu wil ik de tabel lesson in MySQL plaatsen. Dit werkt goed. Verder wil ik in een aparte MySQL tabel time de XML gegevens van time plaatsen met het lesson id.
Alleen wordt er bij time alleen het eerste veld ingeladen, dus alleen de waardes van time die horen bij lesson id LS_1000. Daarna wordt er niks meer in de database geplaatst.

Weet iemand wat ik verkeerd doe?

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
- <lesson id="LS_1000"> 
  <periods>2</periods> 
  <lesson_subject id="SU_com" /> 
  <lesson_teacher id="TR_hns" /> 
  <lesson_classes id="CL_CMD1v1" /> 
- <times> 
- <time> 
  <assigned_day>3</assigned_day> 
  <assigned_period>8</assigned_period> 
  <assigned_room id="RM_R1_020" /> 
  </time> 
- <time> 
  <assigned_day>3</assigned_day> 
  <assigned_period>9</assigned_period> 
  <assigned_room id="RM_R1_020" /> 
  </time> 
  </times> 
  </lesson> 
- <lesson id="LS_1100"> 
  <periods>2</periods> 
  <lesson_subject id="SU_com" /> 
  <lesson_teacher id="TR_kui" /> 
  <lesson_classes id="CL_CMD1n2" /> 
- <times> 
- <time> 
  <assigned_day>3</assigned_day> 
  <assigned_period>1</assigned_period> 
  <assigned_room id="RM_R1_462" /> 
  </time> 
- <time> 
  <assigned_day>3</assigned_day> 
  <assigned_period>2</assigned_period> 
  <assigned_room id="RM_R1_462" /> 
  </time> 
  </times> 
  </lesson> 


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php 
error_reporting(E_ALL); 
include ("connect2.php"); 
if( !$XML = simplexml_load_file( 'rooster.xml' ) ) 
  { 

  echo 'Fout bij het inlezen van het XML bestand'; 

} 
else 
  { 

  foreach( $XML->lessons->lesson as $Lesson ) 
    { 

$lesson_id = $Lesson['id']; 
$periods = $Lesson->periods; 
$lesson_subject_id = $Lesson->lesson_subject['id']; 
$lesson_subject_id = mysql_real_escape_string($lesson_subject_id); 
$lesson_teacher_id = $Lesson->lesson_teacher['id']; 
$lesson_classes_id = $Lesson->lesson_classes['id']; 

$query_lessons = "INSERT INTO lessons (lesson_id,periods,lesson_subject_id,lesson_teacher_id,lesson_classes_id) VALUES ('$lesson_id','$periods','$lesson_subject_id','$lesson_teacher_id','$lesson_classes_id')"; 
$result_lessons = mysql_query($query_lessons) or die (); 
} 

  foreach( $XML->lessons->lesson->times->time as $Time ) 
    { 
$times_assigned_day = $Time->assigned_day; 
$times_assigned_period = $Time->assigned_period; 
$times_assigned_room_id = $Time->assigned_room['id']; 

$query_times = "INSERT INTO times (lesson_id,assigned_day,assigned_period,assigned_room_id) VALUES ('$lesson_id','$times_assigned_day','$times_assigned_period','$times_assigned_room_id')"; 
$result_times = mysql_query($query_times) or die (mysql_error()); 
} 
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Door 't gebrek aan indentatie kan ik er zo gauw geen chocola van maken, maar misschien helpt 't als je de foreach voor Times binnen de foreach voor Lessons uitvoert?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ik ga mee met Afterlife. :P

Dit moet eenvoudig te debuggen zijn, voor de hand liggende zaken om te doen zijn een var_dump($Time) toevoegen aan die 2e loop, of uberhaupt var_dump($XML->lessons->lesson->times->time). Bij die laatste krijg je waarschijnlijk NULL te zien, en in dat geval had je de fout ook kunnen spotten als je gewoon devt met error_reporting op E_ALL en zichtbaar. ;)

offtopic:
En met betrekking tot de topictitle: Je plaatst geen XML in je database en je huidige probleem is puur het verwerken van de XML. ;) En het gebrek aan indentatie. :P

[ Voor 18% gewijzigd door Voutloos op 18-01-2008 08:31 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Blackbird-ce
  • Registratie: September 2005
  • Laatst online: 20:05
Verwijderd schreef op vrijdag 18 januari 2008 @ 03:13:
Door 't gebrek aan indentatie kan ik er zo gauw geen chocola van maken
Afgezien van het feit dat er 4 {'s staan, en maar 3 }'s. Waar stopt de else nu?